使用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驱动程序版本?
答案 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