2016-11-25 17 views
0

DataSnapを使用するクライアントサーバーアプリケーションです。があります。 クライアント側では、ネストされたクライアントデータセットがあります(cdsMaster - >cds1 - >cds2->cds3)。サーバー側では複数のネストされたデータセットをDelphi DataSnapで取得する

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のネストされたすべての内容、cds2cds3)単一のパケットの需要に完全な詳細を取得する必要があります。これを実装する最良の方法は何ですか?

prvMasterのオプションpoFetchDetailsOnDemandを無効にすると、接続時にデータベース全体がロードされます。これを有効にすると、詳細レコードが1つずつフェッチされ、トラフィックのオーバーヘッドとパフォーマンスが大幅に低下します。

答えて

0

マスターClientDataSetで取得するレコードまたはレコードの範囲を指定するパラメータを個別に追加し、poFetchDetailsOnDemandを無効にして、マスターテーブルの選択されたレコードの詳細をすべて返します。

この方法では、1つ1つ詳細をフェッチせず、データベース全体を読み込まずに、必要なマスターレコードとそのすべての詳細だけを読み込みます。

例:貸衣装FROM SELECT *のようなものに貸衣装 FROM SELECT *のようなものから、あなたのマスターClientDataSetのSQLの変更WHERE ID =:ID

PS:あなたはまた、マスタレコードの完全なリストが必要な場合詳細を指定せずに、別々のクライアントデータセットにロードすることができます。この方法で、可能なすべてのマスタレコードをグリッドに表示することができます。ユーザが詳細を表示するように選択した場合は、すべてのマスタレコード(およびそのレコードのみ)をすべての詳細とともにロードする2つ目のクライアントセットを開きます。

関連する問題