在查询、窗体和报表中使用参数
应用对象
如果希望 Access 中的查询在每次运行时都请求输入,则可以创建参数查询。
还可创建一个窗体来收集参数值,这些参数用于限制查询、窗体或报表所返回的记录。 本文介绍如何使用窗体来优化查询、窗体和报表中的参数使用。
本文内容
概述
可以在 Access 中使用参数查询条件来限制查询返回的记录集。 可能会发现参数查询提供的对话框不足以满足目的。 在这种情况下,可创建更能满足参数收集需求的窗体。 本文介绍如何创建收集查询和报表参数的窗体。 本文假定读者已熟悉如何创建查询和在查询中定义参数。 至少应熟悉如何创建选择查询,然后方可继续操作。
本文提供在查询中使用参数的示例。 本文不提供有关指定标准的全面参考。
- 有关如何创建选择查询的详细信息,请参阅创建简单的选择查询一文。
- 有关查询更多的常规信息,请参阅查询简介一文。
- 有关在查询中定义参数的详细信息,请参阅利用参数要求运行查询时进行输入一文。
- 有关如何指定查询条件的详细信息,请参阅查询条件示例一文。
在查询中使用参数
在参数中使用查询和创建使用条件的查询一样简单。 可以设计查询来提示一条信息(例如一个部件号)或多条信息(例如两个日期)。 对于每个参数,参数查询显示一个单独的对话框,提示输入该参数的值。
将参数添加到查询
创建一个选择查询,然后在“设计”视图中打开该查询。
在需要应用参数的字段的“条件”行中,键入希望参数对话框显示的文本,并将文本括在方括号内,例如:
[Start Date]
运行参数查询时,对话框中显示不带方括号的提示。
还可将表达式用于参数提示,例如:
介于 [开始日期]和[结束日期]注意
每个参数提示将显示一个单独的对话框。 第二个示例显示两个对话框:一个“Start Date”对话框和一个“Start Date”对话框。
对要添加参数的每个字段重复步骤 2。
可以使用上述步骤将参数添加到以下任意一种查询类型:选择、交叉表、追加、生成表或更新。
还可以按照如下步骤将参数添加到联合查询:
- 在 SQL 视图中打开联合查询。
- 添加一个 WHERE 子句,其中包含要提示输入参数的每个字段。
如果已经存在一个 WHERE 子句,请检查该子句中是否已经存在要使用参数提示的字段。如果字段不存在,请添加相应字段。 - WHERE 子句中使用参数提示,而不使用条件。
指定参数数据类型
还可以指定参数应该接受的数据类型。 可以指定任何参数的数据类型,但尤其重要的是指定数值、货币或日期/时间数据的数据类型。 在指定参数应该接受的数据类型后,如果用户输入错误类型的数据(例如,应该输入货币,但输入了文本),则会看到更有帮助的错误消息。
注意
如果将参数配置为接受文本数据,则输入的任何内容都将被解释为文本,并且不会显示任何错误消息。
若要指定查询中参数的数据类型,请按照以下步骤操作:
- 在设计视图中打开查询,在“设计”选项卡上的“显示/隐藏”组中,单击“参数”。
- 在“查询参数”对话框中的“参数”列中,为您要为其指定数据类型的每个参数键入提示信息。 请确保每个参数都与您在查询设计网格的“条件”行中使用的提示信息相匹配。
- 在“数据类型”列中,选择每个参数的数据类型。
创建收集参数的窗体
虽然参数查询具有收集参数的内置对话框,但是它们仅提供基础功能。 使用报表收集参数可获得以下功能:
- 使用特定于数据类型的控件,例如对于日期使用日历控件。
- 保留已收集的参数,以便将其用于多个查询。
- 提供用于参数收集的组合框或列表框,便于从可用数据值列表中进行选取。
- 提供其他功能的控件,例如打开或刷新查询。
下方视频介绍如何通过创建简单窗体而不是使用通常与参数查询关联的对话框来收集查询参数。
创建收集报表参数的窗体
实现此方案有多种方式,但我们仅介绍一种主要使用宏的方法。 按照以下步骤创建一个收集报表参数的窗体
- 步骤 1:创建一个接收输入的窗体
- 步骤 2:创建一个检查参数窗体是否已加载的代码模块
- 步骤 3:创建一个控制窗体和报表的宏
- 步骤 4:向窗体添加“确定”和“取消”命令按钮
- 步骤 5:将窗体数据用作查询条件
- 步骤 6:将宏操作添加到报表事件
- 步骤 7:试用
步骤 1:创建一个接收输入的窗体
在“创建”选项卡上的“窗体”组中,单击“窗体设计”。
在“设计”视图中,按 F4 显示属性表,然后指定窗体属性,如下表所示。
属性 设置 标题 输入要在窗体标题栏中显示的名称。 默认视图 单个窗体 允许窗体视图 是 允许数据表视图 否 允许数据透视表视图 否 允许数据透视图视图 否 滚动条 两者均无 记录选择器 否 导航按钮 否 边框样式 对话框边框 对于希望窗体收集的每个参数,请点击“设计”选项卡上“控件”组中的“文本框”。
设置文本框属性,如下表所示。
属性 设置 名称 输入一个描述参数的名称,例如 StartDate。 格式 选择一个反映参数字段数据类型的格式。 例如,对日期字段选择“常规日期”。 保存窗体,并为其指定名称,例如“frmCriteria”。
步骤 2:创建一个检查参数窗体是否已加载的代码模块
在“创建”选项卡的“宏与代码”组中,单击“模块”。
一个新模块随即在 Visual Basic 编辑器中打开。在 Visual Basic 编辑器中输入或粘贴以下代码:
Function IsLoaded(ByVal strFormName As String) As Boolean Dim oAccessObject As AccessObject Set oAccessObject = CurrentProject.AllForms(strFormName) If oAccessObject.IsLoaded Then If oAccessObject.CurrentView <> acCurViewDesign Then IsLoaded = True End If End If End Function保存模块并指定一个独特名称,然后关闭 Visual Basic 编辑器。
步骤 3:创建一个控制窗体和报表的宏
使用 Access 宏的子宏功能可定义单个宏中所需的所有步骤。 为控制此过程所需的各种任务,我们将创建 4 个子宏:“打开对话”、“关闭对话”、“确定”和“取消”。 使用下方截图作为指南,创建一个包含以下子宏和操作的新宏。 请注意,此示例中,参数窗体名为“frmCriteria”。 调整宏,使之与先前创建的窗体名称一致。 若要查看所有宏操作,还需确保单击“设计”选项卡上的“显示所有操作”。
保存并关闭宏。 为宏指定名称,例如“日期范围宏”。
步骤 4:向窗体添加“确定”和“取消”命令按钮
重新打开先前在“设计”视图中创建的参数窗体。
确保未选择“设计”选项卡上“控件”组中的“使用控件向导”。
在“设计”选项卡上的“控件”组中,单击“按钮”。
将指针置于窗体中的文本框下方,然后拖动指针创建一个“确定”命令按钮。
如果属性表不可见,请按 F4 显示该表。
如下表所示,设置“确定”按钮的属性。
属性 设置 名称 确定 标题 确定 默认 是 OnClick 输入宏名称,例如 Date Range Macro.OK。 创建 “取消” 命令按钮并设置其属性,如下表所示。
属性 设置 名称 取消 标题 取消 OnClick 输入宏名称,例如 Date Range Macro.Cancel。 保存并关闭窗体。
步骤 5:将窗体数据用作查询条件
打开先前在“设计”视图中创建的查询。
输入数据条件。 使用 Forms 对象、窗体的名称和控件的名称:
- 例如,在 Access 数据库 (.accdb 或 .mdb) 中,对于名为“frmCriteria”的窗体使用如下表达式,以引用查询中名为“Start Date”和“End Date”的控件。
Between [Forms]![frmCriteria]![Start Date] And [Forms]![frmCriteria]![End Date]
- 例如,在 Access 数据库 (.accdb 或 .mdb) 中,对于名为“frmCriteria”的窗体使用如下表达式,以引用查询中名为“Start Date”和“End Date”的控件。
步骤 6:将宏操作添加到报表事件
打开要在“设计”视图中使用的报表。
如果属性表不可见,请按 F4 显示该表。
确保报表的“记录源”属性使用先前定义的参数查询。
设置其他两项报表属性,如下表所示。
属性 设置 打开 输入宏名称,例如 Date Range Macro.Open Dialog。 关闭 输入宏名称,例如 Date Range Macro.Close Dialog。 触发报表“打开”事件时,Access 将运行“日期范围宏”对象的“打开对话框”子宏中所定义的操作。 同样,关闭报表时,Access 将运行“日期范围宏”对象的“关闭对话框”子宏中所定义的操作。
保存并关闭报表。
步骤 7:试用
创建完所有 Access 对象后,可以尝试一下。在报表 视图 或 打印预览 中打开报表,请注意,在 Access 显示报表之前,参数窗体以对话框模式打开。 在之前创建的文本框中输入所需的条件,然后单击窗体上的 “确定” 命令按钮。 然后,Access 将隐藏窗体 (Visible = No) ,并仅打开与条件匹配的数据的报表。 这之所以有效,是因为报表所基于的参数查询可以读取隐藏窗体上的控件中的值。 关闭报表时,Access 还会关闭参数窗体。