【问题标题】:Fetching multiple nested datasets in Delphi DataSnap在 Delphi DataSnap 中获取多个嵌套数据集
【发布时间】:2016-11-25 07:08:54
【问题描述】:

我有使用 DataSnapDelphi 客户端-服务器应用程序。 在客户端,我有一系列嵌套的客户端数据集(cdsMaster -> cds1 -> cds2 -> cds3)。

TDM = class(TDataModule)
  cdsMaster: TClientDataSet;
  cdsMaster_cds1: TDataSetField;
  cds1: TClientDataSet;
  cds1_cds2: TDataSetField;
  cds2: TClientDataSet;
  cds2_cds3: TDataSetField;
  cds3: TClientDataSet;
end;

在服务器端,我有一组类似的具有主从关系的数据集。

TCoDataModule = class(TRemoteDataModule, ICoDataModule)
  prvMaster: TDataSetProvider;
  dsMaster: TIBDataSet;
  ds1: TIBTable;
  ds2: TIBTable;
  ds3: TIBTable;
end;

首先,我需要获取一次cdsMaster 的内容(没有详细信息),然后按需获取完整的详细信息在单个数据包中cds1cds2 的所有嵌套内容, cds3 用于选定的主记录)。实现这一点的最佳方法是什么?

如果我为prvMaster 禁用选项poFetchDetailsOnDemand,它会在连接时加载整个数据库。如果我启用它,它会一一获取详细记录,从而导致巨大的流量开销和性能下降。

【问题讨论】:

    标签: delphi datasnap tclientdataset midas-server


    【解决方案1】:

    我会亲自添加参数以指示要在主 Clientdataset 上检索的记录或记录范围,并禁用 poFetchDetailsOnDemand,以便它将返回主表上少数选定记录的完整详细信息。

    这样您就不会一个接一个地获取详细信息,也不会加载整个数据库,您只需加载所需的主记录及其所有详细信息。

    示例:将您的主客户端数据集 sql 从 SELECT * FROM COSTUMER 更改为 SELECT * FROM COSTUMER WHERE ID = :ID

    PS:如果您还需要完整的主记录列表,无需详细信息,您可以将它们加载到单独的客户端数据集中。这样,您可以在网格上显示所有可能的主记录,当用户选择查看详细信息时,您打开第二个客户端数据集,它会加载完整的主记录(并且仅该记录)及其所有详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2012-09-03
      相关资源
      最近更新 更多