procedure TForeCastForm.adsMasterAfterDelete(DataSet: TDataSet);
begin
  try
    MainData.MainConn.BeginTrans;
    adsMaster.UpdateBatch();
    MainData.MainConn .CommitTrans;
  Except on E:Exception do
    begin
      MainData.MainConn.RollbackTrans;
      ShowMessage('错误:单据保存失败!原因:'+E.Message);
    end;
  end;
end;
try...Except ...是怎样执行的呢???是不是两者中的代码只执行一个呢?
我认为这样写RollbackTrans达不到效果,因为BeginTrans放在 try里了,是如此吗?

解决方案 »

  1.   

    try except正如你所说,你可以用finally 替换except
      

  2.   

    我认为这样写RollbackTrans达不到效果,因为BeginTrans放在 try里了,是如此吗?
    这样说似乎是不对的!因为你要处理的东西应该在try中,except是处理性能生指定异常以后,你想怎么做!
      

  3.   

    我认为去掉
    MainData.MainConn.RollbackTrans;的效果一样。
    因为我认为发生异常时,try里的代码并没有执行,是这样吗?
      

  4.   

    如果发生异常,就会来处理异常,不管TRY执行到哪!也就是说可能执行了一部分!所以
    MainData.MainConn.RollbackTrans;是很有必要的!可以说这正是你要建立这个异常的根本所在!不然的话,异常 本身就没有意义了!
      

  5.   

    在下面的代码中,任何一行出错。都会执行EXCEPT中的代码。所以达到防错的效果。  
        MainData.MainConn.BeginTrans;
        adsMaster.UpdateBatch();
        MainData.MainConn .CommitTrans;