Dmain.cdsC.First;
  while not Dmain.cdsC.Eof do
  begin
    if (条件) then     
    begin
      //其他操作     
      Dmain.cdsC.Delete;//删除在数据库中已经存在的记录
    end
    else
    if (条件) then
    begin
      //其他操作  
      Dmain.cdsC.Next;
    end;      
  end;
  Dmain.cdsC.RecordCount;//记录数正确,为删除后的数据集的记录数,例如原来Dmain.cdsC有100条,删除20条,现在为80条  Dmain.cdsC.First;
  while not Dmain.cdsC.Eof do //查看cdsC中确实已无主键重复的记录
  begin
    sID := Dmain.cdsC.FieldByName(ID).AsString;
    Dmain.cdsC.Next;
  end;  Dmain.cdsC.ApplyUpdates(0);//报错,提示不唯一,主键冲突  { //以下语句可以执行,但实际插入到数据库中的记录为160条,为重复的80条,像是执行了两次ApplyUpdates
    Dmain.Qrya.Close;
    Dmain.Qrya.SQL.Clear;
    Dmain.Qrya.SQL.text:='ALTER TABLE BZK_ZK_CARDINFO  DISABLE CONSTRAINT CARD_INFO_KEY_YUANID';
    Dmain.Qrya.ExecSQL(TRUE);
    Dmain.Qrya.ApplyUpdates(0);
  }
 困惑中...,不知何解

解决方案 »

  1.   

    这里面 你去参考一下
    http://topic.csdn.net/u/20101029/10/5e73dbcf-ad4a-472c-b29a-5eb2fbe2326a.html
      

  2.   

    谢谢楼上,我的问题与你列的帖子不是一个问题我的问题是数据集Qrya中为什么会出现重复的记录
      

  3.   

    Dmain.cdsC.ApplyUpdates(0);//报错,提示不唯一,主键冲突
    这句报异常后,没有主键冲突的的记录竟然保存到了数据库中,有主键冲突的没有保存成功。
    我的本意是异常后要提交的数据能够全部回滚,不提交,不用事物的话,设置在TDataSetProvider或TClientDataSet的属性能够实现吗?