名前付きコマンドを利用する

名前付きコマンドを利用する

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オブジェクト]

取込元テーブル

実行結果