在DELPHI中,如何处理事务一致性的要求?我用的是SQL,用TQuery操作数据库,是否在数据操作前用database.startransic,结束用database.commit/database.rollback就可以了?(中间有多个Tquery.excuSQL)

解决方案 »

  1.   

    不需要那么麻烦。
    with query do
    begin
      close;
      sql.clear;
      sql.add ('begin transaction myaction');
      sql.add ('begin');
      sql.add (#填入你的要执行的SQL代码);
      sql.add ('commit transaction');
      sql.add ('end');
      prepare;
      try
        try
          ExecSQL;
        except
          on E: Exception do  ShowMessage (E.Messages);
        end;
      finally
        close;
      end;
    end;
      

  2.   

    在操作数据库时,进行事物处理还是必须的.一般模式如下: 
      try
          //事务开始 
          Database1.StartTransaction;
          //here is your code begin*******************
     
          //here your code end************************
          //事务提交
          Database1.Commit;
        except
          //事务回滚
          Database1.Rollback; 
          Application.MessageBox(
                    '数据库操作发生错误,请重试或取消操作!',
                    '操作提示',MB_OK+MB_ICONINFORMATION);
        end;
      

  3.   

    if not dmMain.conMain.InTransaction then
          dmMain.conMain.BeginTrans;  try
         dstApply.UpdateBatch;
         dstSample.UpdateBatch;
         dstApplyFee.UpdateBatch;      dmMain.conMain.CommitTrans;
          MsgBox('提示信息', '数据保存成功!', MB_OK + MB_ICONInformation);}
      except
        on E: Exception do begin
            MsgBox('提示信息', '数据保存失败!' + #13 + E.Message, MB_OK + MB_ICONInformation);
            dstApply.CancelUpdates;
            dstSample.CancelUpdates;
            dstApplyFee.CancelUpdates;
            dmMain.conMain.RollbackTrans;
       end;