名前付きコマンドを利用する
Sub 名前付きコマンドを実行() Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset Dim myCmd As New ADODB.Command, myPmt As ADODB.Parameter, mySrc As String '対象となるデータベース mySrc = ThisWorkbook.Path & "\mdb\4-sampleDB.mdb" '接続 With myCon .Provider = "Microsoft.Jet.OLEDB.4.0;" .Open mySrc End With With myCmd '元となるSQLを指定 .CommandText = "SELECT * FROM 社員 WHERE 所属 = [所属を入力];" .CommandType = adCmdText 'Commandオブジェクトに名前を指定 .Name = "getSHAIN" .ActiveConnection = myCon Set myPmt = myCmd.CreateParameter("所属", adChar, adParamInput, 10, "営業1課") 'パラメータの初期値を設定 .Parameters.Append myPmt End With '「getSHAIN」というCommandオブジェクトをConnectionオブジェクトの 'メソッドのように実行後、転記 myCon.getSHAIN myRS Range("A1").CopyFromRecordset myRS myRS.Close 'パラメータを変更して再度「getSHAIN」を実行 myCmd.Parameters("所属").Value = "営業2課" myCon.getSHAIN myRS Range("A5").CopyFromRecordset myRS myRS.Close '*** 別の記述方法 *** 'パラメータを変更して再度「getSHAIN」を実行 myCon.getSHAIN "営業3課", myRS Range("A10").CopyFromRecordset myRS '*** 注意 *** 'パラメータの数字は全角でも半角でも良いようだ '「営業2課」としても「営業2課」のデータも選択する Set myPmt = Nothing Set myCmd = Nothing myRS.Close: Set myRS = Nothing myCon.Close: Set myCon = Nothing End Sub
CommandオブジェクトのNameプロパティに値を設定しておくと、任意のCommandオブジェクトをConnectionオブジェクトのメソッドのように利用することができる。
CommandオブジェクトのNameプロパティを使って名前をつけたCommandオブジェクトは、ActiveConnectionプロパティに指定したConnectionオブジェクトのメソッドのようにして利用することができる。
Commandオブジェクトの実行結果が、結果セットを返す場合には、任意のRecordsetオブジェクトを引数として渡して、その結果を受け取ることができる。
名前付きコマンドを実行する際には、パラメータを引数のように渡して実行することも可能。
Commandオブジェクト経由でパラメータの値を変更 |
---|
myCmd.Parameters("所属").Value = "営業2課" myCon.getSHAIN myRS |
引数のようにして実行 |
myCon.getSHAIN "営業3課", myRS |
複数のパラメータを持つ場合には、パラメータの数だけ引数を列記し、結果セットを返す場合には、最後にRecordsetオブジェクトを指定する。
名前付きコマンド パラメータ1,パラメータ2,・・・[Recordsetオブジェクト]
取込元テーブル
実行結果