原始 KB 数: 304428
注意
需要基本的巨集、编码和互操作性技能。 本文仅适用于 Microsoft Access 数据库(.accdb 和 .mdb)。
总结
本文介绍如何使用窗体来指定查询的条件。 此技术按表单(QBF)调用。
更多信息
在 QBF 技术中,创建一个在其中输入查询条件的窗体。 此窗体包含空白文本框。 每个文本框表示要查询的表中的字段。 仅在要为其指定搜索条件的文本框中输入条目。
QBF 窗体类似于数据输入窗体,其中包含与表中的字段匹配的字段。 具有名称、地址、城市、州和邮政编码字段的表可以具有具有相应字段的 QBF 窗体。 若要选择某些记录,可以在表单中输入搜索条件的任意组合。 可以仅指定城市、城市和州或邮政编码,或者仅指定任何其他组合。 将忽略您留空的字段。 在窗体上选择命令按钮时,Access 会运行使用表单中的搜索条件的查询。
若要使用 QBF 技术,请执行以下步骤:
打开示例数据库Northwind.mdb。
创建不基于任何表或查询的新窗体,并将其另存为QBF_Form。
在新窗体上,创建两个文本框和一个具有以下属性的命令按钮。 然后,保存表单:
Text box 1 ------------------ Name: WhatCustomer Text box 2 ------------------ Name: WhatEmployee Command button 1: ------------------ Caption: Search OnClick: QBF_Macro
创建以下新巨集,然后将其另存为QBF_Macro:
Action: OpenQuery Query Name: QBF_Query View: Datasheet Data Mode: Edit
创建基于 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
在窗体视图中打开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或 Forms!FormName!ControlName为 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 语句通过查询窗体上的“开始日期”和“结束日期”文本框来查询日期字段。 返回查询窗体上指定的值之间的开始日期和结束日期之间的记录。 但是,如果省略窗体上的开始日期值,则查询将返回所有记录,而不考虑结束日期值。
就像窗体一样!FormName!ControlName& “*” 或为 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 的记录(与示例中的结果相同)。