【发布时间】:2012-09-21 16:15:26
【问题描述】:
我有一个使用 MySQL 4.07 数据库的旧 VB6 程序。它是在我的 Win XP 64 位机器上开发的。它在我的 Win XP 64 机器上运行良好,在我的 Win7 64 位机器上运行良好。但是当我们的一位用户尝试在他们的 Win7 64 机器上运行它时,它会失败并显示
"Run-time error '-2147467259 (80004005)': [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".
奇怪的是他们已经安装了 ODBC 驱动程序并将它们放在 SysWOW64 和 system32 中。
以下代码是在 Form_Load 中执行的,很可能发生错误(请注意,32 位驱动程序适用于 NT Server 2.5,而 64 位驱动程序是较新的版本。):
If IsHost64Bit() = True Then
mstrConnString = "driver=MySQL ODBC 3.51 Driver;server=mysqleng;database=engprogs;port=3306;UID=user;PWD=########"
Else
mstrConnString = "driver=MySQL;server=mysqleng;database=engprogs;port=3306;UID=user;PWD=########"
End If
Set ADOCn = New ADODB.Connection
ADOCn.ConnectionString = mstrConnString
ADOCn.Open mstrConnString
我检查了 SysWOW64 中 odbcad32.exe 的属性,并且驱动程序选项卡在用户计算机上显示 MySQL ODBC 3.51!
任何想法将不胜感激。
谢谢, 鲍勃
【问题讨论】:
-
我们有三个旧版 VB6 应用程序,我们发现需要使用 32 位 ODBC 连接到我们的数据库。
-
马克,你在 64 位机器上安装了 32 位 ODBC 驱动程序吗?
-
您是否必须使用 odbcad32.exe 将“_32”添加到 32 位用户 DSN 和“_64”到 64 位用户 DSN?
-
不,我们使用较旧的 Wise Installer 应用程序来创建 MSI,而 MSI 为我们创建 32 ODBC DSN。
-
马克,我终于在我的 Win7 64 上安装了 VB6。我忽略了兼容性警告,据我所知它运行良好。所以现在我能够单步执行代码并发现“IsHost64Bit()”在 Win7 64 中无法正常工作!因此,它从 32 位加载“mstrConnString”。这就是程序启动时失败的原因。所以我的新任务是修复“IsHost64Bit()”。感谢您的帮助!