FireDAC.Comp.DataSet.TFDDataSet.LocateEx
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
は、検索条件となる述語式を表す文字列です。この式には、SUM
やCOUNT
などの集計関数を含めることはできません。また、述語式は、評価結果が True または False になるものでなければなりません。FireDAC では式の拡張構文をサポートしています。
AOptions
は追加の検索モードを指定するオプションのセットです。次のオプションが用意されています。
オプション |
説明 |
---|---|
|
これが含まれている場合、LocateEx では、文字列値を照合する際に大文字/小文字を区別しません。 |
|
これが含まれている場合、述語式では、文字列値を比較する際に不完全な文字列を指定できます。 |
|
これが含まれている場合、LocateEx では、データセット内の次のレコードから検索を開始します。含まれていない場合は、先頭のレコードから検索を開始します。 |
|
これが含まれている場合、LocateEx では、逆方向にレコードを検索します。含まれていない場合は、順方向に検索します。 |
|
これが含まれている場合、LocateEx では以下を行いません。
|
|
これが含まれている場合、FetchAll が呼び出されません。検索は、既に取得されているレコードで行われます。 |
一致するレコードが見つかった場合、LocateEx は True を返します。lxoCheckOnly
が指定されていなければ、見つかったレコードが現在のレコードになります。ApRecordIndex
が nil でない場合は、ApRecordIndex
で示される変数が、見つかったレコードのインデックスを受け取ります。
レコードの検索を最適化するために、アプリケーションでは、クライアント インデックスをセットアップできます。このインデックスが LocateEx で使用されるのは、次の条件が満たされる場合です。
- インデックス フィールド リストの先頭に、
AKeyFields
の各フィールドが含まれている。 soNoCase
オプションを指定してインデックスが作成され、AOptions
にlxoCaseInsensitive
が含まれている。あるいは、soNoCase
オプションを指定せずにインデックスが作成され、AOptions
にlxoCaseInsensitive
が含まれていない。- インデックスがアクティブで、現在のインデックスである。
例
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;