我的程序如下:CQDSet:=TAdoDataSet.Create(nil);
  CQDSet.Connection := DataS.CQConnect;
  CQDSet.CommandText := 'select * from Table1 where TransFlag<>'+#39+'1'+#39;
  ChargeDSet :=TAdoDataSet.Create(nil);
  ChargeDSet.Connection := DataS.ChargeConnect;
  ChargeDSet.CommandText:= 'select * from Table1';
    ChargeDSet.Open;
    CQDSet.Open;
    CQDSet.First;
    try
      while not CQDSet.Eof do
      begin
        ChargeDSet.Append;
        for i:=0 to CQDSet.FieldCount -1 do
        begin
           ChargeDSet.Fields[i].Value := CQDSet.Fields[i].Value;
        end;        ChargeDSet.Post;  ///这里有问题!!
        CQDSet.Edit;
        CQDSet.FieldByName('TransFlag').Value :='1';
        CQDSet.Post;
        CQDSet.Next;
      end;
      CQDSet.UpdateBatch();
      ChargeDSet.UpdateBatch();
      Showmessage('OK');
    finally
      CQDSet.Free;
      ChargeDSet.Free;
    end;
如果ChargeDSet.Post一旦失败,就会完全退出,但我想让它即使有一条数据主键冲突等原因失败,也想继续其它行数据的操作,怎么实现??

解决方案 »

  1.   

    CQDSet.LockType:=ltBatchOptimistic;      //调用UpdateBatch才写回数据库
          ChargeDSet.LockType:=ltBatchOptimistic;
          while not CQDSet.Eof do
          begin
            ChargeDSet.Append;
            for i:=0 to CQDSet.FieldCount -1 do
            begin
               ChargeDSet.Fields[i].Value := CQDSet.Fields[i].Value;
            end;        CQDSet.Edit;
            CQDSet.FieldByName('TransFlag').Value :='1';
            CQDSet.Next;
          end;
          CQDSet.UpdateBatch();
          try
            ChargeDSet.UpdateBatch();
          except
          end;
          Showmessage('OK');
          CQDSet.Free;
          ChargeDSet.Free;
        end;
      

  2.   

    那你就用ado一条一条保存不就行
      

  3.   

    post放错位置了
    放在循环里面
      

  4.   


       ChargeDSet.Post;  ///这里有问题!!
    to
     try
       ChargeDSet.Post;  ///这里有问题!!
    except
       ChargeDSet.cancel;
    end;ChargeDSet.edit;