VBA SQL Serverに接続して存在チェックを行い値をInsertする

VBAで、SQL Serverに接続して存在チェックを行い値をInsertするコードを記述してます。
環境
- OS windows10 64bit
存在チェックを行い値をInsert
存在チェックを行い値をInsertするには、「ADODB.Connection」を使用します。
実際に適当なボタンを用意して、テーブルに既に存在するデータはInsertせずにセルの値をInsertしていく
以下のソースコードを記述します。
DBは「sample」というDBで、テーブルは下図の列が定義された「Test」を使用します。

「Test」 テーブル select結果

挿入するセルデータ

ソースコード
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レコードセットオブジェクト
For i = 1 To Range("A1").End(xlDown).Row
' 存在チェック
strSQL = "SELECT top(10) * FROM [sample].[dbo].[Test] where id =" & Cells(i, 1).Value
adoRs.Open strSQL, adoCn 'レコード抽出
' 存在しなければ insertを実行
If adoRs.EOF Then
' 実行するクエリ
strSQL = "Insert into [sample].[dbo].[Test](id,name) VALUES(" & Cells(i, 1).Value & ",'" & Cells(i, 2).Value & "' )"
End If
' クローズ
adoRs.Close
' 実行
adoCn.Execute (strSQL)
Next i
GoTo EXIT_SECTION
EXCEPTION_SECTION:
With Err
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
End Sub
実行後に、データがinsertされていることが確認できます。

-
前の記事
PostgreSQL 文字列内でシングルクオーテーションを使用する 2022.10.02
-
次の記事
mac 隠しファイルを作成する 2022.10.02
コメントを書く