我正在使用带有ADO的Delphi 2007来访问sql Server 2008数据库.
数据库上的存储过程预先验证输入,如果验证失败,则返回错误结果集(包含自定义错误信息).使用sql Server Management Studio,当我运行存储过程时,我在一个选项卡中获取自定义错误结果集,在另一个选项卡中获取本机错误消息.
回到我的Delphi应用程序,当我打开存储过程时,我可以访问自定义错误结果集.但是,ADO连接上的Errors对象不包含本机错误.
如何访问Errors集合对象,以便提供有关错误原因的更多信息?
谢谢
解决方法
选项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以获取更多信息.
再见.