我要更新好几条数据,如果更新过程中有一条数据出错,前面的更新的数据就恢复,用事务不知道怎么处理。
  m_ADOQuery.Close;
  m_ADOQuery.SQL.Clear;
  m_ADOQuery.SQL.Add('Select * from table');  for i := 0 to aNewRecords.Count-1 do
  begin
    try
      m_ADOQuery.Active := true;
      begin
        m_ADOQuery.Insert;
        m_ADOQuery.Fields[0].Value := ssTemp.Strings[0];
        m_ADOQuery.Fields[1].Value := ssTemp.Strings[1];
        m_ADOQuery.Fields[2].Value := ssTemp.Strings[2];        m_ADOQuery.Post;
      end;
    except
    begin
      showmessage('数据更新错误');
      result := 1;
    end;  //except
    end; //try
  end;// for

解决方案 »

  1.   

    你试试下面(最好再保存)
      m_ADOQuery.Close;
      m_ADOQuery.SQL.Clear;
      m_ADOQuery.SQL.Add('Select * from table');
      m_ADOQuery.Active := true;  for i := 0 to aNewRecords.Count-1 do
      begin
        try
          begin
            m_ADOQuery.Insert;
            m_ADOQuery.Fields[0].Value := ssTemp.Strings[0];
            m_ADOQuery.Fields[1].Value := ssTemp.Strings[1];
            m_ADOQuery.Fields[2].Value := ssTemp.Strings[2];      end;
        except
        begin
          showmessage('数据更新错误');
          result := 1;
        end;  //except
        end; //try
        m_ADOQuery.Post;
      end;// for
      

  2.   

    我一般都是用AdoConnection来进行事务处理。
    AdoQuery用adoconnection进行连接。AdoConnection.BeginTrans;
    try
    //
        AdoConnection.CommitTrans;
    except
        AdoConnection.RollbackTrans;
        ShowMessage('数据更新错误');
    end;
      

  3.   

    AdoConnection.CommitTrans和adoqudery.post可以同时用吗?他们之间的关系是什么
      

  4.   

    AdoConnection.BeginTrans;
    try
      ...
      Post;
      ...
      Post;
      ....
      Post;
      AdoConnection.CommitTrans;
    except
        AdoConnection.RollbackTrans;
        ShowMessage('数据更新错误');
    end;
      

  5.   

    我也是用AdoConnection来进行事务处理的。AdoConnection.BeginTrans;
    try
      AdoConnection.CommitTrans;
    except
      AdoConnection.RollbackTrans;
    end;