データのクエリ
VBA からの接続 後、Select メソッドを呼び出して、SQL SELECT ステートメントを実行します。
public bool Select(string queryString, object paramNames, object paramValues)
Select メソッドはクエリの成功または失敗を示すboolean を返し、次のパラメータを受け入れます。
queryString | 実行するクエリ。例:SELECT actor.attributes.email, repository.name FROM [publicdata].[samples].github_nested WHERE repository.name = 'EntityFramework' |
paramNames | クエリで使用される名前付きパラメータを含む配列。パラメータクエリを使用する場合は、必須。 |
paramValues | パラメータ名に対応する値を含む配列。パラメータクエリを使用する場合は、必須。 |
結果にアクセス
結果からフィールドを返すには、モジュールのGetColumnName およびGetValue メソッドを呼び出します。MoveNext を呼び出して結果を反復処理します。次の例には、シートに行を書き込むための追加のロジックも含まれています。
- スプレッドシートの最初の行のカラムをリストします。
Dim ColumnCount As Integer ColumnCount = module.GetColumnCount For Count = 0 To ColumnCount - 1 Application.ActiveSheet.Cells(1, Count + 1).Value = module.GetColumnName(Count) Next
- スプレッドシートの2行目の各行の出力を開始します。Null 値と日付型の追加のロジックチェックを行います。
Dim RowIndex As Integer RowIndex = 2 While (Not module.EOF) For columnIndex = 0 To ColumnCount - 1 If Conversion.CInt(module.GetColumnType(columnIndex)) = Conversion.CInt(vbDate) And Not IsNull(module.GetValue(columnIndex)) Then Application.ActiveSheet.Cells(RowIndex, columnIndex + 1).Value = Conversion.CDate(module.GetValue(columnIndex)) Else Application.ActiveSheet.Cells(RowIndex, columnIndex + 1).Value = module.GetValue(columnIndex) End If Next module.MoveNext RowIndex = RowIndex + 1 Wend
例
以下は、簡単なSELECT の例です。Google BigQuery を検索するマクロ例については、パラメータ化されたクエリの実行 を参照してください。Sub DoSelect()
On Error GoTo Error
Dim module As New ExcelComModule
module.SetProviderName ("GoogleBigQuery")
Cursor = Application.Cursor
Application.Cursor = xlWait
Dim nameArray,valueArray
Query = "SELECT actor.attributes.email, repository.name FROM [publicdata].[samples].github_nested LIMIT 10"
module.SetConnectionString ("ProjectId=NameOfProject;DatasetId=NameOfDataset;")
If module.Select(Query, nameArray, valueArray) Then
Dim ColumnCount As Integer
ColumnCount = module.GetColumnCount
For Count = 0 To ColumnCount - 1
Application.ActiveSheet.Cells(1, Count + 1).Value = module.GetColumnName(Count)
Next
Dim RowIndex As Integer
RowIndex = 10
While (Not module.EOF)
For columnIndex = 0 To ColumnCount - 1
If Conversion.CInt(module.GetColumnType(columnIndex)) = Conversion.CInt(vbDate) And Not IsNull(module.GetValue(columnIndex)) Then
Application.ActiveSheet.Cells(RowIndex, columnIndex + 1).Value = Conversion.CDate(module.GetValue(columnIndex))
Else
Application.ActiveSheet.Cells(RowIndex, columnIndex + 1).Value = module.GetValue(columnIndex)
End If
Next
module.MoveNext
RowIndex = RowIndex + 1
Wend
MsgBox "The SELECT query was successful."
Else
MsgBox "The SELECT query failed."
End If
Application.Cursor = Cursor
module.Close
Exit Sub
Error:
MsgBox "ERROR: " & Err.Description
Application.Cursor = Cursor
module.Close
End Sub