使用Delphi检索ADO错误

使用Delphi检索ADO错误,delphi,stored-procedures,ado,error-reporting,Delphi,Stored Procedures,Ado,Error Reporting,我正在使用Delphi2007和ADO访问SQLServer2008数据库 数据库上的存储过程预先验证输入,如果验证失败,则返回错误结果集(包含自定义错误信息)。使用SQLServerManagementStudio,当我运行存储过程时,我在一个选项卡中获取自定义错误结果集,在另一个选项卡中获取本机错误消息 回到我的Delphi应用程序中,当我打开存储过程时,我可以访问自定义错误结果集。但是,ADO连接上的Errors对象不包含本机错误 如何访问错误收集对象,以便提供有关错误原因的更多信息 感谢

我正在使用Delphi2007和ADO访问SQLServer2008数据库

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

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

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

感谢使用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;
备选方案2) 您可以使用@error变量从sql server获取最后一个错误

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

SELECT Description FROM master..sysmessages  WHERE error= @@ERROR AND msglangid=1033
但大多数邮件都有占位符(如%s,%ld),您也可以使用它

您可以阅读本文以了解更多信息


再见。

不用
.sql.clear
.sql.add
,你可以说
.sql.text:=
谢谢。我认为问题在于,使用ADO,您可以检索结果集和/或and返回值,或者在服务器上发生未经处理的错误,该错误作为本机ADO错误返回。我会让我们的dba再看一眼,然后决定如何返回错误。