CDaoRecordset::Seek
更新 : 2007 年 11 月
指定された条件に一致する、インデックス化されたテーブル タイプのレコードセットのレコードを現在のインデックスを使用して検索し、そのレコードを現在のレコードにします。
BOOL Seek(
LPCTSTR lpszComparison,
COleVariant* pKey1,
COleVariant* pKey2 = NULL,
COleVariant* pKey3 = NULL
);
BOOL Seek(
LPCTSTR lpszComparison,
COleVariant* pKeyArray,
WORD nKeys
);
パラメータ
lpszComparison
次の文字列式の 1 つを指定します"<"、"<="、"="、"> ="、または ">"。pKey1
インデックスの最初のフィールドに対応する値を持つ COleVariant へのポインタ。必ず指定します。pKey2
インデックスの 2 番目のフィールドがあれば、そのフィールドに対応する値を持つ COleVariant へのポインタ。既定は NULL です。pKey3
インデックスの 3 番目のフィールドがあれば、そのフィールドに対応する値を持つ COleVariant へのポインタ。既定は NULL です。pKeyArray
バリアントの配列へのポインタ。配列のサイズは、インデックスのフィールドの数に対応します。nKeys
配列のサイズを示す整数。インデックスのフィールドの数です。メモ : キーには、ワイルドカードを指定できません。ワイルドカードを指定すると Seek は、一致するレコードを返すことができません。
戻り値
一致するレコードが見つかった場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
4 つ以上のフィールドのインデックスを処理するには、2 番目 (配列) の形式の Seek を使用します。
Seek を使用すると、テーブル タイプのレコードセットで高度なインデックス検索を実行できます。Seek を呼び出す前に SetCurrentIndex を呼び出して、現在のインデックスを設定する必要があります。インデックスが一意でないキー フィールド、またはフィールドを識別すると、Seek は条件に最初に一致するレコードを見つけます。インデックスを設定しないと、例外がスローされます。
UNICODE レコードセットを作成していない場合、COleVariant オブジェクトは明示的に ANSI 宣言される必要があります。これは、vtSrc に VT_BSTRT (ANSI) を設定してコンストラクタの COleVariant::COleVariant**(lpszSrc,vtSrc ) 形式を使用するか、または vtSrc に VT_BSTRT を設定して COleVariant 関数 SetString(lpszSrc,**vtSrc ) を使用して行うことができます。
Seek を呼び出す場合は、1 つ以上のキー値と比較演算子 ("<"、"<="、"="、"> ="、または ">") を渡します。Seek は、指定されたキー フィールドを検索し、lpszComparison と pKey1 で指定された条件に一致する最初のレコードを見つけます。レコードを見つけると、Seek は非 0 を返し、そのレコードを現在のレコードにします。Seek が一致するレコードの検索に失敗すると、Seek は 0 を返し、現在のレコードは不定になります。DAO を直接使用するときは、NoMatch プロパティを明示的にチェックする必要があります。
lpszComparison が "="、"> ="、または ">" の場合、Seek はインデックスの先頭から検索を開始します。lpszComparison が "<"、または "<=" の場合、Seek はインデックスの末尾から開始され、その末尾に重複するインデックスのエントリがない場合は逆方向に検索します。重複がある場合、Seek はインデックスの末尾の重複したインデックスの中の任意のエントリから検索を開始します。
Seek を使用する場合は、現在のレコードがなくてもかまいません。
ダイナセット タイプのレコードセット、またはスナップショット タイプのレコードセットで、特定の条件に一致するレコードを検索するには、検索操作を使用します。特定の条件に一致するレコードだけでなく、すべてのレコードを含めるには、レコード間を移動するには移動操作を使用します。
接続されたテーブルは、ダイナセット タイプのレコードセット、またはスナップショット タイプのレコードセットとして開く必要があるので、どの型でも接続されたテーブルに Seek を使用できません。しかし、インストール可能な ISAM データベースを直接開くために CDaoDatabase::Open を呼び出した場合は、そのデータベースのテーブルで Seek を使用できますが、パフォーマンスは悪くなる場合があります。
関連情報については、DAO ヘルプの「Seek Method」を参照してください。
必要条件
ヘッダー : afxdao.h