在一個事件中需要處理插入多個數據表,怎樣實現數據要不一次性全操作完畢,要不全不操作。

解决方案 »

  1.   

    操作四個表,
    with ADOQuery1 do
    beign
    connection.Begintrans;
    數據操作
    end;
    with ADOQueyr2 do
    beign
    Connection.Begintrans;
    數據操作
    end;
    with ADOQuery3 do
    beign
    數據操作
    end;
    try
    begin
    ADOQuery1.Connection.committrans;//這個提交成功
    ADOQuery2.Connection.Committrans;//提交成功
    ADOQuery3.Connection.committrans;//提交失敗
    end;
    except
    begin
    ADOQuery1.Connection.Rollback;//不回滾
    ADOQuery2.Connection.Rollback;//不回滾
    ADOQuery3.Connection.RollBack;//回滾end;這樣一來,數據就寫了一半?
      

  2.   

    ADOConnection1.BeginTrans;try
      數據操作
      ADOConnection1.CommitTrans;
    except
      ADOConnection1.RollbackTrans
    end;
      

  3.   

    事务处理不要针对某一个ADOQuery
    应该针对ADOConnection如果你的ADOQuery连接的是同一个ADOConnection的话,就直接
    像楼上的那样就行了如果是多个ADOConnection的话就判断其ADOConnection.InTransaction属性是否为真,为真就是当前已经进行事务(未提交)
      

  4.   

    with ADOQuery1 do
    beign
    connection.Begintrans;
    數據操作
    end;
    with ADOQueyr2 do
    beign
    Connection.Begintrans;
    數據操作
    end;
    with ADOQuery3 do
    beign
    數據操作
    end;数据操作应该放在try...except中间,要不然事务是没用的