try
 ...
 adosj.post//adosj对应spck_cl_200812
 try
  adoquerym--对应spck_cl_zz
  ...
  adoquerym.post-------------------------------------1
 except
   adosj.cancel;
   abort;
 end;
   //如果是植入介入产品
   保存对应信息到 spck_cl_zrgzx
  adosbzy.post
  adoquerym.edit;
  adoquerym.post;//adoquerym
except
  if application.messgebox('同类材料不能连续出库','提示',mb_yesno)=idyes then
  ....
  else
  adosj.cancel;
exit;
end;
if application.messgebox('保存成功,是否继续出库','提示',mb_yesno)=idyes then

出现的问题是有时候程序出问题时,只完成了1前的操作其余的都没做。该怎么改进啊?

解决方案 »

  1.   

    function TSqlHelp.ExecuteNoneQueryWithTrans(const cSqlList: TStringDynArray): boolean;
    var
      i: integer;
    begin
      Result := false;
      FConn.BeginTrans;
      try
        for i := 0 to Length(cSqlList) - 1 do
        begin
          FCommand.CommandText := cSqlList[i];
          FCommand.Execute;
        end;
        FConn.CommitTrans;
        Result := true;
      except;
        FConn.RollbackTrans;
      end;
    end;用事务和SQL语句来维护业备逻辑!
      

  2.   

    try 
    ... 
      adosj.Connection.BeginTrans
      adosj.post//adosj对应spck_cl_200812 
      try 
        adoquerym--对应spck_cl_zz 
        ... 
        adoquerym.post-------------------------------------1 
      except 
        adosj.cancel; 
        abort; 
      end; 
      //如果是植入介入产品 
      保存对应信息到 spck_cl_zrgzx 
      adosbzy.post 
      adoquerym.edit; 
      adoquerym.post;//adoquerym 
    except 
      if application.messgebox('同类材料不能连续出库','提示',mb_yesno)=idyes then 
      .... 
      else 
      adosj.cancel; 
    exit; 
    adosj.connection.commit;
    end; 
    if application.messgebox('保存成功,是否继续出库','提示',mb_yesno)=idyes then 
     
    出现的问题是有时候程序出问题时,只完成了1前的操作其余的都没做。该怎么改进啊?// 加一個事務,讓他們起完成,否成就回滾掉