多天困扰我的问题,谁来为我揭开谜团!?(100分)

吊子

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怎么才能得到 数据库返回的错误代码?????????
 
->而不需要在代码中添加try ,,,,,,except...end
这个结构就是用来捕捉程序中的异常的,你不用它程序产生的错误异常就不会被捕捉
而是直接送由系统来处理,所以你在ApplicationEvents中如果系统定义了某个异常的处理
那么你就捕捉不到它了.据我猜测,数据库异常一般在其驱动中都已经处理了各种可能的错误
.所以你想在ApplicationEvents的onexception中捕捉错误,除非你使用try..except并在except
中使用raise再次将错误抛出
 
那我对一个基本表进行录入操作,用导航条进行进行基本的添加,删除,修改,然后再窗体
中添加控键ApplicationEvents,当我点击保存按钮,向表中添加一个有重复键的记录时,在
ApplicationEvents的onexception中这个系统给出的edb错误码又是多少哪?怎样能得到哪?
 
绅哪,救救我把!!!这已经是第300分了!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1309279
 
强烈要求高手回答我的问题!斑竹快来看看呀!解答一下呀!
 
我的基本思路,没有证实,请参考!
你没有使用
try
<语句段1>
except
<语句段2>
end
这种格式,在<语句段1>中发生的错误,这种错误由数据库驱动程序处理,你的程序将忽略该错误,
所以,ApplicationEvents 就不会接受到这个错误消息。

解决办法:
在<语句段2>中强行错误提交给ApplicationEvents。

On E: EDBEngineError do raise E
这样你的ApplicationEvents 就可以得到错误消息和具体错误内容,在进行相应的处理。

ok??
 
我现在的问题是
要是没有try
except
end;
的格式后,On E: EDBEngineError do raise E 这样写就会出错。怎样写(没有try except end 格式)
E: EDBEngineError才不会出错哪?
 
我的问题已经解决了!
(E as EDBEngineError).Errors[0].Errorcode就是我所要的东西!

参与者有份吧!
 
顶部