パラメータ化されたクエリの実行
パラメータ化されたクエリは、再利用してSQL インジェクション攻撃を軽減できます。SELECT および他のSQL データ操作ステートメントをパラメータ化されたクエリとして 実行できます。パラメータ化されたクエリは配列を入力として受け取ります。
例:Reckon Accounts Hosted の検索
次のマクロ例は、パラメータ化された検索を実行します。マクロを実行すると、検索値を入力するよう求められます。
Sub DoSelectParams()
On Error GoTo Error
pName = InputBox("Name:", "Get Name")
If pName = False Then
Exit Sub
End If
Dim module As New ExcelComModule
module.SetProviderName ("ReckonAccountsHosted")
Cursor = Application.Cursor
Application.Cursor = xlWait
Dim nameArray
nameArray = Array("NameParam")
Dim valueArray
valueArray = Array(pName)
Query = "SELECT Id, Name FROM Customers WHERE Name = @NameParam"
module.SetConnectionString ("SubscriptionKey=test;CountryVersion=2021.R2.AU;CompanyFile=Q:/CData Software.QBW;User=test;Password=test;InitiateOAuth=GETANDREFRESH;CallbackURL=http://localhost:33333;OAuthClientId=MyOAuthClientID;OAuthClientSecret=MyOAuthClientSecret;")
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 = 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
MsgBox "The SELECT query was successful."
Else
MsgBox "The SELECT query failed."
End If
module.Close
Application.Cursor = Cursor
Exit Sub
Error:
MsgBox "ERROR: " & Err.Description
module.Close
Application.Cursor = Cursor
End Sub