Filter プロパティ (ADO)
適用先: Access 2013、Office 2013
Recordset のデータに対するフィルターを示します。
設定と戻り値
次の中の 1 つを含む、バリアント型 ( Variant ) の値を設定または取得します。
条件文字列: AND 演算子または OR 演算子で連結された、1 つまたは複数の句で構成される文字列です。
ブックマーク配列: Recordset オブジェクト内のレコードを指す一意なブックマーク値の配列です。
注釈
Filter プロパティは、 Recordset オブジェクト内のレコードを選別するために使います。 フィルター処理後の Recordset が現在のカーソルになります。 AbsolutePosition、AbsolutePage、RecordCount、PageCount などの、現在のカーソルに基づいて値を返すその他のプロパティが影響を受けます。 これは、 Filter プロパティを特定の値に設定すると、現在のレコードが新しい値を満たす最初のレコードに移動するためです。
条件文字列は、 FieldName-Operator-Value という形式の句で構成されます (例: "LastName = 'Smith'")。 複合句は、個々の句を AND (たとえば、"LastName = 'Smith' AND FirstName = 'John'") または OR (例: ") と連結することで作成できます。 複合句は、個々の句を AND (たとえば、"LastName = 'Smith' AND FirstName = 'John'") または OR (たとえば、"LastName = 'Smith' または LastName = 'Jones') と連結することで作成できます。 検索条件文字列を指定する際は、次の点に注意してください。
FieldName には、Recordset の有効なフィールド名を指定する必要があります。 フィールド名にスペースを含める場合は、名前を角かっこで囲みます。
演算子は、=、=、>、=、<>または LIKE のいずれか<><である必要があります。
値 は、フィールド値を比較する値です (たとえば、"Smith"、#8/24/95#、12.345、または $50.00)。 文字列で単一引用符を使用し、日付を付けたポンド記号 (#) を使用します。 数値の場合、小数点、ドル記号、および指数表記を使用できます。 Operator が LIKE の場合、Value はワイルドカードを使用できます。 Only the asterisk (*) and percent sign (%) wild cards are allowed, and they must be the last character in the string. Value に Null を指定することはできません。
注:
[!メモ] フィルターの "値" に単一引用符 (') を含めるには、2 つの単一引用符を使って 1 つの単一引用符を表します。 たとえば、O'Malley にフィルターを設定するには、条件文字列は、"col1 = 'O''Malley'" とします。 フィルター値の先頭と末尾に単一引用符を含めるには、シャープ記号 (#) で文字列を囲みます。 たとえば、'1' にフィルターを設定するには、条件文字列を "col1 = #'1'#" とします。
AND と OR の間に優先順位はありません。 句はかっこでグループにまとめることができます。 ただし、次のコード スニペットのように、 OR で結合された句をグループ化してから、 AND を使用して別の句にグループを結合することはできません。
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
この場合は、フィルターを次のように構成します。
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
LIKE 句では、パターンの先頭と末尾 (例: LastName Like '*mit*') またはパターンの末尾 (たとえば、LastName Like 'Smit*') でのみワイルドカードを使用できます。
フィルター定数を使うと、一括更新モードでレコード間に競合が発生した場合でも、たとえば最後の UpdateBatch メソッドの呼び出しで変更されたレコードだけを表示するなどの方法で、簡単に競合を解消できます。
たとえば、レコードが他のユーザーによって既に削除されている場合など、基になるデータとの競合が原因で、 Filter プロパティの設定に失敗する場合があります。 このような場合、プロバイダーは Errors コレクションに警告を返しますが、プログラムの実行は停止されません。 実行時エラーは、要求したすべてのレコードで競合が発生した場合にのみ発生します。 競合が発生したレコードを見つけるには、 Status プロパティを使用します。
Filter プロパティを長さ 0 の文字列 ("") に設定すると、 adFilterNone 定数を使った場合と同じ結果が得られます。
Filter プロパティを設定すると、 Recordset のフィルター処理済みのレコードのサブセット内で最初のレコードに現在のレコードの位置が移動します。 同様に、 Filter プロパティを消去すると、現在のレコードの位置は Recordset 内で最初のレコードに移動します。
Filter プロパティで使用する配列を作成するときに使用するブックマーク値については、 Bookmark プロパティを参照してください。
抽出条件文字列の形式の フィルター (OrderDate > '12/31/1999' など) のみが、永続化された Recordset の内容に影響 します。 Bookmark の配列または FilterGroupEnum の値を使用して作成された Filter は、永続化された Recordset の内容に影響しません。 これらの規則は、クライアント側カーソルまたはサーバー側カーソルで作成された Recordset にも当てはまります。
注:
[!メモ] 単一キー テーブルのキー フィールドを基にしてフィルタリングが行われ、キー フィールド値に変更が加えられた場合、 adFilterPendingRecords フラグをフィルター処理および変更された Recordset に一括更新モードで適用すると、結果の Recordset は空になります。 次のいずれかの条件が満たされる場合は、空ではない Recordset が得られます。
- 単一キー テーブルの非キー フィールドを基にしてフィルタリングが行われた。
- 複数キー テーブルの任意のフィールドを基にしてフィルタリングが行われた。
- 単一キー テーブルの非キー フィールドに変更が加えられた。
- 複数キー テーブルの任意のフィールドに変更が加えられた。
次の表は、フィルター処理と変更のさまざまな組み合わせでの adFilterPendingRecords の効果をまとめたものです。 左側の列には、可能な変更が表示されます。変更は、キーなしフィールド、単一キーテーブルのキー フィールド、または複数キー付きテーブルのいずれかのキー フィールドに対して行うことができます。 上部の行には、フィルター条件が表示されます。フィルター処理は、キーなしフィールド、単一キー テーブル内のキー フィールド、または複数キー付きテーブル内のキー フィールドのいずれかに基づいて行うことができます。 交差するセルは結果を示します。 + は 、adFilterPendingRecords を適用すると空ではない Recordset になります。 - は空の Recordset を意味します。
|
非キー |
単一キー |
複数キー |
---|---|---|---|
非キー |
+ |
+ |
+ |
単一キー |
+ |
- |
該当なし |
複数キー |
+ |
N/A |
+ |