我在
MySQL(Server 5.5)中编写了这个程序
DELIMITER $$ DROP PROCEDURE IF EXISTS `InsertList` $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertList`(IN fName VARCHAR(20),IN fType VARCHAR(3),IN fFood varchar(20),Out fResult int) BEGIN insert into tblguest (firstname,confirm,food) values (fName,fType,fFood); select count(id) from tblguest into fResult; END $$ DELIMITER ;
当我从MysqL Query browser调用此过程时,它会按预期返回
Call InsertList ('V1','No','F1',@result); Select @result;
– >它成功返回表中id的计数
我在VB6中编写了以下代码
Dim res As Integer On Error GoTo chkErr Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandType = adCmdstoredProc cmd.CommandText = "InsertList" cmd.Parameters.Append cmd.CreateParameter("fName",adVarChar,adParamInput,20,Text3.Text) cmd.Parameters.Append cmd.CreateParameter("fType",3,Text2.Text) cmd.Parameters.Append cmd.CreateParameter("fFood",Text1.Text) cmd.Parameters.Append cmd.CreateParameter("fResult",adInteger,adParamOutput) cmd.Execute res = cmd("fResult") MsgBox res Exit Sub chkErr: Select Case Err.Number Case Else Text4.Text = Err.Number & " - " & Err.Description End Select
但它尝试运行语句cmd.execute它会引发以下错误:
-2147467259 – [MysqL][ODBC 5.1 Driver][MysqLd-5.5.34]OUT or INOUT argument 4 for routine dbtest.InsertList is not a variable or NEW
pseudo-variable in BEFORE trigger
解决方法
这似乎是MysqL ODBC和C / API中未解决的错误
Dim rs As ADODB.Recordset Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandType = adCmdText cmd.CommandText = "call InsertList(?,?,@fResult)" cmd.Parameters.Append cmd.CreateParameter("fName",Text1.Text) cmd.Execute 'And after that,using the same connection,get the value of '@fResult from a single query: Set rs = cn.Execute("select @fResult as fResult") MsgBox rs!fResult
您将获得预期的价值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。