1

さて、私は "packetRecord" プロパティ (TClientDataSet) を研究していますが、疑問があります。これがどのように機能すると思うかを説明します。間違っている場合は修正してください。

1 - th packetRecord = 50 を構成する場合、「SELECT * FROM history」を実行すると、テーブルの履歴に 200k の行がある場合、TClientDataSet は次のように処理します:「SELECT * FROM history limit 50」。 50 行の ClientDataSet は、データベースでさらに 50 行を検索します。

プロパティ packetRecord は、少なくとも私にとっては、TClientDataSet がデータベース内のすべての行を取得しない場合に意味があります。

私は正しいですか?

4

2 に答える 2

0

おそらくクエリ全体を実行し、50 レコードだけを返すように要求しますが、これは実装の詳細であり、ClientDataSet ではなく、プロバイダー、データセット、またはドライバーによって選択されると思います。しかし、一般的に、それは多かれ少なかれそれがどのように機能するかです。

コードをブラウジングしました。ClientDataSet が(ローカルの)TDataSetProvider にリンクされている場合、そのプロバイダは接続先のデータセットを開くだけです。それを開いた後、DataSet.BlockReadSize プロパティを取得するレコード数 (=packetRecords) に設定します。

したがって、最終的には、BlockReadSize の実装と、使用される TDataSet の dsBlockRead 状態に行き着きます。

クライアントとサーバーのセットアップでは、これは同じである必要があります。実際、データセットやデータベースでさえある必要はありません。TXMLTransformProvider もあり、カスタム プロバイダも実装できます。TXMLTransformProvider はこの値を完全に無視します。

したがって、上で述べたように、これがどのように機能するかについて、またこのプロパティが何らかの影響を与えるかどうかについての一般的な規則はありません。

于 2013-11-14T18:15:47.870 に答える