Microsoft Access でフォーム別クエリ (QBF) 手法を使用する方法

元の KB 番号: 304428

注:

基本的なマクロ、コーディング、相互運用性のスキルが必要です。 この記事は、Microsoft Access データベース (.accdb または .mdb) にのみ適用されます。

概要

この記事では、フォームを使用してクエリの条件を指定する方法について説明します。 この手法は、フォームによるクエリ (QBF) と呼ばれます。

詳細情報

QBF 手法では、クエリ条件を入力するフォームを作成します。 このフォームには空白のテキスト ボックスが含まれています。 各テキスト ボックスは、クエリを実行するテーブル内のフィールドを表します。 検索条件を指定するテキスト ボックスでのみエントリを作成します。

QBF フォームは、テーブル内のフィールドと一致するフィールドを持つデータ入力フォームに似ています。 Name、Address、City、State、および ZIP Code のフィールドを持つテーブルには、対応するフィールドを含む QBF フォームを使用できます。 特定のレコードを選択するには、フォームに検索条件の任意の組み合わせを入力できます。 市区町村のみ、市区町村と州、郵便番号のみ、またはその他の組み合わせを指定できます。 空白のままにしたフィールドは無視されます。 フォームのコマンド ボタンをクリックすると、フォームの検索条件を使用するクエリが実行されます。

QBF 手法を使用するには、次の手順に従います。

  1. サンプル データベース Northwind.mdbを開きます。

  2. テーブルまたはクエリに基づいていない新しいフォームを作成し、QBF_Formとして保存します。

  3. 新しいフォームで、次のプロパティを持つ 2 つのテキスト ボックスと 1 つのコマンド ボタンを作成します。次に、フォームを保存します。

    Text box 1
    ------------------
    Name: WhatCustomer
    
    Text box 2
    ------------------
    Name: WhatEmployee
    
    Command button 1:
    ------------------
    Caption: Search
    OnClick: QBF_Macro
    
  4. 次の新しいマクロを作成し、QBF_Macroとして保存します。

    Action: OpenQuery
    Query Name: QBF_Query
    View: Datasheet
    Data Mode: Edit
    
  5. Orders テーブルに基づく次の新しいクエリを作成し、QBF_Queryとして保存します。

    Field: CustomerID
    Sort: Ascending
    Criteria: Forms![QBF_Form]![WhatCustomer] Or Forms![QBF_Form]![WhatCustomer] Is Null
    
    Field: EmployeeID
    Sort: Ascending
    Criteria: Forms![QBF_Form]![WhatEmployee] Or Forms![QBF_Form]![WhatEmployee] Is Null
    
    NOTE: When you type the criteria, make sure that you type the entire criteria in a single Criteria field; do not split the criteria by placing the 'Or' section on a separate row.  
    
    Field: OrderID
    Field: OrderDate
    
  6. フォーム ビューでQBF_Formを開きます。 次の条件の組み合わせを入力します。 各組み合わせの後の [検索] をクリックします。

    Customer ID   Employee ID  Result
    -------------------------------------------------------
    <blank>       <blank>      All 830 orders
    
    AROUT         <blank>      13 orders
    
    AROUT         4            4 AROUT orders for employee 4
    
    <blank>       4            156 orders for employee 4
    

各クエリの結果セットを表示したら、[データシート] ウィンドウを閉じます。 次に、次の検索を開始します。 [検索] ボタンをクリックするたびに、QBF クエリ のパラメーターによって、QBF クエリ フォームで指定した検索条件に基づいてデータがフィルター処理されます。

QBF パラメーター条件に関する注意事項

この記事のサンプル QBF クエリでは、

フォーム!FormName!ControlNameまたはフォーム!FormName!ControlNameIs Null

をクリックしてデータをフィルター処理します。 これらの条件は、一致するすべてのレコードを返します。 抽出条件の値が null の場合、指定したフィールドのすべてのレコードが返されます。

次のいずれかの代替条件を指定して、わずかに異なる結果を返すことができます。

注:

次のサンプル条件では、行継続文字としてアンダースコア (_) が使用されています。 これらの条件を再作成するときに、行の末尾からアンダースコアを削除します。

  • フォームのように!FormName!ControlName& "*" または _ Forms!FormName!ControlNameIs Null

    この criteria ステートメントは上記の QBF サンプルと同じですが、ワイルドカードを使用してクエリを実行できる点が異なります。 たとえば、この抽出条件ステートメントを使用してフィールドに「Jo」と入力すると、クエリは "Jo" で始まるフィールド内のすべてのレコードを返します。これには、ジョンソン、ジョーンズ、ヨハンナなどが含まれます。

  • フォーム間!FormName!StartDate と Forms!FormName!EndDate または _ Forms!FormName!StartDate は Null です

    この抽出条件ステートメントを使用すると、クエリ フォームの [開始日] テキスト ボックスと [終了日] テキスト ボックスを使用して日付フィールドのクエリを実行できます。 クエリ フォームで指定した値の間に開始日と終了日が含まれるレコードが返されます。 ただし、フォームで開始日の値を省略すると、終了日の値に関係なく、クエリはすべてのレコードを返します。

  • フォームのように!FormName!ControlName& "*" または Is Null

    この criteria ステートメントは、条件に一致するレコードと null レコードの両方を返します。 条件が null の場合、すべてのレコードが返されます。 アスタリスク (*) は、より大きな Like 式の一部であるため、パラメーターと見なされることに注意してください。 アスタリスクはハードコーディングされた抽出条件値 ("*" など) であるため、null 値を持つレコードが返されます。

  • IIf(IsNull(Forms!FormName![ControlName]),_ "*",[Forms]![FormName]![ControlName])

    この criteria ステートメントは、条件に一致するすべてのレコードを返します。 クエリ フォームに条件が指定されていない場合は、null ではない すべてのレコードが返されます。

  • IIf(IsNull(Forms!FormName![ControlName]),_ [FieldName],[Forms]![FormName]![ControlName])

    これにより、条件に一致するすべてのレコードが返されます。 クエリ フォームに条件が指定されていない場合は、null 以外 のすべてのレコードが返されます (上の例と同じ結果)。