手順 2: コマンドの作成 (ADO チュートリアル) サイドバー

コマンドは、"パラメータ化" することができます。パラメータ化コマンドはコマンド テキストから構成され、そのテキストは、コマンドが実行されるごとにユーザー指定の値で変更することができます。

プレースホルダ ('?') は、コマンド テキスト内で変更可能な部分を示します。コマンド テキスト内の各プレースホルダは、コマンドが実行される時に Parameters コレクション内の対応する Parameter オブジェクトの値に置き換えられます。

Parameter オブジェクトを作成し、それを Command オブジェクトの Parameters コレクションに追加するには、2 通りの方法があります。1 つは、Parameter オブジェクトを作成して、NameTypeDirectionSize、および Value の各プロパティを個別に設定してから、Parameters コレクションに追加する方法です。もう 1 つは、Parameter オブジェクトを Command オブジェクトの CreateParameter メソッドで作成してプロパティを設定する方法、つまり、新しく作成された Parameter オブジェクトを追加するのに、すべてを 1 つのステートメントで行う方法です。

最後に、Command.Execute または Recordset.Open メソッドを呼び出して、パラメータでプレースホルダを置き換え、Recordset を取得します。Parameter オブジェクトの Value プロパティを別の名前に変更します。その後、Execute または Recordset.CloseOpen メソッドを再び呼び出し、別の著作者のために新しい Recordset を取得します。

パラメータ化コマンドのパフォーマンスを Prepared プロパティで最適化します。Execute メソッドでは、Recordset オブジェクトの CursorType または LockType プロパティを指定できないことに注意してください。

次に、簡単な例を示します。

Public Sub main()
Dim cnn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim prm As ADODB.Parameter
Dim strCmd As String

strCmd = "SELECT * FROM Authors WHERE au_lname = ?"
cmd.CommandText = strCmd
cmd.Parameters.Append _
    cmd.CreateParameter("last name", adVarChar, adParamInput, 40, "")

cnn.Open "dsn=Pubs;uid=sa;pwd=;"
cmd.ActiveConnection = cnn

cmd.Parameters("last name") = "Ringer"
DisplayRst cmd.Execute
cmd.Parameters("last name") = "Karsen"
DisplayRst cmd.Execute

cnn.Close
End Sub

Private Sub DisplayRst(rst As ADODB.Recordset)
If rst.EOF = True Then
    Debug.Print "No recordset returned for Name = '"; _
                    rst.ActiveCommand.Parameters(0); "'"
End If
While rst.EOF = False
    Debug.Print "Name = '"; rst!au_fname; " "; rst!au_lname; "'"
    rst.MoveNext
Wend
End Sub

戻る   手順 2: コマンドの作成