建立要求用户输入的查询
如果需要查询在每次运行时都要求用户输入,那么可以创建参数查询 (参数查询:在这种查询中,用户以交互方式指定一个或多个条件值。参数查询不是一个单独种类的查询,而是扩展了查询的灵活性。)。
还可以创建窗体来收集参数值。使用窗体可以:
✍ | 使用特定于数据类型的控件 |
✍ | 启用参数值的持久性 |
✍ | 提供组合框控件(这样您就可以从列表中选取值,而不是键入值) |
✍ | 使用窗体中可用的其他控件 |
注释 不可使用窗体来收集 Web 数据库中的查询参数。
本文提供参数概述,说明如何在查询中使用参数,以及如何使用窗体来增强参数的使用。
本文内容
可以在 Access 的查询中使用条件来限制查询所返回的记录集。请考虑以下情况。
假设您有一个名为“上一个订单”的查询,该查询返回客户的名称和地址,以及该客户最近订单的发货日期。最近,您向产品目录和库存中添加了一些令人兴奋的新产品。您每次按订单发货时,都会附上一份最新的目录。您预期新产品将非常受欢迎,并希望确保所有的客户都知道它们。您希望向尚未收到随货发运的新目录的所有客户邮寄新目录。
因此,您希望创建一个邮寄列表,在其中包含其最近的订单发货日期是在您制作新目录之前的客户的名称和地址。为此,请向“上一个订单”查询的“发货日期”字段应用一个条件。该条件指定,“发货日期”字段中的日期在开始分发新目录的日期(例如,3/31/2006)之前。当您运行该查询时,将获得一个邮寄列表,其中只包含尚未收到新目录的客户。
但是,如果这种情况再次出现该怎么办?可以通过更改条件所指定的值来修改查询的设计,但是,如果查询要求您输入日期,并使用该日期来确定要包括在邮寄列表中的客户,不是更好吗?通过使用一种称为“参数”的特殊条件,可以让查询完成上述操作。
您可能会发现参数查询提供的对话框不足以满足需要。在这种情况下,可以创建一个能够更好地满足参数收集需要的窗体。本文说明如何创建用来收集报表参数的窗体。
本文假设您熟悉创建查询的过程。继续之前,您至少应该熟悉如何创建选择查询。
有关如何创建选择查询的详细信息,请参阅查询简介一文。
本文举例说明如何在查询中使用参数,但是未提供关于如何指定条件的全面参考资料。
有关如何指定条件的详细信息,请参阅查询条件示例一文。
在查询中使用参数与创建使用条件的查询一样简单。可以设计提示您输入一段信息(如部件号)的查询,也可以设计提示您输入多段信息(如两个日期)的查询。对于每个参数,参数查询都显示一个单独的对话框,提示您输入该参数的值。
1. | 创建一个选择查询,然后在设计视图 (设计视图:显示数据库对象(包括表、查询、窗体、报表和宏)的设计的视图。在设计视图中,可以创建新的数据库对象以及修改现有对象的设计。)中打开该查询。 |
2. | 在要应用参数的字段的“条件”行中,键入您希望该参数对话框显示的文本,并用方括号括起来,例如: |
[开始日期]
运行该参数查询时,对话框中会显示该提示(不带方括号)。
还可以在表达式中使用参数提示,例如:
Between [开始日期] And [结束日期]
注释 对于每个参数提示,会出现单独的对话框。在第二个示例中,将出现两个对话框:一个对应“开始日期”,另一个对应“结束日期”。
3. | 对要添加参数的每个字段重复步骤 2。 |
可以使用上面的步骤将参数添加到以下类型的任一查询:
✍ | 选择查询 |
✍ | 交叉表查询 |
✍ | 追加查询 |
✍ | 生成表查询 |
✍ | 更新查询 |
还可以将参数添加到联合查询。
1. | 在 SQL 视图中打开联合查询。 |
2. | 添加一个 WHERE 子句,其中包含要提示用户输入参数的每个字段。 |
如果已经存在一个 WHERE 子句,请检查要使用参数提示的字段是否已在该子句中,如果没有,则添加它们。
3. | 在 WHERE 子句中使用参数提示,而不是使用条件。 |
您可能希望查询应用参数的方式稍有不同。例如,您可能希望查询接受文本字符串,并将该文本字符串与某个字段的任一部分进行匹配。这可以通过将 Like 关键字与通配符结合使用来实现。例如,您可能希望查询提示您输入原产国/地区,但是希望在相关字段值中包含参数字符串时进行匹配。要执行此操作:
1. | 创建一个选择查询,然后在“设计”视图中打开该查询。 |
2. | 在要应用参数的字段的“条件”行中,键入 Like "*"&[,再键入要用作提示的文本,然后键入 ]&"*"。 |
当您运行该参数查询时,对话框中会显示该提示(不带中括号,不带 Like 关键字和通配符)。
3. | 当参数查询接受参数时,会与包含参数字符串的值进行匹配。例如,参数字符串 us 与参数字段值为 Australia 的行和值为 USA 的行匹配。 |
还可以使用 Like 关键字和通配符来指定参数应当与字段值的开头或末尾匹配。若要与字段值的开头匹配,请省略左方括号前面的引号、通配符和与号 (&)。若要与字段值的末尾匹配,请省略右方括号后面的与号 (&)、引号和通配符。
您可能希望收集一个参数,但不希望查询返回有匹配值的行,而希望查询返回另外某个比较的结果为 True 的行。例如,您可能希望查询提示输入一个年份并返回年份值大于参数字符串的行。为此,请在用来将参数提示括起来的第一个方括号的左侧键入一个比较运算符,例如, >[年份:]。
您还可以指定参数应该接受的数据类型。可以指定任何参数的数据类型,但尤其重要的是指定数值、货币或日期/时间数据的数据类型。在指定参数应该接受的数据类型后,如果用户输入错误类型的数据(例如,应该输入货币,但输入了文本),则会看到更有帮助的错误消息。
注释 如果将参数配置为接受文本数据,则输入的任何内容都将被解释为文本,并且不会显示任何错误消息。
若要指定查询中参数的数据类型,请按照下面的步骤执行:
1. | 在设计视图中打开查询,在“设计”选项卡上的“显示/隐藏”组中,单击“参数”。 |
2. | 在“查询参数”对话框中的“参数”列中,为您要为其指定数据类型的每个参数键入提示信息。请确保每个参数都与您在查询设计网格的“条件”行中使用的提示信息相匹配。 |
3. | 在“数据类型”列中,选择每个参数的数据类型。 |
注释 不可使用窗体来收集 Web 数据库中的查询参数。
虽然参数查询特有收集参数的内置对话框,但它们只提供基本功能。使用窗体来收集参数,可以获得下面的功能:
✍ | 使用特定于数据类型的控件(如日期的日历控件) |
✍ | 持久保留收集的参数,这样就可以在多个查询中使用这些参数。 |
✍ | 提供用于收集参数的组合框或列表框,让用户从可用数据值的列表中选取值。 |
✍ | 提供用于执行其他功能(如打开或刷新查询)的控件。 |
按照下面的步骤创建收集参数的窗体。
1. | 在“创建”选项卡上的“窗体”组中,单击“窗体设计”。 |
2. | 在“设计”视图中,按 F4 显示属性表,然后如下表所示指定窗体属性。 |
属性 |
设置 |
标题 |
输入要出现在窗体标题栏中的名称。 |
默认视图 |
单个窗体 |
允许窗体视图 |
是 |
允许数据表视图 |
否 |
允许数据透视表视图 |
否 |
允许数据透视图视图 |
否 |
滚动条 |
两者均无 |
记录选择器 |
否 |
导航按钮 |
否 |
边框样式 |
对话框 |
3. | 对于要窗体收集的每个参数,在“设计”选项卡上的“控件”组中,单击“文本框”按钮。 |
4. | 如下表所示设置文本框属性。 |
属性 |
设置 |
名称 |
输入描述参数的名称,如“开始日期”。 |
格式 |
选择一种反映参数字段的数据类型的格式。例如,为日期字段选择常规日期。 |
5. | 保存该窗体并为其命名,如“日期范围”。 |
1. | 在“创建”选项卡上的“宏和代码”组中,单击“模块”。 |
新模块随即在 Visual Basic 编辑器中打开。
2. | 在 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
3. | 保存模块,然后关闭 Visual Basic 编辑器。 |
1. | 在“创建”选项卡上的“宏和代码”组中,单击“宏”。 |
2. | 在“设计”选项卡上的“显示/隐藏”组中,单击“显示所有操作”。 |
3. | 右键单击宏对象选项卡,然后单击“保存”。 |
4. | 在“宏名称”框中键入名称,如打开对话框,然后单击“确定”。 |
5. | 单击“添加新操作”旁边的下拉箭头,然后单击“OpenForm”。您将使用此操作打开先前创建的参数窗体。 |
“OpenForm”操作随即出现,并显示一组参数。
6. | 如下表所示设置操作参数。 |
参数 |
设置 |
窗体名称 |
输入赋予参数窗体的名称。 |
视图 |
窗体 |
数据模式 |
编辑 |
窗口模式 |
对话框 |
7. | 单击“添加新操作”旁边的下拉箭头,然后单击“If”。 |
8. | 在“If”操作中,在“If”旁边的框中键入 Not IsLoaded,后跟您赋予报表参数窗体的名称,名称括在引号和括号内。例如,如果窗体名为“日期范围”,那么键入 Not IsLoaded("日期范围")。 |
9. | 在“If”操作中,单击“添加新操作”旁边的下拉箭头,然后单击“CancelEvent”。 |
10. | 保存并关闭宏。 |
11. | 重复步骤 1 到 3 创建新宏。为新宏命名,如“关闭对话框”。 |
12. | 单击“添加新操作”旁边的下拉箭头,然后单击“CloseWindow”。此操作将由查询用来关闭参数窗体。 |
13. | 如下表所示设置操作参数。 |
参数 |
设置 |
对象类型 |
窗体 |
对象名称 |
输入赋予参数窗体的名称。 |
保存 |
否 |
14. | 保存并关闭宏。 |
15. | 重复步骤 1 到 3 创建另一个新宏。为新宏命名,如“确定”。 |
16. | 单击“添加新操作”旁边的下拉箭头,然后单击“SetValue”。此操作将用来在用户单击“确定”时,隐藏报表参数窗体。 |
17. | 如下表所示设置操作参数。 |
参数 |
设置 |
项目 |
[可见] |
表达式 |
否 |
18. | 重复步骤 1 到 3 创建另一个新宏。为新宏命名,如“取消”。 |
19. | 单击“添加新操作”旁边的下拉箭头,然后单击“CloseWindow”。此操作将用来在用户单击“取消”时,关闭参数窗体。 |
20. | 如下表所示设置操作参数。 |
参数 |
设置 |
对象类型 |
窗体 |
对象名称 |
输入赋予参数窗体的名称。 |
保存 |
否 |
1. | 从“设计”视图中重新打开参数窗体。 |
2. | 确保在“设计”选项卡上的“控件”组中,未选中“使用控件向导”。 |
3. | 在“设计”选项卡上的“控件”组中,单击“按钮”。 |
4. | 将指针放在窗体上的文本框下面,然后拖动鼠标创建“确定”命令按钮。 |
5. | 如果属性表不可见,请按 F4 显示该表。 |
6. | 如下表所示设置“确定”按钮的属性。 |
属性 |
设置 |
名称 |
确定 |
标题 |
确定 |
默认 |
是 |
OnClick |
输入宏的名称,例如,“日期范围.确定”。 |
7. | 创建一个“取消”命令按钮并如下表所示设置其属性。 |
属性 |
设置 |
名称 |
取消 |
标题 |
取消 |
OnClick |
输入宏的名称,例如,“日期范围.取消”。 |
8. | 保存并关闭窗体。 |
1. | 在“设计”视图中打开查询。 |
2. | 输入数据的条件。使用 Forms 对象、窗体名称,以及控件 (控件:允许用户控制程序的图形用户界面对象,如文本框、复选框、滚动条或命令按钮等。可使用控件显示数据或选项、执行操作或使用户界面更易阅读。)的名称: |
✍ | 例如,在 Access 数据库(.accdb 或 .mdb)中,对于名为“日期范围”的窗体,使用下面的表达式在查询中引用名为“开始日期”和“结束日期”的控件: |
Between [Forms]![日期范围]![开始日期] And [Forms]![日期范围]![结束日期]