请问ADO高手,怎么样捕获ADO异常错误的错误号。

HZ_ZMD 2003-05-29 12:11:44
请问ADO高手,怎么样捕获ADO异常错误的错误号。
有没有类似BDE(E as EDBEngineError).Errors[0].ErrorCode
的错误号呢?
我想要常见的异常:连接超时,违反主键错误,违反外键错误
等常见错误!
如分数不够再添加!
恩,呵呵,最好能罗列其错误号并说明错户消息,先谢了!
...全文
564 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sean2000 2003-05-29
  • 打赏
  • 举报
回复
产生错误后从Errors中取得错误:如:
try
ADOQuery1.close;
ADOQuery1.open;
ADOQuery1.append;
ADOQuery1.FieldByName('ID').asinteger := 1;
ADOQuery1.post;
except
label1.caption := inttostr(ADOConnection1.Errors.Item[0].Get_Number);//取得错误号
label2.caption := ADOConnection1.Errors.Item[0].Get_Description;//取得描述信息
end;
feng93017 2003-05-29
  • 打赏
  • 举报
回复
《Delphi5.0程序员开发指南》上面写得很详细。
IwantFlay 2003-05-29
  • 打赏
  • 举报
回复
:) 期待!

用ado的err事件不知如何?
HZ_ZMD 2003-05-29
  • 打赏
  • 举报
回复
呵呵,是可以搞定了。
半个小时后结贴。
sduzjw 2003-05-29
  • 打赏
  • 举报
回复
楼上的大哥,足可以搞定了,
adoconnection中封装了 ADO 的ERROR对象,每次发生错误时都会把相就的ERROR对象存进去,具体看一下楼上说的吧
sean2000 2003-05-29
  • 打赏
  • 举报
回复
ADO的Error对象将是放在Connection对象的Errors集合中。对应不同的用户其本身都有自己的Error集合,故不会发生紊乱。给你一个帮助文档,你看了就明白了:
Errors 集合:
包含在响应涉及提供者的单个失败时产生的所有 Error 对象。
说明:
任何涉及 ADO 对象的操作都可以产生一个或多个提供者错误。产生错误时,可以将一个或多个 Error 对象置于 Connection 对象的 Errors 集合中。其他 ADO 操作产生错误时,将清空 Errors 集合,并且将新的 Error 对象置于 Errors 集合中。
每个 Error 对象代表特定的提供者错误,而不是 ADO 错误。ADO 错误被记载在运行时的常处理机制中。例如,在 Microsoft Visual Basic 中,出现特定 ADO 的错误出现将引发 On Error 事件并且该错误将显示在 Err 对象中。
没有产生错误的 ADO 操作对 Errors 集合没有影响。使用Clear方式可手工清除 Errors集合。
Errors 集合中的 Error 对象集合描述响应单个语句时产生的所有错误。列举 Errors集合中指定错误可使错误处理例程更精确地确定产生错误的原因及错误来源,并执行适当还原步骤。
某些属性和方法将返回作为 Errors 集合中的 Error 对象显示的警告,但不会中止程序的执行。在调用 Recordset 对象上的 Resync、UpdateBatch 或 CancelBatch 方法,Connection 的Open 方法或者设置 Recordset 对象上的 Filter 属性前,请调用 Errors 集合上的 Clear 方法。这样您就可以阅读 Errors 集合的 Count 属性以测试返回的警告。
注意:有关单个 ADO 操作可产生多个错误的方式的详细说明,请参阅 Error 对象主题。

Error 对象:
Error 对象包含与单个操作(涉及提供者)有关的数据访问错误的详细信息。
说明:
任何涉及 ADO 对象的操作都会生成一个或多个提供者错误。每个错误出现时,一个或多个 Error 对象将被放到 Connection 对象的 Errors 集合中。当另一个 ADO 操作产生错误时,Errors 集合将被清空,并在其中放入新的 Error 对象集。
注意:每个 Error 对象都代表特定的提供者错误而不是 ADO 错误,ADO 错误被记载到运行时的例外处理机制中。例如,在 Microsoft Visual Basic 中,产生特定 ADO 的错误将触发 On Error 事件并出现在 Err 对象中。关于 ADO 错误的完整列表,请参阅 ADO 错误代码主题。
通过 Error 对象的属性可获得每个错误的详细信息,其中包括以下内容:
Description 属性,包含错误的文本。
Number 属性,包含错误常量的长整型整数值。
Source 属性,标识产生错误的对象。在向数据源发出请求之后,如果 Errors 集合中有多个 Error 对象,则将会用到该属性。
SQLState 和 NativeError 属性,提供来自 SQL 数据源的信息。

出现提供者错误时,Error 对象将被放在 Connection 对象的 Errors 集合中。ADO 支持由
单个 ADO 操作返回多个错误,以便显示特定提供者的错误信息。要在错误处理程序中获得丰富的错误信息,可使用相应的语言或所在工作环境下的错误捕获功能,然后使用嵌套循环枚举出 Errors 集合的每个 Error 对象的属性。
Microsoft Visual Basic 及 VBScript 如果没有有效的 Connection 对象,则需要检索 Err 对象的错误信息。
与提供者一样,ADO 在进行可能引发新的提供者错误的调用前将清除 OLE Error Info 对象。但是,只有当提供者产生新的错误或 Clear 方法被调用时,才能清空并充填 Connection 对象的 Errors 集合。
某些属性和方法返回的警告以 Errors 集合中的 Error 对象的方式出现,但并不中止程序的执行。在调用 Recordset 对象的 Resync、UpdateBatch、或 CancelBatch 方法,或 Connection 对象的 Open 方法,或者在设置 Recordset 对象的 Filter 属性之前,可通过调用 Errors 集合的 Clear 方法。这样就可以读取 Errors 集合的 Count 属性,以测试返回的警告。
HZ_ZMD 2003-05-29
  • 打赏
  • 举报
回复
sean2000(地宽天高) :
再问你一下,OnPostError、 OnDeleteError和OnEditError事件里的参数E: EDatabaseError,如何转化其错误号呢

HZ_ZMD 2003-05-29
  • 打赏
  • 举报
回复
zleeway(杂草) ,jjpan(皮皮lu) :
我是想在OnPostError、 OnDeleteError和OnEditError事件获得异常,
想通过参数E: EDatabaseError获得错误号。try 。。。except好像不妥当
不知意下如何
HZ_ZMD 2003-05-29
  • 打赏
  • 举报
回复
sean2000(地宽天高) :
恩,有些新颖。不怕见笑,我只想问一下,ADO所有的错误是不是都要通过ADOConnection1来获得?有没有通过ADOQuery具体数据集获得?如果这样,多个用户操作同时出现错误有没有
紊乱呢?
jjpan 2003-05-29
  • 打赏
  • 举报
回复
try
(正常运行)
except
on Exception do
(异常)
raise;
end;
zleeway 2003-05-29
  • 打赏
  • 举报
回复
用try...except...就可以拦截

5,504

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧