SQLの基本的なコードパターン パラメータを必要とするパターン
主要なパターン以外に「パラメータを必要とするパターン」がある。
パラメータを必要とするクエリ実行の際に使用する。
VBAを使用してSQL文を作成する場合、わざわざパラメターの必要なSQLを作成しなくても、その都度必要なSQLを作成してしまって前述の2つのパターンを使用しても良い。
何度も条件を変えて実行するようなSQLであれば、パラメータの必要なSQLを作成して「名前つきコマンド」として運用した方が分かりやすい場合もある。
Sub SQL実行パターン3_1() Dim myCon As New ADODB.Connection, myCmd As New ADODB.Command Dim myPmt As ADODB.Parameter Dim mySrc As String '接続先データベース mySrc = ThisWorkbook.Path & "\mdb\4-sampleDB.mdb" '接続 With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" .Open mySrc End With 'SQLを実行 With myCmd '元となるSQL .CommandText = "update アルバイト set 手当 = ? where 所属 = ?;" .CommandType = adCmdText .ActiveConnection = myCon 'パラメータの初期値を設定し、追加 Set myPmt = myCmd.CreateParameter("金額", adInteger, adParamInput, , 5000) .Parameters.Append myPmt Set myPmt = myCmd.CreateParameter("所属", adChar, adParamInput, 10, "キッチン") .Parameters.Append myPmt '設定値で処理を実行 .Execute '新しいパラメータを設定し、再度実行 .Parameters("金額").Value = 3000 .Parameters("所属").Value = "ホール" .Execute End With Set myCmd = Nothing myCon.Close: Set myCon = Nothing End Sub
パラメータの必要なSQLを作成して「名前つきコマンド」として実行
Sub SQL実行パターン3_2() Dim myCon As New ADODB.Connection, myCmd As New ADODB.Command Dim myPmt As ADODB.Parameter Dim mySrc As String '接続先データベース mySrc = ThisWorkbook.Path & "\mdb\4-sampleDB.mdb" '接続 With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" .Open mySrc End With 'SQLを実行 With myCmd '元となるSQL .CommandText = "update アルバイト set 手当 = ? where 所属 = ?;" .CommandType = adCmdText 'Commandオブジェクトに名前をつける .Name = "手当更新" .ActiveConnection = myCon 'パラメータの初期値を設定し、追加 Set myPmt = myCmd.CreateParameter("金額", adInteger, adParamInput, , 5000) .Parameters.Append myPmt Set myPmt = myCmd.CreateParameter("所属", adChar, adParamInput, 10, "キッチン") .Parameters.Append myPmt End With '名前付きコマンドを実行 myCon.手当更新 '新しいパラメータを設定 With myCmd .Parameters("金額").Value = 3000 .Parameters("所属").Value = "ホール" End With '名前付きコマンドを実行 myCon.手当更新 Set myCmd = Nothing myCon.Close: Set myCon = Nothing End Sub
新しいパラメータを設定する箇所は以下のように記述しても実行可能。
'新しいパラメータを設定 With myCmd .Parameters("金額").Value = 3000 .Parameters("所属").Value = "ホール" End With '名前付きコマンドを実行 myCon.手当更新
↓
'名前付きコマンドを再度実行 myCon.手当更新 3000, "ホール"