【VBA】指定したODBCドライバがインストールされているか確認する

VBAから
 ・指定したODBCドライバが
 ・インストールされているか確認
できます!

Windows APIによって実現
できます!

Windows APIの1つである
 ・SQLGetInstalledDrivers関数
を使用します!

PR

VBAコード

ここでは例として
 ・ODBCドライバ「ODBC Driver 17 for SQL Server」が
 ・インストールされているか確認
します。

ODBCドライバ「ODBC Driver 17 for SQL Server」はインストールされている
ODBCドライバ「ODBC Driver 17 for SQL Server」はインストールされている

ここでは2つの処理を作成します。

●main関数
・確認したいODBCドライバを指定
・指定したODBCドライバがインストール済みか確認する関数の呼び出し
・結果の確認

●checkOdbcDriverInstalled関数
・指定したODBCドライバがインストール済みか確認する関数

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

Windows APIの「SQLGetInstalledDrivers関数」を宣言(=記述)します(3~9行目)。
※「SQLGetInstalledDrivers関数」を使用できるようにするためのお約束の記述です。
※内容を把握する必要はありません。ただ記述するだけでよいです。

確認したいODBCドライバを指定します(12行目)。

バッファサイズを指定します(44行目)。
※任意のサイズをしてください。ここでは5000指定しています。

全てのODBCドライバを取得します(56行目)。
※「SQLGetInstalledDrivers関数」により取得します。

取得した全てのODBCドライバを分割して配列に格納します(60~61行目)。

PR

実行結果

指定したODBCドライバがインストールされているかどうかを確認できました。

実行結果
実行結果
PR

参考

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●Windows API「SQLGetInstalledDrivers関数」

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