名前付きコマンドを利用する
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オブジェクト]
取込元テーブル
実行結果

