使用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;是否是这样的原因?应该怎么解决呢?
[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;是否是这样的原因?应该怎么解决呢?
一般是按执行SQL语句的方法来操作
http://bugs.mysql.com/bug.php?id=25970,说这个不是MYSQL的BUG。所以怀疑是mysql调用存储用CALL的语法原因。
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”!