使用Delphi检索ADO错误

5 delphi stored-procedures ado error-reporting

我正在使用带有ADO的Delphi 2007来访问SQL Server 2008数据库.

数据库上的存储过程预先验证输入,如果验证失败,则返回错误结果集(包含自定义错误信息).使用SQL Server Management Studio,当我运行存储过程时,我在一个选项卡中获取自定义错误结果集,在另一个选项卡中获取本机错误消息.

回到我的Delphi应用程序,当我打开存储过程时,我可以访问自定义错误结果集.但是,ErrorsADO连接上的对象不包含本机错误.

如何访问Errors集合对象,以便提供有关错误原因的更多信息?

谢谢

RRU*_*RUZ 5

选项 1) 使用 ADO 连接错误集合。

try
....
....
....
 ADOQuery1.Open;//Execute your sql statement
except
  LastErrorIndex  :=ADOConnection1.Errors.Count-1;
  SourceError     :=ADOConnection1.Errors.Item[LastErrorIndex].Source;
  NumberError     :=ADOConnection1.Errors.Item[LastErrorIndex].Number;
  DescriptionError:=ADOConnection1.Errors.Item[LastErrorIndex].Description;
  SQLStateError   :=ADOConnection1.Errors.Item[LastErrorIndex].SQLState;
  NativeError     :=ADOConnection1.Errors.Item[LastErrorIndex].NativeError;
end;
Run Code Online (Sandbox Code Playgroud)

选项 2) 您可以使用 @@error 变量从 sql server 获取最后一个错误。

select @@error
Run Code Online (Sandbox Code Playgroud)

当Sql Server 发生错误时,你所能得到的只是错误号,使用@@ERROR 全局变量。没有@@ERROR_MESSAGE 全局变量来获取错误描述。对于完整的错误消息,您可以使用错误号查询 master..sysmessages 表:

SELECT Description FROM master..sysmessages  WHERE error= @@ERROR AND msglangid=1033
Run Code Online (Sandbox Code Playgroud)

但是这些消息中的大多数都有占位符(如 %s、%ld),您也可以使用此存储过程

您可以阅读这篇文章SQL Server 中的错误处理 – 背景了解更多信息。

再见。