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などの処理を実行する場合は必ずトランザクション管理を実装してください。
そうしないと、ループ処理の途中でエラーが発生し、中途半端な更新が行われてしまい、目も当てられない状態になりますので。
今回も参考になれば幸いです。