【VBA】【ADO】【ODBCドライバ】SQL Serverへアクセスする

前提

1.SQL Serverのバージョンは2017

2.SQL Serverの認証方法は「Windows 認証」

3.「ADO」と「ODBCドライバ」を使用してDBへアクセス

4.以下のテーブルが作成済み

ポイント

1.接続文字列に「Trusted_Connection=Yes;」を記載することにより「Windows 認証」となる

2.「ADO」と「SQL Server Native Client(ODBCドライバ)」を使用してDBアクセスする

3.「SQL Server Native Client」は「OLE DBドライバ」であり「ODBCドライバ」でもある

サンプルプログラム

Option Explicit

Sub ODBCSample()
    
    '===============================
    '接続文字列
    '===============================
    'プロバイダ
    'Const ODBC_DRIVER As String = "{ODBC Driver 17 for SQL Server}" 'こっちでも可
    Const ODBC_DRIVER As String = "{SQL Server Native Client 11.0}"
    
    'SQL Serverをインストールしたコンピューター名
    Const DB_SERVER As String = "DESKTOP-TO07N7Q"
    'DB名
    Const DB_NAME As String = "testDB"
    
    'ログインユーザ名とパスワード ※Windows 認証の場合は不要
    'Const USER_NAME As String = "sampleUser"
    'Const PASSWORD As String = "password"
    
    '===============================
    'カーソルと読み取り専用の設定
    '===============================
    Const adOpenKeyset As Integer = 1
    Const adLockReadOnly As Integer = 1
    '===============================
    'テーブルの列
    '===============================
    Const ID_COLUMN As Integer = 0
    Const NAME_COLUMN As Integer = 1
    Const BARTHDAY_COLUMN As Integer = 2
    Const GENDER_COLUMN As Integer = 3
    
    Dim con As Object
    Dim strCon As String
    
    Dim strSQL As String
    Dim recordset As Object
    Dim recordStr As String
    
    Dim rcnt As Long
    
    '接続文字列の組み立て
    strCon = "Driver=" & ODBC_DRIVER & ";" & _
              "Server=" & DB_SERVER & ";" & _
              "DATABASE=" & DB_NAME & ";" & _
              "Trusted_Connection=Yes;"
    
    'オープン
    Set con = CreateObject("ADODB.Connection")
    con.Open strCon
    
    strSQL = "SELECT Id, Name, Birthday, Gender FROM Employee"
    
    'Select文を実行し結果を取得
    Set recordset = CreateObject("ADODB.Recordset")
    recordset.Open strSQL, con, adOpenKeyset, adLockReadOnly
    
    'レコード分繰り返し
    Do Until recordset.EOF
        
        recordStr = recordset.Fields(ID_COLUMN).Value & "," & _
                    recordset.Fields(NAME_COLUMN).Value & "," & _
                    recordset.Fields(BARTHDAY_COLUMN).Value & "," & _
                    recordset.Fields(GENDER_COLUMN).Value
        
        MsgBox recordStr
        
        ' 次のレコードへ進む
        recordset.MoveNext
    Loop
    
    '後片付け
    recordset.Close
    con.Close
    Set recordset = Nothing
    Set con = Nothing
    
End Sub

実行結果

備考

OLE DBドライバを使用してSQL Serverへアクセスする方法は、以下の記事を参照。

タイトルとURLをコピーしました