<font color=red>高难度问题。挑战大富翁高手。DELPHI如何实现“重试”?</font>(200分)

  • 主题发起人 吴剑明
  • 开始时间

吴剑明

Unregistered / Unconfirmed
GUEST, unregistred user!
老板安排一个工作,要求在一个大的系统里(用DELPHI)做的,实现一个自定义的ERROR类。
这个类的功能是: 在程序出现任何错误时,都会跳到这个地方,显示错误信息。并相应的
实现相关的排错。出现“取消、重试、帮助”的对话框。并且错误处理用一个类统一管理。
本以为这个问题简直是小儿科,就一口答应了下来。谁知写起来,却出了一头汗。
“取消,帮助” 两个还好说,我用了TAPPLICATIONEVENT 实现了对错误的统一管理。但是
那个“重试”却无法实现!!
老板是用CLIPPER数据库的,用那种语言,因为是解析型的,所以当发生错误时,能够
自动在该错误行停下,实现对该行的“重试”。但是DELPHI呢,编译型的语言怎么知道是那
行出了错啊?
1......
2......
3.....
发生错误,调用TApplicationEvent的OnException事件。可是到底是1错了,
还是2错了? 3错了? 就算知道了,又如何实现对该行来个“重试”?
不能简单的来个GOTO到子程序头,在重头执行一次。这样可能造成其他错误!!
所以啊,我没法解决啦。问了好几个软件公司的高手朋友,都解决不了。说是“受语言限制
无法实现要求” :(
只好来请教大家了。
<font size= 5> 老板说,要是解决不了,以后就不许用DELPHI了。。。</font>
 
每一行设label和计数器。
如果要重试,就GOTO到那一行。
至于会不会出现其他错误,就不管啦!!!
 
要每一行设label和计数器 也太恐怖
感觉是不能实现的 delphi提供了 try catch的方法为什么不用?你的代码里如果出现了
你不能预料的错误 重试有什么意义?
 
老板嫌每个程序段都加TRY EXCEPT 太乱。希望统一管理到一个子程序里去。
 
其实你把每一句话都加上标号并用 try except end 圈起来就好了... (不要扁我)
有很多代码是根本不可能出错的,比如:A:=1 会出错吗?把关键代码保护起来就可以了,
你们老板不懂技术就叫他不要插嘴技术的事情,管好自己分内的事情就好了,如果他坚持
要这样做,那你就让他自己来写,否则就找一个会这样写的人来写,如果找得到你就认输。
我最讨厌这样的人!!!
 
按理说异常实例应该是和抛出它的代码相关的,别理你的老板。
 
老板是老板啊。我能把你们说的话说给他听吗? :(
 
>>本以为这个问题简直是小儿科,就一口答应了下来。
这是你的问题,没考虑清楚就乱应承,害得你老板认为delphi能力不行,
损害了delphi的名誉,我们没找你算账就不错了,你还喊冤?
我没听说过编译语言可以retry的,你就是把每一句语句都try except起来,
也不可能实现“重试”啊!你怎么知道重试谁呢?
话说回来,“重试”这个功能根本是胡扯的,我用foxbase/foxpro那么多年,
还没遇到过一条语句能够在“重试”的时候就不出错...
 
老大,原谅我吧。我已经够惨的了。您还骂我。。。
 
问题没解决,倒找来一顿骂。这年头。。。
 
十分同情,但是本人能力所及,没有听说过可以Retry的,如果是程序出错,retry
不还是错吗?
 
那倒不一定: 比如一个表被独占了,这是通过让人家选“重试”,可以在表被释放时,
继续刚才的工作。
 
我觉得应该是针对每个可能出错的代码段写出相应的重试代码。
 
突然想到一点,也许可以解决你的问题。
你不是要写一个子程序统一管理出错吗?
这好说,首先,你要针对所有可能错的关键代码段(其实这应该不是很多)
写出重试代码。然后在所有可能出错的代码段前面加上
一个赋值语句,给一个标志量(要是全局量啊)赋值。
当然,赋整数值就行了。然后,在出错处理程序中检查标志量然后跳转到
相应的重试代码中.
 
记着在关键代码段执行完后给标志量赋0.
 
小猪的建议有建设性,大富翁里就是缺少象您这样有创意的人。
 
只有同情
 
浪费分,真是的。。。
 
看来你只有在程序的各个子程序的地方适用标志变量,尽量使用子程序,
子程序执行之前用一个var保存各种参数
当程序发生错误时,恢复使用前的参数(或者根据错误类型做修改),重新执行子程序。
 
多人接受答案了。
 
顶部