使用VBA,找到Windows中安装的MySQL ODBC驱动程序的版本

时间:2010-01-12 16:25:08

标签: mysql ms-access vba odbc connection-string

使用Visual Basic for Applications ,如何在用户的计算机上找出Windows中安装的MySQL ODBC驱动程序版本?

我有一个使用MySQL ODBC驱动程序建立连接的Microsoft Access应用程序。连接字符串如下所示:

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

直到IT经理在用户的PC上安装了MySQL ODBC驱动程序的5.1版本才能查找,这破坏了我的连接字符串。

如果我知道在用户的Windows XP安装上安装了驱动程序的版本,我可以在运行时将其插入连接字符串中。 如何使用VBA在用户的计算机上找到Windows中安装的MySQL ODBC驱动程序版本?

3 个答案:

答案 0 :(得分:14)

您可以在

下的注册表中找到它
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

使用找到的信息here,您可以使用以下代码(我在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

答案 1 :(得分:4)

以下是一些可能的想法:

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 :(得分:2)

如果您想避免逐个处理版本,您可以迭代键值,例如..

此函数旨在枚举ODBC驱动程序的regkeys,并检查某处是否存在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