■ExcelVBAで開発 その2 Parameterの利用
Dim myCon As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Dim pgRs As ADODB.Recordset
Dim i10 As Long
Dim StrSql As String
'エラーハンドラ
On Error GoTo ODBCErrHandler
Set myCon = New ADODB.Connection
Set cmd = New ADODB.Command
myCon.Open ("Driver={PostgreSQL Unicode};server=[サーバのIPアドレス];Port=[ポート];database=[DB名];username=[ユーザー名];password=[パスワード];")
cmd.ActiveConnection = myCon
cmd.CommandTimeout = 0
cmd.CommandType = adCmdText
cmd.CommandText = "INSERT INTO cm_item( code, name, price, group_code, group_name) VALUES (?, ?, ?, ?, ?) "
Set prm = cmd.CreateParameter("code", adUnsignedInt, adParamInput)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("name", adVarChar, adParamInput, 30)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("price", adDecimal, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("price").Precision = 9 '
cmd.Parameters("price").NumericScale = 0
Set prm = cmd.CreateParameter("group_code", adUnsignedInt, adParamInput)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("group_name", adVarChar, adParamInput, 30)
cmd.Parameters.Append prm
'トランザクション開始
myCon.BeginTrans
'レコードの追加 ※i10に影響を受けたレコード数がセットされる
cmd.Parameters("code").Value = 7
cmd.Parameters("name").Value = "チョコボール"
cmd.Parameters("price").Value = 60
cmd.Parameters("group_code").Value = 2
cmd.Parameters("group_name").Value = "チョコ"
cmd.Execute i10
cmd.Parameters("code").Value = 8
cmd.Parameters("name").Value = "コーンチョコ"
cmd.Parameters("price").Value = 100
cmd.Parameters("group_code").Value = 2
cmd.Parameters("group_name").Value = "チョコ"
cmd.Execute i10
'コミット・ロールバック
'myCon.RollbackTrans
myCon.CommitTrans
myCon.Close
Set myCon = Nothing
Exit Sub
ODBCErrHandler:
'エラー処理
If myCon.Errors.Count > 0 Then
MsgBox myCon.Errors(0).Description
Else
MsgBox Err.Number
MsgBox Err.Description
End If
●Parameter
SQLのパラメータを指定したい場所に?を記載します。
cmd.CommandText = "INSERT INTO cm_item( code, name, price, group_code, group_name) VALUES (?, ?, ?, ?, ?) "
次にパラメータに割り当てます。
Set prm = cmd.CreateParameter("code", adUnsignedInt, adParamInput)
cmd.Parameters.Append prm
これで最初の?がcodeとして割り当てられます。あとは
cmd.Parameters("code").Value = 7
このようにパラメータに値をセット出来ます。
ソースが見やすくなる、速度が上がる等の利点があります。
またパラメータをセットするだけになるので文字列としてSQL
を作成しなくてよくなります。
トップへ戻る