|
|
导航: |
论坛 -> 数据库专区
斑竹:liumazi,waterstone |
|
作者: |
|
2004/4/21 22:28:21 |
标题: |
|
加入我的收藏 |
楼主: |
老师: 您好! 书中有这样一段代码:其中,qyProduct是TQuery组件,Database1是TDatabase组件 procedure TForm1.sbPostClick; begin Database1.StartTransaction; try qyProduct.ApplyUpdates; qyProduct.CommitUpdates; Database1.Commit; except qyProduct.CancelUpdates; Database1.Rollback; raise; end; end; 这段代码是关于“交易控制”的代码,我对其中的raise指令有些不清楚。书中虽然对它进行了一些介绍,但我还是有些不明白,所以贴出来,请老师指教。 书中的讲解:调用raise指令,把try与except间的错误产生的异常再引发一次,最后停止这段程序的运行。而对于“再引发一次”,书中也做了解释:因为系统只要发生异常,那一段过程的程序就会中止。可是当使用“try ... except”后,系统除了会显示一个异常错误信息外,不会继续行为表现下运行,所以就把这个错误再引发一次,让程序中止,还要再往下进行。 我不懂的地方: 使用“try ... except”后,当“保存数据”的代码出错,程序就会运行except块内的Rollback方法将所有需要保存数据的操作复原到开始交易前的状态。 我认为即使不加raise指令,当发生异常时,也一定会执行except块内的语句,而执行完Rollback后,程序也一定会中止运行,因为Rollback后已经没有代码了。那么既然又可以复原回以前的状态,又可以中止程序的运行,又何必去调用raise指令呢?这是不是有点画蛇添足呢?请老师指教。
----------------------------------------------
- |
作者: |
zpeihe (stanley) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2004/4/22 0:32:54 |
1楼: |
我也同感。
----------------------------------------------
I just loving Delphi
|
作者: |
cjrb (Thinking In 魂) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2004/4/22 1:16:56 |
2楼: |
你运行这三个就知道有没有差了。 1: try StrToInt('a'); except //raise; exit; end; 2: try StrToInt('a'); except raise; exit; end; 3: try StrToInt('a'); except raise Exception.Create('转换出错'); exit; end;
----------------------------------------------
充电..........
|
作者: |
zpeihe (stanley) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2004/4/22 21:12:36 |
3楼: |
明白,谢谢CJRB!
----------------------------------------------
I just loving Delphi
|
|