レコードのソート(FireDAC)

提供: Appmethod Topics
移動先: 案内検索

データセットの操作(FireDAC) への移動


概要

すべての FireDAC データセットに、ローカルでレコードをソートする方法が用意されています。FireDAC は、レコードをソートする前に、すべてのレコードを結果セットから取得します。FireDAC は、内部的にソート済みのレコードのリストを作成して保守します。そのため、レコードの量が多ければソートに時間がかかる場合がありますが、その後のレコードのナビゲーションはソートなしの場合と同じような速さで行われます。

標準のソート

フィールド値でデータセットをソートするには、アプリケーションで IndexFieldNames プロパティを使用します。複数フィールドや、大文字/小文字の区別、降順モードがサポートされています。また、FormatOptions.SortOptions を使用してソート順のプロパティを変更することができます。以下に例を示します。

 FDQuery1.IndexFieldNames := 'ORDERID';

次のようにすることもできます。

 FDQuery1.IndexFieldNames := 'OrderDate:D;Price';

また、データセットのインデックスが Indexes コレクションに定義されている場合には、インデックスの 1 つを選択することができます。そのためには IndexName プロパティを使用します。以下に例を示します。

 with FDQuery1.Indexes.Add do begin
   Name := 'By OrderDate';
   Fields := 'OrderDate';
   Active := True;
 end;
 FDQuery1.IndexName := 'By OrderDate';

データセット ビュー

FireDAC では、Indexes コレクションを使用してデータセット レコードのビューを定義することができます。以下の TFDIndex プロパティでビューを制御します。

ビューは Name プロパティで識別されます。このプロパティはデータセット内で一意でなければなりません。

ビューとは、アプリケーションでレコードを取得または編集したときに FireDAC によって保守されるレコードのリストです。ビューは、ビューの Active プロパティとデータセットの IndexesActive プロパティが両方 True に設定されている場合に保守されます。ビューの Options に soUnique または soPrimary のプロパティが含まれていて、アプリケーションでレコードの一意性を維持する必要がある場合には、データセットの ConstraintsEnabled プロパティを True に設定してください。

ビューが選択されている場合、データセットはそのビューによって保守されているレコード リストを表します。ビューを選択するには、ビューの Selected プロパティを True に設定するか、データセットの IndexName プロパティをそのビューの名前に設定します。以下に例を示します。

 with FDQuery1.Indexes.Add do begin
   Name := 'May sale dates';
   Fields := 'OrderDate';
   Filter := 'MONTH(OrderDate) = 5';
   Distinct := True;
   Active := True;
   Selected := True;
 end;

その他のオプション

Locate、Lookup、SetRange など、一部のナビゲーション メソッドでは、現在のソート順を使って操作を最適化しています。ただし、Filter プロパティでは、フィルタリングの最適化にビューを使用しません。

アプリケーションでは、fkInternalCalc および fkAggregate のフィールドをソートに使用できます。FireDAC では、fkCalculated および fkLookup の種類のフィールドのソートをサポートしていません。その代わりに、アプリケーションで fkInternalCalc フィールドを作成し、fkCalculated または fkLookup フィールド値を持つ OnCalcFields イベント ハンドラでそこに値を設定し、それからその fkInternalCalc フィールドでソートすることができます。

TFDTable とソート

TFDTable のソートはサーバー側で行われます(ORDER BY)。FireDAC では、ユーザーが意識しない形で自動的に主キー フィールドがソート順に追加されることに注意してください。これは、ライブ データ ウィンドウ機能を適切に実行するために必要です。

関連項目

詳細については、次のデモを参照してください。

  • FireDAC\Samples\Comp Layer\TFDQuery\Indices
  • FireDAC\Samples\Comp Layer\TFDMemTable\Main