procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  ClientDataSet1.EnableControls;
  ClientDataSet1.Close;
  ClientDataSet1.SetProvider(DataSetProvider1);   //连接一个表
  ClientDataSet1.Open;   //这时CDS中己有数据  ClientDataSet2.LoadFromFile('d:\xx.xml');   //导入已经创建好的XML文件
  ClientDataSet1.AppendData(ClientDataSet2.Data,false);  //记录已经成功追加(在GRID中可以看出)
  ClientDataSet1.ApplyUpdates(0);  //可是为什么提交不到表中呢!????
  ClientDataSet1.DisableControls;end;

解决方案 »

  1.   

    ClientDataSet1.AppendData(ClientDataSet2.Data,false);  //记录已经成功追加(在
    ClientDataSet1.Data := ClientDataSet2.Data;
    等方法时,ClientDataSet1均认为读入的是原始数据,即数据没有变化,
    ClientDataSet1.ApplyUpdates(-1);只提交变化的数据。只有逐条记录加入:
    ClientDataSet1.Data := ClientDataSet2.Data;
    ClientDataSet1.EmptyDataSet;
    while not ClientDataSet2.Eof do begin
     ClientDataSet1.Append
     for i:=0 to ClientDataSet1.FieldCount-1 do
      ClientDataSet1.Fields[i].value := ClientDataSet2.Fields[i].Value;
     ClientDataSet1.Open;
     ClientDataSet2.Next;
    end;
      

  2.   

    你弄混了clientDataset的data和delta不同的用处了,
    data是静态数据,意思是已认可的数据,
    delta则包含了静态数据,更改的数据
    例如
    你现在取得了5条数据,然后新增了1条数据(未applyupdate)
    那么,此时,保存data,就是6条数据,保存delta,就是1条数据,当你再次载入delta时,调用applyupdate将产生一条insert语句,可以这样理解delta,
    1.append->post之后,delta---------new f1   f2   f3
    2.edit->post之后,delta-----------old f1   f2   f3
                                     new f1.1 f2.1 f3
    3.delete->post之后,delta---------delete f1 f2 f3
    当调用applyupdate的时候,它会解析delta,并根据上面3中情况分别产生insert,update,delete语句
    当你把
    cds2.data := cds1.delta
    cds2.SaveToFile('xxx.xml');
    你查看这个xml,你会理解midas是如何进行这些工作的.