我几乎想尽一切办法来解决这个问题,但我迷路了。
我有一个MS-Access应用程序,它使用ADODB连接到本地MySQL数据库。我把它复制到一台新的计算机上,但是现在存储过程的输出参数每次都包含一个随机值(如果通过ADODB完成的话)。在MySQL工作台中执行时,输出参数是正确的。
以下是这两台计算机的规格:
旧版:Windows 7 Pro、Office 2010 ProPlus、MySQL ODBC 5.3.4、MySQL server 5.6.22(均为64位,还安装了32位ODBC);
新增:Windows 10 Pro、Office 2016 ProPlus、MySQL ODBC 5.3.6、MySQL server 5.7.16(除MS Office外,均为64位;还安装了32位ODBC)。
为了隔离问题,我使用了以下简单的存储过程:
CREATE PROCEDURE `testit`(
OUT iTest INT(11))
BEGIN
SET iTest = 123;
END
以及只包含以下VBA代码(以及对Microsoft ActiveX数据对象6.1库的引用)的测试MS Access数据库:
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
以下是测试结果:
在旧计算机上,dbTestIt()始终返回123;
在新计算机上,dbTestIt()返回随机值(例如511936020585,1);
如果我从新计算机连接到旧计算机上的MySQL服务器(在连接字符串中使用server=192.168.1.x),它也总是返回123;
这告诉我问题(仅)在新计算机上的MySQL服务器中(对吧?);
但是,如果我从旧计算机连接到新计算机上的MySQL服务器,它也总是返回123!
所以,问题似乎在于新电脑上的组件组合,但究竟是哪一个,为什么?如何测试呢?
有什么好主意吗?
最佳答案
为了进一步找出问题的原因,我将新计算机上的MySQL ODBC驱动程序5.3.6降级到5.3.4版本(在旧计算机上),现在它可以工作了!为了确认这确实是原因,我再次升级到5.3.6版本,但它再次失败。
所以它看起来像MySQL ODBC驱动程序5.3.6(8个月前发布!)在处理来自(本地)MySQL服务器5.7.16的输出参数时出现问题,可能仅与ADODB和Windows 10结合使用。
所以目前我将使用5.3.4版本并向MySQL报告一个bug。
关于mysql - 通过MS Access(VBA)中的ADODB实现的MySQL存储过程的输出参数在一台计算机上正确,而在另一台计算机上随机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40531411/