【发布时间】:2020-11-11 07:12:15
【问题描述】:
我正在尝试获取 Oracle 驱动程序的名称以在无 DSN 的 ODBC 连接字符串中使用,这样我就不必在安装了数据库的每台计算机上创建 ODBC 连接。
我有下面的代码,它适用于我(Windows 10 64 位、Oracle 驱动程序 32 位、12.2.0.1)。但是,对于另一个人,它不起作用,它只是找不到她的驱动程序(Windows 10 64 位,Oracle 驱动程序 64 位,12.2.0.1)。
网上说代码中的 2 个注册表项分别用于 64 位和 32 位(所以她的驱动程序应该在第一部分中找到)。我的驱动程序在代码的两部分都可以找到,她的也没有。
Public Function GetOracleDriver()
Dim strComputer As String
Dim strValueName As String
Dim arrValueNames As Variant
Dim arrValueTypes As Variant
Dim i As Long
Dim R As Long
Dim strKeyPath As String
Dim strValue As String
Dim objReg As Object
Dim MyDriverName As String
Const HKEY_LOCAL_MACHINE = &H80000002
R = 1
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
objReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes
For i = 0 To UBound(arrValueNames)
strValueName = arrValueNames(i)
objReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue
If strValue = "Installed" And (arrValueNames(i) Like "*oracle*" And arrValueNames(i) <> "Microsoft ODBC for oracle") Then
GetOracleDriver = arrValueNames(i)
End If
R = R + 1
Next i
If IsNull(GetOracleDriver) Then
R = 1
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\WOW6432NODE\ODBC\ODBCINST.INI\ODBC Drivers"
objReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes
For i = 0 To UBound(arrValueNames)
strValueName = arrValueNames(i)
objReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue
If strValue = "Installed" And (arrValueNames(i) Like "*oracle*" And arrValueNames(i) <> "Microsoft ODBC for oracle") Then
GetOracleDriver = arrValueNames(i)
End If
R = R + 1
Next i
End If
'Debug.Print GetOracleDriver
End Function
【问题讨论】: