Data.Win.ADODB.TCustomADODataSet.Seek
Delphi
function Seek(const KeyValues: Variant; SeekOption: TSeekOption = soFirstEQ): Boolean;
C++
bool __fastcall Seek(const System::Variant &KeyValues, TSeekOption SeekOption = (TSeekOption)(0x0));
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | public | Data.Win.ADODB.pas Data.Win.ADODB.hpp |
Data.Win.ADODB | TCustomADODataSet |
説明
現在のインデックスを使ってレコードを検索します。
Seek メソッドを呼び出すと,現在のインデックスに基づく(1 つまたは複数の)項目内の指定の(1 つまたは複数の)値を持つレコードを見つけることができます。Seek を使用するには,インデックスがアクティブでなければなりません。検索で使用する項目は,現在アクティブなインデックスの項目です。Seek は検索の成功に基づいて,データセットのレコードポインタを移動します。検索でレコードが見つかれば,レコードポインタはそのレコードに移動します。Seek が SeekOption で指定された比較手段を使って KeyValues 内の値に一致するレコードを見つけられない場合,レコードポインタはデータセットの末尾に配置されます。Seek は,検索の成功を反映する論理値を返します。レコードが見つかった場合には true,見つからなかった場合には false です。
SuccessVar := ADODataSet1.Seek('Jones', soFirstEQ);
SuccessVar = ADODataSet1->Seek("Jones", soFirstEQ);
現在のインデックスが複数の項目に基づいている場合,Seek メソッドで指定された検索値はインデックス式で左から右に順番に並んだすべての項目を対象にします。つまり,インデックスが 3 つの項目に基づいている場合,検索は,1 番めの項目,1 番めと 2 番めの項目,1 番めと 2 番めと 3 番めの項目を対象にできます。3 番めの項目のみや,1 番めと 3 番めの項目の組み合わせを対象にはできません。複数の項目に基づいて検索するには,バリアント配列を Seek メソッドに渡します。
KeyValues は,検索対象の 1 つの値か,インデックスが複数の項目に基づいている場合には複数の値です。
ADODataSet1.Seek(VarArrayOf([90030, 90020]), soFirstEQ);
ADODataSet1->Seek(VarArrayOf(OPENARRAY(Variant, (90030, 90020))), soFirstEQ);
SeekOption は,検索が成功したかどうかを判別するうえで行う比較の種類を指定します。SeekOption は,以下の 6 個の定数の 1 つです。
Seek オプション | 意味 |
---|---|
soFirstEQ |
レコードポインタは,レコードが見つかった場合には最初に一致したレコードに配置され,レコードが見つからなかった場合にはデータセットの末尾に配置されます。 |
soLastEQ |
レコードポインタは,レコードが見つかった場合には最後に一致したレコードに配置され,レコードが見つからなかった場合にはデータセットの末尾に配置されます。 |
soAfterEQ |
レコードポインタは,一致するレコードが見つかった場合にはそこに配置されます。ただし,一致するレコードが見つかるはずだった位置の直後に配置されることもあります。 |
soAfter |
レコードポインタは,一致するレコードが見つかるはずだった位置の直後に配置されます。 |
soBeforeEQ |
レコードポインタは,一致するレコードが見つかった場合にはそこに配置されます。ただし,一致するレコードが見つかるはずだった位置の直前に配置されることもあります。 |
soBefore |
レコードポインタは,一致するレコードが見つかるはずだった位置の直前に配置されます。 |
Seek メソッドは,2~3 のプロパティの設定に依存して使用します。IndexName は使用するインデックスをアクティブにするように設定し,CommandType は cmdTableDirect(これは TADODataSet の場合で,TADOTable では TableDirect に true を設定のこと),CursorLocation は clUseServer,CursorType は ctKeySet でなければなりません。
メモ: VCL Seek メソッドは,ADO Recordset オブジェクトの Seek メソッドの直接的な実装です。このマニュアルの執筆時点では,このメソッドは Microsoft Access2000 および Jet 4 プロバイダで使用するためたけにサポートされています。