A表 修改一条记录a1
B表 删除一条记录b1a1和b1有一定联系,但并不相同。我修改了A表记录a1后马上就要删除B表记录b1,
如果在删除B表记录b1失败时,要求能回到修改A表记录a1以前的状态。
否则的话,数据的状态就会前后不一致。有没有好的机制?

解决方案 »

  1.   

    begin
     Adoquery1.Connection:=AConn;
     AConn.BeginTrans;
     try
     Adoquery1.Close;
     Adoquery1.SQL.Clear;
     Adoquery1.SQL.Text:='Select DISTINCT Unitserial,EndCode from   T_EndCode where Unitserial='''+LeftStr(SFZH,6)+''' and yearmonth='''+Copy(SFZH,7,8)+'''';
     Adoquery1.Open;
     Adoquery2.Close;
     Adoquery2.SQL.Clear;
     Adoquery2.SQL.Text:='Select * from T_tempusedidCard where Division="'+LeftStr(SFZH,6)+'" and IdCard="'+SFZH+'"';
     Adoquery2.Open; if (Adoquery1.RecordCount>0) and (Adoquery2.RecordCount=1) then
     begin
     Adoquery1.Edit;
     Adoquery1.FieldByName('EndCode').AsString:=tempBin; Adoquery2.Delete;
     Adoquery1.Post;
     Adoquery2.Post;
     AConn.CommitTrans;
     end;
     except on E: Exception do
      begin
      result:=0;
      Application.MessageBox(Pchar(e.Message),'错误',Mb_OK+MB_IconError);
      Aconn.RollbackTrans;
      end;
     end;测试了,好像没错。Post和CommitTrans 有什么区别?
      

  2.   

    用事务处理吧!!
      ADOConnection1.BeginTrans;
      ADOconnection1.CommitTrans
      ADOConnection1.RollbackTrans;
      

  3.   

    Post和CommitTrans 有什么区别?
      

  4.   

    1,Post提交表
    2,CommitTrans 提交整个事务,可能是多个表的Insert,update等