【问题标题】:How can I move data from TDataSet to TClientDataSet? I need XML representation of the data如何将数据从 TDataSet 移动到 TClientDataSet?我需要数据的 XML 表示
【发布时间】:2014-04-28 15:40:17
【问题描述】:

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

【问题讨论】:

标签: delphi type-conversion tclientdataset tdataset


【解决方案1】:

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

【讨论】:

  • 不幸的是它不起作用。只有字段结构复制成功。
  • 因为这是它应该工作的方式,这可能是由于您的设置中的一些设置。您可以尝试在获取 XML 之前调用 ClientDataSet.Last,以确保实际加载了所有数据。
  • 第一行也没有加载。那么为什么要加载最后一个呢?
  • 好吧,我在这里尝试了我的答案中的描述,并且效果很好。您应该提供更多信息来追踪问题。
  • Uwe,你能显示代码吗?我已经使用了第二个答案。我也将 TDBGrid 连接到 TDataSet。
【解决方案2】:

这是从 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 省略了过滤器信息。请参阅联机帮助。我实际上得到了我在网上找到的这个代码。不知道该告诉你什么,我一直用这个将 ADODatasets 复制到 TClientDatasets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
  • 2012-09-17
相关资源
最近更新 更多