レコードのソート(FireDAC)

提供: RAD Studio
移動先: 案内検索

データセットの操作(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 フィールドでソートすることができます。

元のレコード順(レコードがフェッチされたまたは/および追記された順)でデータセットをソートするには、プロパティ IndexFieldNames および Fields の値に # を使用します。

TFDTable とソート

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

関連項目

サンプル