VBA SQL Serverに接続してADODB.RecordsetのFindを使用してUpdateを行う
VBAで、SQL Serverに接続してADODB.RecordsetのFindを使用してUpdateを行うコードを記述してます。
環境
- OS windows10 64bit
Findを使用してUpdate
実際に適当なボタンを用意して、Findを使用して、Updateを行う
以下のソースコードを記述します。
DBは「sample」というDBで、テーブルは下図の列が定義された「Test」を使用します。
Updateされる前のテーブル
アップデートするセルデータ
ソースコード
Option Explicit
Private Const PROVIDER As String = "SQLOLEDB"
Private Const DATA_SOURCE As String = "localhost" 'サーバ名
Private Const DATABASE As String = "sample" 'データベース名
'SQL Server認証で接続する場合
Private Const USER_ID As String = "sa" 'ユーザID
Private Const PASSWORD As String = "password" 'ユーザパスワード
Private Sub CommandButton1_Click()
On Error GoTo EXCEPTION_SECTION
Const PROCEDURE_NAME As String = "CommandButton1_Click"
Dim strSQL As String
Dim i As Long
Dim adoCn As Object
Dim adoRs As Object
'--------------------------------
' データベース接続
'--------------------------------
Set adoCn = CreateObject("ADODB.Connection")
'SQL Server認証
adoCn.ConnectionString = "Provider=" & PROVIDER _
& ";Data Source=" & DATA_SOURCE _
& ";Initial Catalog=" & DATABASE _
& ";UID=" & USER_ID _
& ";PWD=" & PASSWORD
' オープン
adoCn.Open
Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクト
' トランザクション開始
adoCn.BeginTrans
With adoRs
.Open "Test", adoCn, 1, 3 'レコードセットを開く(1:キーセットカーソル 3:レコードごとの共有的ロック)
For i = 1 To Range("A1").End(xlDown).Row
' アップデートを実行
.Find "ID = " & Cells(i, 1).Value, 0
!Name = Cells(i, 2).Value
.Update
Next i
.Close 'レコードセットのクローズ
End With
' コミット
adoCn.CommitTrans
GoTo EXIT_SECTION
EXCEPTION_SECTION:
With Err
' エラー時はロールバック
If .Number <> 0 Then adoCn.RollbackTrans
MsgBox (.Description), vbOKOnly + vbExclamation + vbSystemModal, PROCEDURE_NAME
End With
GoTo EXIT_SECTION
EXIT_SECTION:
' レコードセットのクローズ
If Not adoRs Is Nothing Then
If adoRs.State = 1 Then adoRs.Close ' 開かれていればクローズ
Set adoRs = Nothing
End If
' データベースのクローズ
If Not adoCn Is Nothing Then
If adoCn.State = 1 Then adoCn.Close ' 開かれていればクローズ
Set adoCn = Nothing
End If
MsgBox ("終了")
End Sub
実行後に、データがUpdateされていることが確認できます。
-
前の記事
javascript エラー「Uncaught SyntaxError: Invalid left-hand side in assignment」の解決方法 2022.06.22
-
次の記事
javascript エラー「SyntaxError: Unexpected string literal “xxx”. Expected a parameter pattern or a ‘)’ in parameter list.」の解決方法 2022.06.23
コメントを書く