使用 Delphi 检索 ADO 错误
Posted
技术标签:
【中文标题】使用 Delphi 检索 ADO 错误【英文标题】:Retrieving ADO errors using Delphi 【发布时间】:2010-11-30 05:34:31 【问题描述】:我正在使用带有 ADO 的 Delphi 2007 来访问 SQL Server 2008 数据库。
数据库上的存储过程会预先验证输入,如果验证失败,它会返回错误结果集(包含自定义错误信息)。使用 SQL Server Management Studio,当我运行存储过程时,我会在一个选项卡中获得自定义错误结果集,在另一个选项卡中获得本机错误消息。
回到我的 Delphi 应用程序,当我打开存储过程时,我可以访问自定义错误结果集。但是,ADO 连接上的Errors
对象不包含本机错误。
如何访问Errors
集合对象,以便提供有关错误原因的更多信息?
谢谢
【问题讨论】:
【参考方案1】:选项 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;
选项 2) 您可以使用@@error 变量从sql server 获取最后一个错误。
select @@error
当 Sql Server 发生错误时,你只能得到错误号,使用@@ERROR 全局变量。没有@@ERROR_MESSAGE 全局变量来获取错误描述。 完整的错误信息,可以使用错误号查询master..sysmessages表:
SELECT Description FROM master..sysmessages WHERE error= @@ERROR AND msglangid=1033
但大多数这些消息都有占位符(如 %s、%ld),您也可以使用此Stored Procedure。
你可以阅读这篇文章Error Handling in SQL Server – a Background了解更多信息。
再见。
【讨论】:
你可以直接说.sql.clear
和.sql.add
,而不是.sql.text :=
感谢 RRUZ。我认为问题在于,使用 ADO,您可以检索结果集和/或返回值,或者在服务器上发生未处理的错误,该错误作为本机 ADO 错误返回。我会请我们的 dba 再看一看,并决定我们将如何返回错误。以上是关于使用 Delphi 检索 ADO 错误的主要内容,如果未能解决你的问题,请参考以下文章
delphi 中ADO配置,数据连接时,显示测试连接失败,初始化提供的程序错误,灾难性故障,这是因为啥?
delphi+ado+sqlserver怎样在插入之后返回自增字段的值?