С VBA найдите версию драйвера MySQL ODBC, установленного в Windows - PullRequest
7 голосов
/ 12 января 2010

Используя Visual Basic для приложений , как узнать, какая версия драйвера MySQL ODBC установлена ​​в Windows на компьютере пользователя?

У меня есть приложение Microsoft Access, которое использует драйвер MySQL ODBC для установления соединения. Строка подключения выглядит следующим образом:

ODBC;DATABASE=mydatabase;DRIVER={MySQL ODBC 3.51 Driver};
    OPTION=3;PWD=password;PORT=3306;SERVER=server-db;UID=db-user;

Это работало, пока ИТ-менеджер не установил версию 5.1 драйвера MySQL ODBC на ПК пользователя, что нарушило мою строку соединения.

Если бы я знал версию драйвера, установленного при установке Windows XP пользователя, я мог бы вставить ее в строку подключения во время выполнения. Как узнать, какая версия драйвера MySQL ODBC установлена ​​в Windows на компьютере пользователя с использованием VBA?

Ответы [ 3 ]

14 голосов
/ 12 января 2010

Вы можете найти его в реестре под

HKEY_LOCAL_MACHINE\SOFTWARE\
    ODBC\ODBCINST.INI\
    ODBC Drivers\MySQL ODBC 3.51 Driver


 HKEY_LOCAL_MACHINE\SOFTWARE\
    ODBC\ODBCINST.INI\
    ODBC Drivers\MySQL ODBC 5.1 Driver

Используя найденную информацию здесь , вы можете получить ее с помощью приведенного ниже кода (я проверял это в Access 97)

Private Sub Command0_Click()    
    If RegKeyExists("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\
                                 ODBC Drivers\MySQL ODBC 3.51 Driver") Then
        MsgBox "3.51"
    ElseIf RegKeyExists("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\
                                 ODBC Drivers\MySQL ODBC 5.1 Driver") Then
        MsgBox "5.1"
    Else
        MsgBox "None"
    End If
End Sub


'returns True if the registry key i_RegKey was found
'and False if not
Function RegKeyExists(i_RegKey As String) As Boolean
    Dim myWS As Object

    On Error GoTo ErrorHandler
    'access Windows scripting
    Set myWS = CreateObject("WScript.Shell")
    'try to read the registry key
    myWS.RegRead i_RegKey
    'key was found
    RegKeyExists = True
    Exit Function

ErrorHandler:
  'key was not found
  RegKeyExists = False
End Function
4 голосов
/ 12 января 2010

Вот несколько возможных идей:

1 Вы можете проверить реестр и найти конкретные ключи, например, например: [HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBCINST.INI \ MySQL ODBC 3.51 Driver]

2.Вы можете проверить их папку c: \ windows \ system32 для myodbc.dll, а затем проверить информацию о версии. Вот ссылка на то, как проверить версию: http://www.vb -helper.com / howto_file_version_info.html

2 голосов
/ 04 октября 2013

Если вы хотите избежать обработки версий в каждом конкретном случае, вы можете перебирать значения ключей, например ..

Эта функция предназначена для перечисления через regkeys для драйверов ODBC и просто проверки наличия mysql где-нибудь, если нет, то она предупредит пользователя, затем переместит его на страницу загрузки и напомнит, чтобы получить правильную версию для своего архитектура (32/64)

Public Function CheckMySQL()

    Dim arrEntryNames()
    Dim arrValueTypes()
    Dim rPath As String
    rPath = "SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"

    Call EnumerateRegEntries(rPath, arrEntryNames, arrValueTypes)

    If Not IsEmpty(arrEntryNames) Then
        For Each strAsk In arrEntryNames
            If (InStr(strAsk, "MySQL")) Then
                strFound = strFound & strAsk & ", "
            End If
        Next
    End If

    If (Len(strFound) = 0) Then
        #If Win64 Then
            MsgBox "You need MySQL Driver *64 bit* - Press OK to get it!"
        #Else
            MsgBox "You need MySQL Driver *32 bit* - Press OK to get it!"
        #End If

        ActiveWorkbook.FollowHyperlink Address:="http://goo.gl/vbm6g", NewWindow:=True

        CheckMySQL = False
    Else
        CheckMySQL = True
    End If

End Function

И это вам понадобится для перечисления ключей reg (подробнее об этом см. http://technet.microsoft.com/en-us/library/ee176771.aspx):

Public Sub EnumerateRegEntries(strKeyPath, arrEntryNames, arrValueTypes)
    Const HKEY_CLASSES_ROOT = &H80000000&
    Const HKEY_CURRENT_USER = &H80000001&
    Const HKEY_LOCAL_MACHINE = &H80000002&
    Const HKEY_USERS = &H80000003&
    Const HKEY_CURRENT_CONFIG = &H80000005&

    Dim objReg As Object
    Dim strComputer As String

    strComputer = "."
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")

    objReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrEntryNames, arrValueTypes


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...