我有Delphi客户机服务器应用程序,它使用DataSnap。在客户端,我有一系列嵌套的客户端数据集(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的内容(没有细节),然后根据需要在单个数据包中获取全部细节( cds1、cds2、cds3的所有嵌套内容用于选定的主记录)。实现这一点的最佳方法是什么?
如果我为poFetchDetailsOnDemand禁用选项prvMaster,它将在连接时加载整个数据库。如果我启用它,它会一个接一个地获取详细记录,造成巨大的流量开销和性能下降。
发布于 2016-12-01 08:46:12
我会亲自添加参数,以指示要在主客户端数据集上检索的记录或记录范围,并禁用poFetchDetailsOnDemand,以便它将返回主表中选择的少数记录的完整详细信息。
这样,您就不会一个接一个地获取详细信息,也不会加载整个数据库,只加载所需的主记录/s及其所有详细信息。
示例:将主客户端Example从类似于、SELECT*和的内容更改为类似于SELECT *的对象,其中ID = :ID
PS:如果您还需要完整的主记录列表,而不需要详细信息,则可以将它们加载到单独的客户端数据集中。通过这种方式,您可以在网格上显示所有可能的主记录,当用户选择查看详细信息时,您可以打开第二个clientataset,它将加载包含所有详细信息的完整主记录(而且只有该记录)。
https://stackoverflow.com/questions/40799470
复制相似问题