FireDAC.Comp.DataSet.TFDDataSet.LocateEx

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

Delphi

function LocateEx(const AKeyFields: string; const AKeyValues: Variant;  AOptions: TFDDataSetLocateOptions = []; ApRecordIndex: PInteger = nil): Boolean; overload; virtual;
function LocateEx(const AExpression: string;  AOptions: TFDDataSetLocateOptions = []; ApRecordIndex: PInteger = nil): Boolean; overload; virtual;

C++

virtual bool __fastcall LocateEx(const System::UnicodeString AKeyFields, const System::Variant &AKeyValues, TFDDataSetLocateOptions AOptions = TFDDataSetLocateOptions() , System::PInteger ApRecordIndex = (System::PInteger)(0x0))/* overload */;
virtual bool __fastcall LocateEx(const System::UnicodeString AExpression, TFDDataSetLocateOptions AOptions = TFDDataSetLocateOptions() , System::PInteger ApRecordIndex = (System::PInteger)(0x0))/* overload */;

プロパティ

種類 可視性 ソース ユニット
function public
FireDAC.Comp.DataSet.pas
FireDAC.Comp.DataSet.hpp
FireDAC.Comp.DataSet TFDDataSet

説明

フィールド値または述語式で指定されたレコードをデータセットで検索し、見つかったレコードにフォーカスを移動し、そのインデックスを返します。


このメソッドは、次のようにオーバーロード(多重定義)されています。

  • LocateEx の第 1 の オーバーロード メソッドを使用すると、指定されたフィールド値を持つレコードをデータセットで検索し、見つかった場合にはそれを現在のレコードにすることができます。AKeyFields は検索条件となるフィールド名をセミコロンで区切ったリストです。AKeyValues は、これらのキー フィールドの照合値が格納されている Variant です。AKeyFields がただ 1 つのフィールド名である場合、AKeyValues は単一の値です。AKeyFields に複数のフィールド名が含まれている場合、AKeyValues はバリアント配列で、その各要素がキー フィールドに対応します。
  • LocateEx の第 2 のオーバーロード メソッドを使用すると、述語式を満たすレコードをデータセットで検索し、見つかった場合にはそれを現在のレコードにすることができます。AExpression は、検索条件となる述語式を表す文字列です。この式には、SUMCOUNT などの集計関数を含めることはできません。また、述語式は、評価結果が True または False になるものでなければなりません。FireDAC では式の拡張構文をサポートしています。

AOptions は追加の検索モードを指定するオプションのセットです。次のオプションが用意されています。

オプション

説明

lxoCaseInsensitive

これが含まれている場合、LocateEx では、文字列値を照合する際に大文字/小文字を区別しません。

lxoPartialKey

これが含まれている場合、述語式では、文字列値を比較する際に不完全な文字列を指定できます。

lxoFromCurrent

これが含まれている場合、LocateEx では、データセット内の次のレコードから検索を開始します。含まれていない場合は、先頭のレコードから検索を開始します。

lxoBackward

これが含まれている場合、LocateEx では、逆方向にレコードを検索します。含まれていない場合は、順方向に検索します。

lxoCheckOnly

これが含まれている場合、LocateEx では以下を行いません。

  • 現在位置の変更
  • BeforeScroll/AfterScroll イベントの生成
  • 編集モードの終了

lxoNoFetchAll

これが含まれている場合、FetchAll が呼び出されません。検索は、既に取得されているレコードで行われます。

一致するレコードが見つかった場合、LocateExTrue を返します。lxoCheckOnly が指定されていなければ、見つかったレコードが現在のレコードになります。ApRecordIndexnil でない場合は、ApRecordIndex で示される変数が、見つかったレコードのインデックスを受け取ります。

レコードの検索を最適化するために、アプリケーションでは、クライアント インデックスをセットアップできます。このインデックスが LocateEx で使用されるのは、次の条件が満たされる場合です。

  • インデックス フィールド リストの先頭に、AKeyFields の各フィールドが含まれている。
  • soNoCase オプションを指定してインデックスが作成され、AOptionslxoCaseInsensitive が含まれている。あるいは、soNoCase オプションを指定せずにインデックスが作成され、AOptionslxoCaseInsensitive が含まれていない。
  • インデックスがアクティブで、現在のインデックスである。

procedure TForm1.BtnFindClick(ASender: TObject);
begin
  if not CustTable.LocateEx('COMPANY', 'AMCO', [lxoCaseInsensitive]) then
    ShowMessage('The customer from AMCO company is not found');
end;

procedure TForm1.BtnNextClick(ASender: TObject);
begin
  if not CustTable.LocateEx('COMPANY', 'AMCO', [lxoCaseInsensitive, lxoFromCurrent]) then
    ShowMessage('The customer from AMCO company is not found');
end;

関連項目