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
红色部分为设置输出参数,可这句放进去就会出错,存储过程我试过是正常的,把这句去了再把存储中那个输出参数也去了,就能运行正常,说明就只错在这句的设置上,谁告诉我,怎么处理?

解决方案 »

  1.   

    .Parameters.Append .CreateParameter("@hs", adInteger, 2)这里需要设置成out吧,没环境,测试部了。另外一个办法就是你直接
    dim rs as new adodb.recordset
    set rs=MyComm.execute("call sp(11,2,@a);select @a ";
      

  2.   

    做下简单的测试 
    存储代码如下
    CREATE DEFINER=`YsSoft_Sm`@`127.0.0.1` PROCEDURE `tt`(out `a` int(11))
    BEGIN
    set a=123;
    END;调用代码如下    Dim MyComm As New ADODB.Command               '定义一个命令对象
        With MyComm
            .ActiveConnection = Conn                  '数据连接
            .CommandText = "tt"                       '存储过程名称
            .CommandType = adCmdStoredProc            '表明这是一个存储过程
            .Prepared = True                          '要求将SQL命令先行编译
            .Parameters.Append .CreateParameter("@a", adInteger, 2)
            .Execute
        End With
    这样也都运行错误的
    提示
      

  3.   

    将MYSQL ODBC升级到5.1.6试试,此表有TRIGGER?
      

  4.   


    升级到5.16也没有用,一样的提示
    TRIGGER是什么都不知道,所以不可能有,我重新做了个测试用的存储过程
    CREATE DEFINER=`YsSoft_Sm`@`127.0.0.1` PROCEDURE `tt`(out `a` int(11))
    BEGIN
    set a=123;
    END;
    这个@a一样不能输出,问题会出在哪?
      

  5.   

        Set Comm = CreateObject("ADODB.Command")
        With Comm
            .ActiveConnection = Conn
            .CommandText = "CALL tt(@a)"
            .CommandType = &H1                        'adCmdText
            .Execute
            .CommandText = "Select @a 'ReturnVal'"
            Set objRs = .Execute
            MsgBox objRs("ReturnVal")
        End With
        objRs.Close
        Set objRs = Nothing
        Set Comm = Nothing搜索了一下在一个老外论坛里看到的代码修改下,用这种方式能输出,郁闷
      

  6.   

    没有办法,只能使用这种方法 select @x 得到返回值。