2014-11-21 56 views
0

我正在使用Lazarus與TMSSQLConnector和TSQLQuery一起連接到SQL Server 2012數據庫並執行存儲過程。 我發現存儲過程中引發的錯誤(從缺少參數或調用存儲過程本身引發的異常)不會對調用代碼可見。MSSQLConnection - 沒有記錄引發的存儲過程錯誤

當通過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語句添加參數)來調用存儲過程。

回答