0

我有使用DataSnap的Delphi客户端-服务器应用程序。在客户端,我有一系列嵌套的客户端数据集(-> -> -> )。cdsMastercds1cds2cds3

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中按需获取完整的详细信息(所选主记录的所有嵌套内容, , )。实现这一点的最佳方法是什么?cds1cds2cds3

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

4

1 回答 1

0

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

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

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

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

于 2016-12-01T08:46:12.267 回答