100 分求ADO错误截取!(100分)

  • 主题发起人 主题发起人 扳手
  • 开始时间 开始时间

扳手

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中使用了ADODATASET 和数据导航条,问题是错误的截取让人头痛!
比如说主键冲突,某些列不能为空等等。
我开始使用了以前做BDE程序时候的错误截取方法
在POSTERROR中添加
if (E is EDBEngineError) then
case (E as EDBEngineError).Errors[0].Errorcode of
9729:begin
MessageDlg(Pchar(sDepOver), mtError, [mbOK], 0);
Abort;
end;
9732:begin
MessageDlg(Pchar(sDepNull), mtError, [mbOK], 0);
Abort;
end;
END;
可测试发现数据库报错之后才触发ONPOSTERROR事件,而且检测不到错误代码。
请问大家有什么好办法???

在线等待中......
 
怎么没人回答呢??? 汗流浃背中......谁来救我!!![:(]
 
先用SQL查询一下,再用SQL添加记录吧
 
这个办法想过了,太麻烦了。何况以后还可能经常碰到类似的问题,所以希望能
得到真正可行的办法。
 
数据库报错之后才触发ONPOSTERROR事件
你把编译好的程序单独拿出来执行就应该好了

至于为什么监测不到错误代码
GZ
 
看帮助:
EDBEngineError
EDBEngineError is the exception class for Borland Database Engine errors.

Unit

dbtables

Description

EDBEngineError is raised whenever a BDE error occurs. Its Errors property contains TDBError objects.

When EDBEngineError exceptions are raised at design time, they appear in a special dialog (TDbEngineErrorDlg) that displays the complete stack of BDE errors. At runtime, unhandled EDBEngineError exceptions generate the same message box as other exceptions.

你用ado,当然没有办法捕获 bde的错误了。
 
ado与bde 不一样的
 
那怎么办呢?
 
最好的辦法就是在onpost之前檢查數據的有效性,如不合法,以abort;指令結束~
 
ADOConnection1.errors.item
 
怎么判断adoconnection.errors 返回的错误?是错误代码吗?那主键冲突和非空字段
反对的错误代码各是什么?
 
如果用的是paradox数据库返回的错一般肯定是主键冲突,不能有相同的记录。
如果用SQL数据库,修改库结构中字段的设置,把不能为空去掉,剩下的是只能是主键冲突。
你一开始用的办法,解决不了你的问题。排错时,用try...except showmessage()即可。
我一直是这样用的很好。
 
if adoconnection.Errors.Count<>0 then
begin
messagebox();
abort;
end;
 
接受答案了.
 
后退
顶部