我已经尝试了(几乎)一切方法来隔离问题,但我迷失了。
我有一个 MS Access 应用程序,它使用 ADODB 连接到本地 MySQL 数据库。我将其复制到一台新计算机,但现在存储过程的输出参数每次都包含一个随机值(如果通过 ADODB 完成)。在MySQL WorkBench中执行时,输出参数正确。
以下是两台计算机的规格:
-
old:Windows 7 Pro、Office 2010 ProPlus、MySQL ODBC 5.3.4、MySQL server 5.6.22(均为 64 位;还安装了 32 位 ODBC);
-
new:Windows 10 Pro、Office 2016 ProPlus、MySQL ODBC 5.3.6、MySQL server 5.7.16(均为 64 位,除了 MS Office;还安装了 32 位 ODBC)。
为了隔离问题,我使用了以下简单的存储过程:
CREATE PROCEDURE `testit`(
OUT iTest INT(11))
BEGIN
SET iTest = 123;
END
测试 MS Access 数据库仅包含以下 VBA 代码(以及对 Microsoft ActiveX Data Objects 6.1 库的引用):
Public Function dbTestIt() As Long
Dim dbConn As ADODB.Connection
Dim dbCmd As ADODB.Command
'Open new connection
Set dbConn = New ADODB.Connection
dbConn.ConnectionString = "Driver={MySQL ODBC 5.3 Ansi Driver};option=3;database=xxx;user=root;password=yyy;"
dbConn.Open
'Execute new command
Set dbCmd = New ADODB.Command
With dbCmd
Set .ActiveConnection = dbConn
.CommandTimeout = 0
.CommandType = adCmdStoredProc
.CommandText = "testit"
.Parameters.Append dbCmd.CreateParameter("iTest", adInteger, adParamOutput)
.Execute
dbTestIt = dbCmd.Parameters.Item(0).Value
End With
'Close Connection
dbConn.Close
End Function
以下是测试结果:
- On the old计算机,dbTestIt() 总是返回 123;
- On the new计算机,dbTestIt() 返回随机值(例如 51, 1936020585, 1);
- 如果我从new计算机上的 MySQL 服务器old计算机(在连接字符串中使用 server=192.168.1.x),它也总是返回 123;
- 这告诉我问题(仅)存在于MySQL服务器 on the new计算机(对吗?);
- 但是,如果我随后从old计算机上的 MySQL 服务器new电脑上,它也总是返回123!
所以问题似乎出在组合上的组件new计算机,但是哪个以及为什么?以及如何测试呢?
有人有什么好主意吗?
为了进一步定位问题原因,我将新电脑上的MySQL ODBC驱动程序5.3.6降级到版本5.3.4(旧电脑上也是如此)现在可以了!为了确认确实是这个原因,我再次升级到5.3.6版本,又失败了。
因此,看起来 MySQL ODBC 驱动程序 5.3.6(8 个月前发布!)在处理(本地)MySQL Server 5.7.16 的输出参数时存在问题,可能仅与 ADODB 和 Windows 10 结合使用。
所以目前我将使用 5.3.4 版本并向 MySQL 报告错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)