使用CB的TADOStoredProc来执行MYSQL的存储过程spname;
[MySQL][ODBC 5.1 Driver][mysqld-5.0.83-community-nt]OUT or INOUT argument 3 for routine spname is not a variable or NEW pseudo-variable in BEFORE trigger。开始我还以为是spname脚本的问题,我准备在MYSQL环境下,调用了spname;
call spname(now(),'2',@a,@b,@c,@d,@e,@f);
select @a, @b, @c, @d, @e, @f;执行结果发现,很正常!对TADOStoredProc使用如下:(参数在控件中设置完成)
ADOStoredProc1->Close();
ADOStoredProc1->Parameters->FindParam("DailyDate")->Value = Now();
ADOStoredProc1->Parameters->FindParam("isWhich")->Value = 2;       
ADOStoredProc1->ExecProc();当执行到ADOStoredProc1->ExecProc();就出错了,提示见帖子开头,我知道MYSQL和SQLSERVER调用存储过程有区别,
一个是CALL,
一个是EXEC;是否是这样的原因?应该怎么解决呢?

解决方案 »

  1.   

    好像不能这样执行MYSQL中的存储过程。
    一般是按执行SQL语句的方法来操作
      

  2.   

    看过MYSQL官网:
    http://bugs.mysql.com/bug.php?id=25970,说这个不是MYSQL的BUG。所以怀疑是mysql调用存储用CALL的语法原因。
      

  3.   

    终于调用存储过程成功!1、经过跟踪,可以排除MYSQL脚本错误和TADOStroreProc调用错误情况,推断可能为TADOStroreProc控件不支持CALL PROCEDUCE的语法;
    2、尝试执行MYSQL环境下测试存储过程的语句:
    call spname (now(),'2',@a,@b,@c,@d,@e,@f);
    select @a, @b, @c, @d, @e, @f;
    于是采用TQUERY控件的2次操作,成功获得返回值,
    AnsiString asSQL   =   "call PRC_set_extreme_wsl ('"+ Now().DateTimeString() + "',2,@a,@b,@c,@d,@e,@f);";
    qry1->Close();
    qry1->SQL->Clear();
    qry1->SQL->Add(asSQL);
    qry1->ExecSQL();
    qry1->Close();
    qry1->SQL->Clear();
    qry1->SQL->Add("select @a,@b,@c,@d,@e,@f");
    qry1->Open();
    最后在qry1获取返回值!须注意第一次查询使用ExecSQL()不返回结果集方式执行,否则出错:
    “CommandText does not return a result set”!