Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 输出参数don';有些用户无法使用_Mysql_Excel_Vba_Stored Procedures_Out Parameters - Fatal编程技术网

Mysql 输出参数don';有些用户无法使用

Mysql 输出参数don';有些用户无法使用,mysql,excel,vba,stored-procedures,out-parameters,Mysql,Excel,Vba,Stored Procedures,Out Parameters,我有一个Excel工作表,需要多次调用MySQL服务器。以下是简化的VBA代码,用于说明此问题: 公共函数Connect()作为ADODB.Connection Dim cn作为新的ADODB.连接 与cn .ConnectionString=“” .Properties(“初始目录”).Value=“” .Properties(“用户ID”).Value=“” .Properties(“密码”).Value=“” .CommandTimeout=1500 以 设置Connect=cn 端函数

我有一个Excel工作表,需要多次调用MySQL服务器。以下是简化的VBA代码,用于说明此问题:

公共函数Connect()作为ADODB.Connection Dim cn作为新的ADODB.连接 与cn .ConnectionString=“” .Properties(“初始目录”).Value=“” .Properties(“用户ID”).Value=“” .Properties(“密码”).Value=“” .CommandTimeout=1500 以 设置Connect=cn 端函数 公共子测试存储过程() Dim cxn作为ADODB.连接 Dim cmd作为新的ADODB.Command 尺寸p1作为ADODB.参数 将p2设置为ADODB.参数 设置cxn=Connect() 打开 设置cmd.ActiveConnection=cxn cmd.CommandType=adCmdStoredProc cmd.CommandText=“输出参数测试” 设置p1=cmd.CreateParameter(,adBoolean,adParamOutput) Set p2=cmd.CreateParameter(,adVarChar,adParamOutput,255) cmd.Parameters.Append p1 cmd.Parameters.Append p2 cmd.Execute MsgBox“结果:&p1.Value&“/”&p2.Value 端接头 这将执行以下存储过程:

创建过程`输出参数测试`(
出‘可用’位,
OUT`markets`VARCHAR(255)
)
语言SQL
确定性
包含SQL
SQL安全定义程序
注释“”
开始
设置isAvailable=false;
设置备注=“敏捷的棕色狐狸跳过懒惰的狗”;
结束
在我的机器上,对于几乎所有用户,这会返回:

结果:错误/敏捷的棕色狐狸跳过了懒惰的狗

但对于一个用户,它返回:

结果:正确/

在我的机器和用户的机器之间,我能找到的唯一区别是MySQL ODBC 5.3 ANSI和Unicode驱动程序版本。我的版本为5.03.02.00,最初该用户的版本较旧。我要求他升级,他现在有版本5.03.09.00(比我的更新),但问题仍然存在

有什么我遗漏的吗?是否有某种机器级配置变量会导致
OUT
参数停止工作?或者
OUT
参数是否仅在某些选定的驱动程序版本中起作用


更新:我对SP进行了如下修改:

创建过程`输出参数测试`(
OUT`num`INT,
OUT`markets`VARCHAR(255)
)
开始
设置num=12345;
设置备注=“敏捷的棕色狐狸跳过懒惰的狗”;
结束
并对VBA进行了相应的修改。现在在我的机器上,它返回:

结果:12345/敏捷的棕色狐狸跳过了懒惰的狗

在该用户的机器上,它返回:

结果:232718680/

指出这可能与MySQL有关,尽管我无法在其他地方复制精确的行为(由于我公司独特的网络设置和安全限制),但我同意这很可能是罪魁祸首


自从提出这个问题以来,我重新编写了存储过程和相关的电子表格,以便仅通过记录集返回数据。依我看,它并没有那么“干净”,但至少它可以在所有用户的机器上工作。不过,如果有人能找到方法让
参数运行(或者如果MySQL决定修复这个bug),请告诉我。

我不知道这个MCVE如何能为
p1
返回
真的
,但不管怎样,这是一个有趣的问题。@Mat'sMug同意,这很奇怪。我的工作假设是,在这个过程中的某个地方,它最终尝试进行类型转换。我对MySQL不是很熟悉,但我假设
Set isAvailable=false
正在将其设置为
0
(假设
false
在某个地方被定义为这样)。显式设置为
0
是否会改变结果?使存储过程返回常量/显式
0
将排除SQL成为问题的可能性(…尽管,假设所有用户都连接到同一台服务器,这应该已经被排除)检查。@Mat'sMug这不会改变结果。然而,当我将参数更改为
INT
时,我得到了更有趣的结果。请参阅我的最新问题。在我看来,它可能返回一个指针,而不是实际值。