从 Excel VBA 使用游标调用 MySQL 存储过程 - > 命令不同步



我在MySQL中编写了一个使用游标的存储过程。当从mysql和mysql工作台调用该spoc时,一切都工作正常。然而,只要我尝试从Excel VBA内调用spoc,我总是得到一个错误:"命令不同步;你现在不能运行这个命令。"'OPEN cursorName;'行导致错误消息。

奇怪的是:只要我的spoc不使用游标或它使用游标但没有"SELECT"语句,一切都可以从Excel中工作。甚至多个SELECT语句也可以工作,但当然不是游标。

连接设置绝对没问题。在使用mysql-proxy时,我还发现记录的输出有点奇怪,因为没有对存储过程的调用(但我没有使用游标就得到了结果),而是有几个其他调用(我猜是来自ODBC驱动程序本身?)

我期待任何答案!提前感谢大家。

画眉山庄

一个最小的例子:

<标题> MySQL h1> xcel VBA(不完整但可运行)。此处缺少关闭光标等)
Public Function QueryMySQL()
Dim conn As ADODB.Connection
Dim rst As New ADODB.Recordset
Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={MySQL ODBC 5.3 Unicode Driver}; SERVER=localhost; PORT=4040;  
DATABASE=mydbname; UID=username; OPTION=3"
conn.CursorLocation = adUseClient
conn.Open
Set spCommand = New ADODB.Command
spCommand.CommandText = "buildTree"
spCommand.CommandType = adCmdStoredProc
spCommand.CommandTimeout = 30
Set spCommand.ActiveConnection = conn
Set param1 = spCommand.CreateParameter("rootId", adInteger, adParamInput)
param1.Value = 1551
spCommand.Parameters.Append param1
Set rs = spCommand.Execute
End Function
<标题> MySQL-Proxy日志
Logged query: SET NAMES utf8
Logged query: SET character_set_results = NULL
Logged query: SET SQL_AUTO_IS_NULL = 0
Logged query: select database()
Logged query: select database()
Logged query: SELECT @@tx_isolation
Logged query: set @@sql_select_limit=DEFAULT

经过整整一周的尝试,我找到了一个解决方法。而不是使用ADODB。命令(如果我理解正确的话,它正是为此而设计的),我使用了常规查询。请注意,如果我以";"结束语句,它将不起作用(在我的情况下),我认为这在某种程度上是一个错误。

长话短说:这是为我工作:

Set mysqlConAsync = New ADODB.Connection
With mysqlConAsync
.ConnectionString = "DRIVER={MySQL ODBC 5.3 Unicode Driver}; SERVER=localhost; PORT=3306; DATABASE=dbname; UID=root; OPTION=67108867"
.CursorLocation = adUseClient
End With
mysqlConAsync.Open
Set rst = New ADODB.Recordset
With rst
qry = "CALL buildTree()"
.CursorLocation = adUseClient
.Open query, mysqlConAsync, , adLockReadOnly, adAsyncFetch
End With

最新更新