斑竹高手们帮帮忙吧!怎样在Application的OnException事件里捕捉EDBEngineError错误

时间:2021-11-11 17:13:39
小弟最近在写一个数据库程序,但就是无法捕捉数据库组件的异常!现只知道在Application的OnException事件是最好的捕捉地点,但小弟在OnException里用
   try
   {
    throw;
   }
   catch(EDBEngineError &bdeError)
   {
    if(bdeError.Error[0]->SubCode==ERRCODE_KEYVIOL)
     错误处理代码...
    }
就是无法捕捉到数据库组件里的EDBEngineError主键重复错误
但愿高位帮帮忙

8 个解决方案

#1


题如上

#2


系统的异常捕捉到这个错误了吗?
你为什么把异常处理放在Application里,异常在哪里发生就在哪里try不是更好吗?你把你的异常放在这里,那么其他的异常怎么办?

#3


aawolf(羌狼)兄,我上面的异常是数据库发过来的异常,好像只能在这个事件里捕捉的,我提到的Application不是在主工程里,而是在当前Form上放了一个ApplicationEvents控件的,再说数据(DBMS)里发来的异常再那里捕捉好呢!能给个例子吗?先谢了

#4


高手们能给个回答吗?

#5


-

#6


gz

#7



缺省异常处理窗口是用ShowException显示的一个窗口,其标题为应用程序的Title.我们也可以自定义异常处理函数,以便对异常进行自定义的处理。
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnException = HandleException;
}
void __fastcall TForm1::HandleException(TObject *Sender,SysUtils::Exception *E)
{
AnsiString errorstr="应用程序发生了错误.\n"+E->Message;
Application->MessageBox(errorstr.c_str(),"发生异常",MB_OK);
}

#8


请不要在Application->OnException里捕捉数据库异常,没有必要。aawolf说的对,在哪里可能有异常,就在哪里捕捉。完全没有必要将数据库的异常提升到应用级来处理。

#1


题如上

#2


系统的异常捕捉到这个错误了吗?
你为什么把异常处理放在Application里,异常在哪里发生就在哪里try不是更好吗?你把你的异常放在这里,那么其他的异常怎么办?

#3


aawolf(羌狼)兄,我上面的异常是数据库发过来的异常,好像只能在这个事件里捕捉的,我提到的Application不是在主工程里,而是在当前Form上放了一个ApplicationEvents控件的,再说数据(DBMS)里发来的异常再那里捕捉好呢!能给个例子吗?先谢了

#4


高手们能给个回答吗?

#5


-

#6


gz

#7



缺省异常处理窗口是用ShowException显示的一个窗口,其标题为应用程序的Title.我们也可以自定义异常处理函数,以便对异常进行自定义的处理。
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnException = HandleException;
}
void __fastcall TForm1::HandleException(TObject *Sender,SysUtils::Exception *E)
{
AnsiString errorstr="应用程序发生了错误.\n"+E->Message;
Application->MessageBox(errorstr.c_str(),"发生异常",MB_OK);
}

#8


请不要在Application->OnException里捕捉数据库异常,没有必要。aawolf说的对,在哪里可能有异常,就在哪里捕捉。完全没有必要将数据库的异常提升到应用级来处理。