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 IntegerOn Error GoTo chkErrSet cmd = New ADODB.Commandcmd.ActiveConnection = cncmd.CommandType = adCmdstoredProccmd.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.Executeres = cmd("fResult")MsgBox resExit SubchkErr: 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
我见过用于sql的代码,那么MysqL本身是否存在使用带有OUT参数的存储过程的问题?
解决方法 这似乎是MysqL ODBC和C / API中未解决的错误一种解决方案是使用带有准备变量的sql命令执行该 *** 作:
Dim rs As ADODB.Recordset Set cmd = New ADODB.Commandcmd.ActiveConnection = cncmd.CommandType = adCmdTextcmd.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
您将获得预期的价值.
总结以上是内存溢出为你收集整理的使用带有OUT参数的VB6调用MySQL存储过程全部内容,希望文章能够帮你解决使用带有OUT参数的VB6调用MySQL存储过程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)