日期:2014-05-16  浏览次数:20672 次

用VB去调用存储过程的问题
SQL code
CREATE DEFINER=`root`@`localhost` PROCEDURE `Code_Search_Code`(
c varchar(20), s int,out hs int)
begin
declare stmt varchar(2000); 
set @sql = concat('select code from warehouse where code like ''%',c,'%'' limit 0,',s);
prepare stmt from @sql;  
execute stmt;  
set hs=FOUND_ROWS();
end;


VB调用
  Dim MyComm As New ADODB.Command '定义一个命令对象
  With MyComm
  .ActiveConnection = Conn '数据连接
  .CommandText = "Code_Search_Code" '存储过程名称
  .CommandType = adCmdStoredProc '表明这是一个存储过程
  .Prepared = True '要求将SQL命令先行编译
  .Parameters.Append .CreateParameter("@c", adVarChar, 1, 20, ReplaceStr(code_text.Text))
  .Parameters.Append .CreateParameter("@s", adInteger, 1, 3, 6)
  .Parameters.Append .CreateParameter("@hs", adInteger, 2)
  .Execute  
  End With
红色部分为设置输出参数,可这句放进去就会出错,存储过程我试过是正常的,把这句去了再把存储中那个输出参数也去了,就能运行正常,说明就只错在这句的设置上,谁告诉我,怎么处理?


------解决方案--------------------
提示什么
------解决方案--------------------
.Parameters.Append .CreateParameter("@hs", adInteger, 2)

这里需要设置成out吧,没环境,测试部了。

另外一个办法就是你直接
dim rs as new adodb.recordset
set rs=MyComm.execute("call sp(11,2,@a);select @a ";

------解决方案--------------------
将MYSQL ODBC升级到5.1.6试试,此表有TRIGGER?
------解决方案--------------------
没有办法,只能使用这种方法 select @x 得到返回值。