可预计之出错处理,高手拿分!(200分)

  • 主题发起人 主题发起人 zh_ch
  • 开始时间 开始时间
Z

zh_ch

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各路高手——不可预计之出错处理
 
1对关键性处理进行错误验证,对不明错误提示,然后正常运行程序
——尽量将不可预计错误对程序的影响减少到最小
2其实不个预计的出错处理是软件维护问题了——因为出错是不可避免的
(当然你必须尽可能减少不可预计错误),如果出现了(影响程序正常功能的完成了)
就应该发布补丁程序
 
——尽量将不可预计错误对程序的影响减少到最小

如何作到?
DELPHI处理机制除了在代码中使用RAISE、EXCEPT等外,是否有更简便、通用的方法?
 
在各种环境下的大量的测试
 
好好学习天天向上,就会...
 
看来高手难求呀。。。

亦或大家都对不可预计错误的处理感到束手无厕?!

只有宝蓝自己明白吧。。。。。。
 
没有明白你的意思?

你要全局地截获异常吗?
比如:Application.OnException?
 
用 Application.OnException?

if 处理 then 那些e文会让用户很烦 else 莫名其妙!
and 有些出错导致系统崩溃,根本就无法等你 OnException 。。。
 
Delphi本身有时也要出错,Bolrand自己也没有办法。你要求太高了。
 
哥们儿,鸡蛋里还有骨头呢!
您就凑合着用吧!

Borland之所以提供Application.OnException
就是为了避免你的用户看到莫名其妙的E文,
你可以显示你自己的东西,或者什么也不显示。
既然有些错误会导致系统崩溃,
那你为什么要制造这样的错误呢?

如果不是你的错,那你着什么急呢?
OS的错,如果导致系统崩溃,我们还能怎么样呢?


我认为这个话题永远没有正确答案。:)
 
没有最好、只有更好

结果无所谓,过程最重要

分最后是大家的

感谢jasper 、ljqljq、林西、坏蟑螂的建议

在此,我贴上一段小代码以供大家分享,还望大家多提意见!

function DBE_Error(ec:word):string;
var
; ;s:string;
begin
; ; ;case ec of
; ; ; ; ; 9729: s:='关键码重复!';
; ; ; ; ; 9732: s:='要求填写的字段未填写!';
; ; ; ; ; 9733: s:='外键错误!';
; ; ; ; ; 9730: s:='小于最小值!';
; ; ; ; ; 9731: s:='大于最大值!';
; ; ; ; ; 10009:s:='字段已存在!';
; ; ; ; ; 10024:s:='表不存在!';
; ; ; ; ; 10038:s:='字段名无效!';
; ; ; ; ; 10047:s:='目标必须是索引表!';
; ; ; ; ; 10243:s:='表正忙!';
; ; ; ; ; 10770:s:='关键字无效!';
; ; ; ; ; 11848:s:='表中无此字段!';
; ; ; ; ; 11869:s:='标志字没找到!';
; ; ; ; ; 11871:s:='表达式中类型不匹配!';
; ; ; ; ; 11935:s:='表达式不完整!';
; ; ; ; ; 11951:s:='必须指定汇总标准字段!';
; ; ; ; ; 11959:s:='标准字段、汇总字段同时存在时必须使用"GROUP BY"!';
; ; ; ; ; 12289:s:='功能不支持!';
; ; ; ; ; else s:='数据库引擎错误!';
; ; ;end;
; ; ;DBE_Error:=s;
end;
 
屏蔽掉系统的严重错误:
var W_ErrorMode:word;
begin
; W_ErrorMode:=SetErrorMode(SEM_FAILCRITICALERRORS);
; try
; ;.....
; finally
; ; SetErrorMode(W_ErrorMode);
; end;
end; ; ;

以飨各位!
 
请教youngwhz:
; SetErrorMode和SEM_FAILCRITICALERRORS在哪个单元声明?
 
SetErrorMode和SEM_FAILCRITICALERRORS在哪个单元声明?

在windows单元!

不用另作声明。
 
请教谁能扑获整数的殪出?
rg.
var i,j:integer;
begin
; ;j:=1234567890;
; ;for i:=123456781 to 123456789 do
; ; ;j:=j * i;
 
多人接受答案了。
 
后退
顶部