名前付きコマンドにパラメーターを渡す
コマンドの結果が名前付きコマンドの "出力" 変数として渡されるのと同様に、パラメーター化されたコマンドのパラメーターを名前付きコマンドに "入力" 変数として渡すことができます。
次のコード例では、CustomerID が "ALKFI" である顧客によって行われたすべての注文を Northwind データベースから取得しようとしています。 CustomerID の値は、名前付きコマンドが呼び出さるときに提供されます。
Const DS = "MySqlServer"
Const DB = "Northwind"
Const DP = "SQLOLEDB"
Dim objConn As New ADODB.Connection
Dim objRs As New ADODB.Recordset
Dim objComm As New ADODB.Command
CommandText = "SELECT OrderID, OrderDate, " & _
"RequiredDate, ShippedDate " & _
"FROM Orders " & _
"WHERE CustomerID = ? " & _
"ORDER BY OrderID"
ConnectionString = "Provider=" & DP & _
";Data Source=" & DS & _
";Initial Catalog=" & DB & _
";Integrated Security=SSPI;"
' Connect to the data source.
objConn.Open ConnectionString
' Set a named command.
objComm.CommandText = CommandText
objComm.CommandType = adCmdText
objComm.Name = "GetOrdersOf"
Set objComm.ActiveConnection = objConn
' Call the named command, passing a CustomerID value
' as the input parameter.
' "ALFKI" is the required input parameter,
' objRs is the resultant output variable.
objConn.GetOrdersOf "ALKFI", objRs
' Display the result.
Debug.Print "All orders by ALFKI:"
Do While Not objRs.EOF
Debug.Print vbTab & objRs(0) & vbTab & objRs(1) & vbTab & _
objRs(2) & vbTab & objRs(3)
objRs.MoveNext
Loop
' Clean up.
objRs.Close
objConn.Close
Set objRs = Nothing
Set objConn = Nothing
Set objComm = Nothing
すべての入力パラメーターが出力変数より前にあり、パラメーターのデータ型が一致するか、対応するフィールドのデータ型に変換できる必要があることに注意してください。 次のステートメントを見てください。
objConn.GetOrdersOf 12345, objRs
この場合、必要な入力パラメーターが Integer 型ではなく String 型であるため、データ型不一致のエラーが発生します。
次の呼び出しを見てください。
objConn.GetOrdersOf "12345", objRs
これは有効ですが、データベースにはこのようなレコードが存在しないため、空の結果セットが生成されます。