前提
1.SQL Serverのバージョンは2017
2.SQL Serverの認証方法は「Windows 認証」を指定する
3.「ADO」と「OLE DBドライバ」を使用してDBへアクセスする
4.以下のテーブルが作成済み
5.上記テーブルへSelect文を実行する
ポイント
1.接続文字列に「Integrated Security=SSPI;」を記載することにより「Windows 認証」となる
2.SQL Server の最新バージョンの新機能を利用できるように、「ADO」 と
「SQL Server Native Client(OLE DBドライバ)」を使用してDBアクセスする
3.「SQL Server Native Client」は「OLE DBドライバ」であり「ODBCドライバ」でもある
4.接続文字列のプロバイダで指定するのは「SQLNCLI11」でなく「MSOLEDBSQL」。
「SQLNCLI11」は非推奨のため
5.新しいデータ型を使用できるよう、接続文字列に「DataTypeCompatibility=80」を記載
※参考
https://docs.microsoft.com/ja-jp/sql/relational-databases/native-client/applications/using-ado-with-sql-server-native-client?view=sql-server-ver15
https://docs.microsoft.com/ja-jp/sql/relational-databases/native-client/sql-server-native-client?view=sql-server-ver15
https://docs.microsoft.com/ja-jp/sql/connect/oledb/applications/using-ado-with-oledb-driver-for-sql-server?view=sql-server-ver15
サンプルプログラム
Option Explicit
Sub ADOSample()
'===============================
'接続文字列
'===============================
'プロバイダ
'Const PROVIDER As String = "SQLNCLI11"
Const PROVIDER As String = "MSOLEDBSQL"
'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 AD_OPEN_KEY_SET As Integer = 1
Const AD_LOCK_READ_ONLY 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 conStr As String
Dim strSQL As String
Dim recordset As Object
Dim recordStr As String
'接続文字列の組み立て
conStr = "Provider=" & PROVIDER & ";" & _
"Data Source='" & DB_SERVER & "';" & _
"Initial Catalog='" & DB_NAME & "';" & _
"Integrated Security=SSPI;" & _
"DataTypeCompatibility=80;"
'オープン
Set con = CreateObject("ADODB.Connection")
con.Open conStr
'実行するSelect文を設定
strSQL = "SELECT Id, Name, Birthday, Gender FROM Employee"
'Select文を実行し結果を取得
Set recordset = CreateObject("ADODB.Recordset")
recordset.Open strSQL, con, AD_OPEN_KEY_SET, AD_LOCK_READ_ONLY
'レコード分繰り返し
Do Until recordset.EOF
' 取得した1レコードをカンマ区切りでString型の変数に設定
recordStr = recordset.Fields(ID_COLUMN).Value & "," & _
recordset.Fields(NAME_COLUMN).Value & "," & _
recordset.Fields(BARTHDAY_COLUMN).Value & "," & _
recordset.Fields(GENDER_COLUMN).Value
' 取得した1レコードをMsgBoxで出力
MsgBox recordStr
' 次のレコードへ進む
recordset.MoveNext
Loop
'後片付け
recordset.Close
con.Close
Set recordset = Nothing
Set con = Nothing
End Sub
実行結果
備考
ODBCドライバを使用してSQL Serverへアクセスする方法は、以下の記事を参照。