如何在 Microsoft Access 中使用表单 (QBF) 方法

原始 KB 数: 304428

注意

需要基本的巨集、编码和互操作性技能。 本文仅适用于 Microsoft Access 数据库(.accdb 和 .mdb)。

总结

本文介绍如何使用窗体来指定查询的条件。 此技术按表单(QBF)调用。

更多信息

在 QBF 技术中,创建一个在其中输入查询条件的窗体。 此窗体包含空白文本框。 每个文本框表示要查询的表中的字段。 仅在要为其指定搜索条件的文本框中输入条目。

QBF 窗体类似于数据输入窗体,其中包含与表中的字段匹配的字段。 具有名称、地址、城市、州和邮政编码字段的表可以具有具有相应字段的 QBF 窗体。 若要选择某些记录,可以在表单中输入搜索条件的任意组合。 可以仅指定城市、城市和州或邮政编码,或者仅指定任何其他组合。 将忽略您留空的字段。 在窗体上选择命令按钮时,Access 会运行使用表单中的搜索条件的查询。

若要使用 QBF 技术,请执行以下步骤:

  1. 打开示例数据库Northwind.mdb。

  2. 创建不基于任何表或查询的新窗体,并将其另存为QBF_Form。

  3. 在新窗体上,创建两个文本框和一个具有以下属性的命令按钮。 然后,保存表单:

    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 查询将查询中的条件实现为

形式!FormNameControlName或 Forms!FormNameControlName为 Null

以筛选数据。 这些条件返回所有匹配记录。 如果条件值为 null,则返回指定字段的所有记录。

可以指定以下任一替代条件以返回略有不同的结果。

注意

在以下示例条件中,下划线 (_) 用作行继续符。 重新创建这些条件时,请从行末尾删除下划线。

  • Like Forms!**FormName**!**ControlName**& "*" Or _ Forms!**FormName**!**ControlName**Is Null

    此 criteria 语句与 QBF 示例相同,但可以使用通配符进行查询。 例如,如果使用此条件语句在字段中输入“Jo”,查询将返回以“Jo”开头的字段中的每个记录,包括 Johnson、Jones、Johanna 等。

  • Between Forms!**FormName**!StartDate And Forms!**FormName**!EndDate Or _ Forms!**FormName**!StartDate Is Null

    可以使用此 criteria 语句通过查询窗体上的“开始日期”和“结束日期”文本框来查询日期字段。 返回查询窗体上指定的值之间的开始日期和结束日期之间的记录。 但是,如果省略窗体上的开始日期值,则查询将返回所有记录,而不考虑结束日期值。

  • 就像窗体一样!FormNameControlName& “*” 或为 Null

    此 criteria 语句返回与条件匹配的记录和 null 的记录。 如果条件为 null,则返回所有记录。 星号 = 被视为参数,因为它是更大的 Like 表达式的一部分。 由于星号是硬编码的条件值(例如,如“*”),因此返回 null 值的记录。

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

    此 criteria 语句返回与条件匹配的所有记录。 如果未在查询窗体中指定任何条件,则返回不为 null 的所有记录。

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

    这会返回与条件匹配的所有记录。 如果未在查询窗体中指定任何条件,则返回所有不为 null 的记录(与示例中的结果相同)。