Filter プロパティ (ADO)

適用先: Access 2013、Office 2013

Recordset のデータに対するフィルターを示します。

設定と戻り値

次の中の 1 つを含む、バリアント型 ( Variant ) の値を設定または取得します。

  • 条件文字列: AND 演算子または OR 演算子で連結された、1 つまたは複数の句で構成される文字列です。

  • ブックマーク配列: Recordset オブジェクト内のレコードを指す一意なブックマーク値の配列です。

  • FilterGroupEnum 値。

注釈

Filter プロパティは、 Recordset オブジェクト内のレコードを選別するために使います。 フィルター処理後の Recordset が現在のカーソルになります。 AbsolutePositionAbsolutePageRecordCountPageCount などの、現在のカーソルに基づいて値を返すその他のプロパティが影響を受けます。 これは、 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)。 文字列で単一引用符を使用し、日付を付けたポンド記号 (#) を使用します。 数値の場合、小数点、ドル記号、および指数表記を使用できます。 OperatorLIKE の場合、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'#" とします。

  • ANDOR の間に優先順位はありません。 句はかっこでグループにまとめることができます。 ただし、次のコード スニペットのように、 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

+