我将Lazarus与TMSSQLConnector和TSQLQuery一起使用,以连接到SQL Server 2012数据库并执行存储过程。 我发现存储过程中引发的错误(来自缺少的参数或从存储过程本身的调用引发的异常)对于调用代码是不可见的。
当单步执行mssqlconn.pp时,我可以看到在执行以下例程期间引发的错误:
procedure TMSSQLConnection.Execute(const cmd: string);
begin
DBErrorStr:='';
DBMsgStr :='';
CheckError( dbcmd(FDBProc, PChar(cmd)) );
CheckError( dbsqlexec(FDBProc) );
CheckError( dbresults(FDBProc) );
end;
并通过DBMsgHandler函数传回。
但是,永远不会评估构建的DBMsgStr,因为dbsqlexec调用似乎不会返回FAIL代码。
因为DBMsgStr不公开,所以我无法从外部评估它(我也不想这样做,因为这会引起线程问题)。
要重现,请创建需要参数的存储过程。 通过将TSQLQuery对象的SQL属性设置为' EXEC" proc name"'来调用存储过程。并调用ExecSQL(不将参数添加到SQL语句中)。
答案 0 :(得分:0)
我询问核心,大约一个月前(r28944,oct,29th)修复了(FPC)行李箱: