TApplication提供了一个事件OnException,专门供程序员处理TApplication捕捉到的异常,TApplication. OnException是捕捉数据库异常的最佳地点。
错误类型定义在sysutils单元中
错误类型定义在sysutils单元中
解决方案 »
- 请教:DBChart如何代码设置形状?
- 当点击Image图片按钮的时候,如何最小化,最小化后如何恢复??
- 有关 Delphi 2009 的一些问题!
- 请问报表打印时 一个字段值太长 怎么设置自动换行
- 关于事件的建立(简单问题)
- 单元循环引用:迷惑???
- DynamicSkinForm VCL v. 4.8 for D6是什么意思(不要笑话我)
- 'Access violation at address 1F487CAB in module 'msado15.dll'这是什么错误
- BDE5.0支持MTS POOLING功能?
- D2009 BUG?
- DELPHI中如何从一个字符串中删除指定的字符或字符串
- 请教有关outlook编程的问题
凡是 E 打头的几乎全是。
但这些类型不一定包括数据库返回的错误信息。try
...
except
on E: Exception do Showmessage(E.Message);
end;
可以获得数据库返回的错误信息的内容。你也可以试试以下几种方法:
try
...
except
on EZeroDivide do HandleZeroDivide;
on EOverflow do HandleOverflow;
on EMathError do HandleMathError;
else
HandleAllOthers; //处理所有其它异常
end;try
...
except
HandleException; //默认处理
end;
...
except
on E: Exception do Showmessage(E.Classname);
end;
可以返回错误的类型,但一般数据库错误会笼统的显示 EDatabaseError
{ try to connect server }
ADOConnection1.Open();
except
on E: EADOError do
ShowMessage('Connection failed!');
else
ShowMessage('Other errors');
end;这样简单的错误处理,却不正确。
首先,在except块中的代码未执行前,系统弹出了出错警告对话框。
然后才执行except后面的语句。本来设想应显示'Connection failed!,
但显示的却是'Other errors'!
(前提:故意访问一个不存在的数据库,引发该错误。)
请高手执教!
你在调试程序的时候是会这样的,Delphi会在每个Exception处中断。运行你的*.exe你会发现一切如你所愿。其实在Delphi弹出警告对话框后,你不是已经发现了程序实际进入了Except模块吗;为什么显示是'Other errors',是因为错误类型不是EADOError如果你想在调试时不想系统弹出警告对话框,菜单 Tools\Debugger Options...\Language Exceptions\Stop on Delphi Exceptions 的钩钩去掉;Tools\Debugger Options...\OS Exceptions\Handled by 选user program;on resume选 Run Unhandled
刚才的问题基本解决了,那个错误的类型是EOleError。但是,这个底层错误的信息很不友好。不知道Delphi的Exception中有没有Exception ID这样的属性,以便我们能给出友好的信息?
我一般只是用ShowMessage(E.ClassName)找出错误的类型;其实在大多数情况下根本不关心错误的类型^_^
...
except on E: Exception do
Showmessage(E.Message);
end;
...
except
on Exception do
...
end;