Delphi 如何将数据从TDataSet移动到TClientDataSet?我需要数据的XML表示

Delphi 如何将数据从TDataSet移动到TClientDataSet?我需要数据的XML表示,delphi,type-conversion,tclientdataset,tdataset,Delphi,Type Conversion,Tclientdataset,Tdataset,如何轻松地将数据从TDataSet移动到TClientDataSet?我需要TClientDataSet.XMLData属性中数据的XML表示。将TDataSetProvider拖到带有ClientDataSet的表单或数据模块上,将ClientDataSets属性ProviderName设置为TDataSetProvider的名称。将TDataSetProvider的DataSet属性设置为另一个数据集。打开ClientDataSet。这是从TClientDataset派生的角度进行的 pro

如何轻松地将数据从
TDataSet
移动到
TClientDataSet
?我需要
TClientDataSet.XMLData
属性中数据的XML表示。

TDataSetProvider
拖到带有ClientDataSet的表单或数据模块上,将ClientDataSets属性
ProviderName
设置为
TDataSetProvider
的名称。将
TDataSetProvider
DataSet
属性设置为另一个数据集。打开ClientDataSet。

这是从TClientDataset派生的角度进行的

procedure TMyClientDataset.CopyFromDatasetProvider(Dataset: TDataset);
 var DataSetProvider : TDataSetProvider;
begin
  DataSetProvider := nil;
  try
    Close;
    DataSetProvider := TDataSetProvider.Create(nil);
    DatasetProvider.Options := [poNoReset];
    StoreDefs := False;
    DataSetProvider.DataSet := Dataset;
    SetProvider(DataSetProvider);
    Open;
    First;
    SetProvider(nil);
   finally
    if Assigned(DataSetProvider)
     then DataSetProvider.Free;
   end;

end;

谢谢,但是为什么要使用
DatasetProvider.Options:=[poNoReset]
StoreDefs:=False?此代码返回具有正确字段结构的
TMyClientDataset.RecordCount
=0。StoreDefs忽略筛选信息。请参阅联机帮助。我在网上找到了这个密码。我不知道该告诉你什么,我一直在用它把AdoDataSet复制到TclientDataSet。不幸的是,它不起作用。仅成功复制了字段结构。由于这是它的工作方式,可能是由于安装程序中的某些设置。在获取XML之前,您可以尝试调用
ClientDataSet.Last
,以确保所有数据都已加载。第一行也未加载。那么为什么要加载最后一个呢?好吧,我在这里尝试了我的答案中的描述,它工作得非常完美。你应该提供更多的信息来追踪问题。Uwe,你能展示代码吗?我使用了第二个答案中的。我还将TDBGrid连接到TDataSet。类似的问题:这个问题: