SQLServerに接続し、UPDATE文のSQLを実行するサンプルコードです。
Option Explicit
Call Main()
Sub Main()
Dim objCon
Dim query
Dim srvName, dbName, loginName, loginPass
'データベース接続情報を定義します。'
srvName = "DBサーバ名"
dbName = "DB名"
loginName = "DBユーザ名"
loginPass = "DBパスワード"
'SQLServerへ接続します。********************************************
On Error Resume Next
Set objCon = CreateObject("ADODB.Connection")
objCon.Open "Driver={SQL Server}; server=" & srvName & "; database=" & dbName & "; uid=" & loginName & "; pwd=" & loginPass & ";"
'エラー処理'
If Err.Number <> 0 Then
Msgbox("エラーが発生しました。" & " エラーナンバー:" & Err.Number & " エラー詳細:" & Err.Description)
Set objCon = Nothing
Exit Sub
End If
Err.Clear
On Error Goto 0
'SQL文を生成し実行します。******************************************
query = ""
query = query & "UPDATE テーブル名 "
query = query & "SET カラム1 = 値1 "
query = query & " ,カラム2 = 値2 "
query = query & " ,カラム3 = 値3 "
query = query & "WHERE "
query = query & " カラム1 = xx"
On Error Resume Next
'トランザクションを開始します。
objCon.BeginTrans
'SQLを実行します。
objCon.Execute(query)
'エラー処理'
If Err.Number <> 0 Then
Msgbox("エラーが発生しました。" & " エラーナンバー:" & Err.Number & " エラー詳細:" & Err.Description)
'トランザクションをロールバックします。
objCon.RollbackTrans
objCon.Close
Set objRS = Nothing
Set objCon = Nothing
Exit Sub
End If
Err.Clear
On Error Goto 0
'更新をコミットします。
objCon.CommitTrans
'終了処理をします。。********************************************
'オブジェクトを破棄します。
objCon.Close
Set objCon = Nothing
End Sub上記サンプルコードでは、トランザクション管理もしてあります。
もしUPDATEに失敗した場合は、更新内容がロールバックします。UPDATEが成功したら、更新内容を正式にコミットします。
今回のようなUPDATE文が一回実行されるだけの処理であればトランザクション管理も不要かもしれませんが、例えば前回のサンプルコードのように、最初にSELECTして取得結果をレコードセットに格納し、そのレコードセットの行数分ループをして、そのループ処理のなかでUPDATEやINSERTなどの処理を実行する場合は必ずトランザクション管理を実装してください。
そうしないと、ループ処理の途中でエラーが発生し、中途半端な更新が行われてしまい、目も当てられない状態になりますので。
今回も参考になれば幸いです。
