自定义错误的问题---高分(200分)

  • 主题发起人 主题发起人 吊子
  • 开始时间 开始时间

吊子

Unregistered / Unconfirmed
GUEST, unregistred user!
在这里我曾经看到过这样的文章:
Database1.Open;
Database1.StartTransaction;
try
......................(此处写更新语句)
Database1.Commit;
except
On E: EDBEngineError do
begin
Database1.Rollback;
for i := 0 to E.ErrorCount - 1 do
begin
case E.Errors.ErrorCode of
$2601:
begin
ShowMessage('呵呵!我不允许鍵值重覆!');
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这样做的确好用,我也试过了!但是我现在的想法有些改变。我想将窗体中添加ApplicationEvents控键,而不需要
在代码中添加try ,,,,,,except...end;然后再控键ApplicationEvents的Onexception中写入错误处理,但是我现在
在这个事件中得不到数据库返回的错误代码,就是EDBEngineError.Errors.ErrorCode ,我想问问各位大侠,在
ApplicationEvents的Onexception怎么才能得到 数据库返回的错误代码,还有就是在此事件中,怎样写回滚的处理
语句(事物的开始在哪里写)???
 
在Addtional的页面中放一个ApplicationEvents,在它的事件中找到OnException写你要处理
的异常就可以了。
  上面提到的try exception 你应当知道吧。OnException的意思就是:

try
application
try
代码
exception
   处理某一部份的异常
end;
exception
onExcption
end;
 也就是所有没有处理的application的异常都到OnException中来处理。
 为了对付客户你就可以在这里写(showmessage('操作完成');)
  不要说是我教的。 :)
tools->debuggeroptions->Integrated debugging的钩钩去掉。
只是屏蔽了在IDE环境下的异常吧。

你上面不是写了回滚了吗?如果每个地方都放了StartTransaction;
那么你可以在此加上回滚。凡是EDBEngineError型的数据库错误,并且当前Database在
InTransaction中,你就可以使用回滚了。
 
首先我要先谢谢您!
我的意思在事件OnException中只写错误的处理;
而不用try except end;结构。因为在其他地方写的语句出现错误,不是直接能跳到事件
OnException中吗,然后我在此事件中只要得到这个EDBEngineError.Errors.ErrorCode
不就能处理不同的异常了吗?
 
要回滚并由application 处理异常,你可以这样修改上述代码:
Database1.Open;
Database1.StartTransaction;
try
......................(此处写更新语句)
Database1.Commit;
except
On E: EDBEngineError do
begin
Database1.Rollback;
Raise; //回滚后继续交给 application 去处理异常。
end;
end;
 
用了300分了!还是没有得到满意的答案娜!
 
我觉得你可以放弃这种思路了,而且最后不要用database的rollback方法,我建议,如果要
rollback的话可以在存储过程里面做掉。如果你要在appevent的onexception里面做所有的
错误处理,这简直是一种灾难,你做了以后就知道了,呵呵
 
to 叶孤城:请指教是什么样的灾难,并且请说明在appevent的onexception中怎样取得BDE的
错误码哪?(怎样表示),解决问题了,200份全部奉送!
 
我的问题已经解决了!
(E as EDBEngineError).Errors[0].Errorcode就是我所要的东西!

参与者有份吧!
 
哈哈!行啊!厉害了。翅膀硬了![:D]
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部