VBAから
・指定したODBCドライバが
・インストールされているか確認
できます!
Windows APIによって実現
できます!
Windows APIの1つである
・SQLGetInstalledDrivers関数
を使用します!
VBAコード
ここでは例として
・ODBCドライバ「ODBC Driver 17 for SQL Server」が
・インストールされているか確認
します。
Option Explicit
'Windows API「SQLGetInstalledDrivers」
Private Declare PtrSafe Function SQLGetInstalledDrivers Lib "odbccp32.dll" _
(ByVal lpszBuf As String, ByVal cbBufMax As Integer, ByRef pcbBufOut As Integer) As Long
Sub main()
Dim targetOdbcDriver As String
Dim result As Integer
'確認したいODBCドライバを指定
targetOdbcDriver = "ODBC Driver 17 for SQL Server"
'指定したODBCドライバがインストール済みか確認する関数の呼び出し
result = checkOdbcDriverInstalled(targetOdbcDriver)
'結果を確認
Select Case result
Case 0
MsgBox (targetOdbcDriver & " は存在します。")
Case 1
MsgBox (targetOdbcDriver & " は存在しません。")
Case 2
MsgBox ("ODBCドライバの取得に失敗しました。")
Case Else
MsgBox ("想定外のエラーが発生しました。")
End Select
End Sub
'---------------------------------------------------
'ODBCドライバがインストール済みか確認する関数
'引数
' odbcDriver:ODBCドライバ
'戻り値
' 0:存在する
' 1:存在しない
' 2:ODBCドライバの取得に失敗
'---------------------------------------------------
Function checkOdbcDriverInstalled(ByVal odbcDriver As String) As Integer
'バッファサイズ
Const BUF_SIZE As Long = 5000
Dim odbcDriverListBuf As String
Dim result As Boolean
Dim odbcDriverListSize As Integer
Dim driverList() As String
Dim driver As Variant
'バッファを作成 ※この変数に全てのODBCドライバが設定される
odbcDriverListBuf = String(BUF_SIZE, vbNullChar)
'全てのODBCドライバを取得
result = SQLGetInstalledDrivers(odbcDriverListBuf, BUF_SIZE, odbcDriverListSize)
If result Then
'取得した全てのODBCドライバを分割して配列に格納
driverList = Split(Left(odbcDriverListBuf, InStr(1, odbcDriverListBuf, vbNullChar & vbNullChar, vbBinaryCompare)), vbNullChar)
'「取得したODBCドライ」に「確認したいODBCドライバ」が存在するかを確認
For Each driver In driverList
If driver = odbcDriver Then
'存在する場合
checkOdbcDriverInstalled = 0
Exit Function
End If
Next
'存在しない場合
checkOdbcDriverInstalled = 1
Else
'ODBCドライバの取得に失敗した場合
checkOdbcDriverInstalled = 2
End If
End Function
実行結果
指定したODBCドライバがインストールされているかどうかを確認できました。
参考
上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
●Windows API「SQLGetInstalledDrivers関数」