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