【发布时间】:2023-04-05 03:09:01
【问题描述】:
我有一个非常直接且简单的存储过程,接受 1 个参数。当我从 VBA 调用 sp 时,我从 command.Execute 收到以下错误:
-2147217887 [MySQL][ODBC 5.3(w) 驱动程序][mysqld-5.7.31-log]参数类型无效
但是,从我的角度来看,我无法确定哪种参数类型不正确。我真的没脑子了
更新:
Excel VBA MySql parameterised update 'invalid parameter type' 有完全相同的错误,但是,答案是针对非存储过程调用。
我的代码如下
存储过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_load_visit`(
IN _nid char(18)
)
BEGIN
SET @query = concat("
select visiting_date, method, visiting_details from tbl_visit where visiting_customer=? order by visiting_date asc;
");
PREPARE stmt FROM @query;
SET @_nid = _nid;
EXECUTE stmt USING @_nid;
DEALLOCATE PREPARE stmt;
END
VBA 代码:
Public Sub formControl_Update()
Dim cmd As New ADODB.Command
Dim conn As ADODB.Connection
Dim prm As ADODB.Parameter
Dim strConn As String
Dim strSQL As String
strConn = "Driver={MySQL ODBC 5.3 Unicode Driver};Server=127.0.0.1;Database=jkydb1;Uid=admin;pwd=123456"
conn.Open strConn
command.ActiveConnection = myConn
command.CommandText = "sp_load_visit"
command.CommandType = adCmdStoredProc
command.CommandTimeout = 10
command.NamedParameters = True
command.Prepared = True
Set prm = command.CreateParameter("_nid", adChar, adParamInput, 18, cell_customer_nid.value)
command.Parameters.Append prm
Set rs = command.Execute
End Sub
我读过的帖子:
Parameter Object
run stored procedure and return values from VBA
【问题讨论】:
-
如何知道参数在存储过程中的顺序是否正确? 执行
SHOW CREATE PROCEDURE sp_UpdateUserInfo;,查找参数排序和类型。 PS。您没有在执行 SQL 的过程中指定参数...也许您必须使用类似cmd.CommandText = "sp_UpdateUserInfo(OrderID, OrderDate)"的东西? -
嗨@Akina,我的实际代码比这两个字段要多得多,如果我必须指定你输入的顺序,我也会重新安排从单元格获取值的顺序.
-
不,您按名称添加参数,而不是按位置添加参数,因此添加值的顺序无关紧要。排序由 CALL 语句中提到的参数名称指定。
-
你确定你用的是mysql吗?您的连接字符串是针对 ms sql 服务器的,因此如果您尝试使用它连接到 mysql 服务器,您的代码会抛出错误。
-
嗨@Shadow,感谢您的评论!事实上,我从这个站点复制了连接字符串,因为我在提问时无法远程访问我的电脑
标签: mysql sql excel vba stored-procedures