c:=TClientDataSet.Create(nil);
    c.FieldDefs:=ClientDataSet1.FieldDefs;
    c.CreateDataSet;
    c.Open;
    c.Append;
    for i:=0 to c.FieldCount-1 do begin
      if c.Fields[i].FieldKind=fkdata then begin
        c.Fields[i].ReadOnly:=False;
        c.Fields[i].Value:=ClientDataSet1.Fields[i].Value;
      end;
    end;
    c.Post;
    c.recno:=1;
    c.LogChanges:=True;
    c.Delete;  
    之后,c.changecount还是为零,这是为什么呢?

解决方案 »

  1.   

        c:=TClientDataSet.Create(nil);
        c.FieldDefs:=ClientDataSet1.FieldDefs;
        c.CreateDataSet;
        c.Open;
        c.Append;
        for i:=0 to c.FieldCount-1 do begin
          if c.Fields[i].FieldKind=fkdata then begin
            c.Fields[i].ReadOnly:=False;
            c.Fields[i].Value:=ClientDataSet1.Fields[i].Value;
          end;
        end;
        c.Post;
      c.MergeChangeLog;  // 加上这句就没有问题了。
        c.recno:=1;
        c.LogChanges:=True;
        c.Delete;  
      

  2.   

    回楼上,还有个小问题就是如果继续执行:
        if dm2.SaveData(c.Delta)<=0 then begin
    这句就会出错,出现record not found or changed by another user这样的错误。很怪。
    我的DataProvider.UpdateMode=upWhereKeyOnly,而且DataProvider.DataSet的第一个字段已经有标记为主键。用SaveData保存ClientDataSet1,都完全没有问题。