创建表达式
本文介绍如何在 Microsoft Office Access 中创建和使用表达式。可以使用表达式来执行许多在 Microsoft Office Excel 中使用公式执行的相同任务。本文向您介绍如何根据要执行的任务来使用表达式。
本文内容
表达式是以下全部或部分的组合:内置的或用户定义的函数、标识符、运算符和常量。每个表达式的计算结果均为单个值。
例如,以下表达式包含全部四种元素:
=Sum([购买价格])*0.08
在此示例中,Sum() 是内置函数,[购买价格] 是标识符,* 是数学运算符,0.08 是常量。此表达式可在窗体页脚或报表页脚中的文本框中用于计算一组项目的营业税。
表达式可能会比此示例复杂得多或简单得多。例如,以下布尔表达式(计算结果为 True 或 False 的表达式)只包括运算符和常量:
>0
此表达式在与大于 0 的数字进行比较时返回 True,在与小于 0 的数字进行比较时返回 False。您可以在控件或表字段的“有效性规则”属性中使用此表达式,以确保只输入正值。
在 Access 中,表达式在很多地方用于执行计算、操作字符或测试数据。表、查询、窗体、报表和宏都具有接受表达式的属性。例如,可以在控件的“控件来源”和“默认值”属性中使用表达式,还可以在表字段的“有效性规则”属性中使用表达式。此外,在为事件过程或模块编写 Microsoft Visual Basic for Applications (VBA) 代码时,使用的表达式通常与在 Access 对象(如表或查询)中使用的表达式类似。
下面几节介绍表达式的最常见使用方法:
在 Access 2010 中,重新设计了表达式生成器以便更加易于使用。下面是您在此版本中会注意到的一些更改:
✍ | 智能感知 智能感知功能已添加到您可以输入表达式的几乎所有上下文。这意味着,在您开始键入标识符或函数时,Access 会显示适合您所在的上下文的可用标识符和函数的列表。您可以继续键入以调整该列表,或选择一项来填写它。这大大加快了键入表达式的过程,并帮助确保您创建的表达式的准确性。 |
在您使用新的 Web 发布功能构建 Web 数据库时,智能感知尤其有用。只有某些函数与 Web 数据库兼容,智能感知可防止您使用不兼容的函数。
有关 Web 数据库的详细信息,请参阅文章生成可在 WEB 上共享的数据库。
✍ | 快速提示 在智能感知显示标识符和函数的列表时,您可以单击此列表中的每一项来查看该项的简短说明。 |
✍ | 快速信息 在表达式生成器中键入完整函数名称时,Access 会立即弹出一个小框,其中显示表达式的语法。这可帮助您记起函数需要哪些参数(如果有)以及采用什么顺序。在表达式框中键入每个参数时,Access 会在快速信息显示中加粗它,以便您始终知道您在参数列表中的位置。 |
注释 这些功能也可在您可以键入表达式的大多数上下文中使用,即使您不使用“表达式生成器”对话框也是如此。
除了这些新功能外,还重新设计了“表达式生成器”对话框本身:
✍ | 可以单击“<< 更少”或“更多 >>”来控制显示“表达式生成器”对话框的范围。 |
✍ | 在调整“表达式生成器”对话框的大小后,新大小会在您的 Access 会话期间保留,从而使您不必每次打开该对话框时都要调整大小。 |
✍ | 删除了运算符按钮行,从而使对话框更加整洁。 |
使用表达式作为控件的数据源时,您所创建的控件就是计算控件。例如,假定您有一个报表显示了多个库存记录,您要在报表页脚中创建一个总计来对报表上的所有行项目求和。
若要计算总计,请在报表页脚中放置一个文本框控件,然后将该文本框的 ControlSource 属性设置为以下表达式:
=Sum([table_field])
在本例中,table_field 是包含小计值的字段的名称。该字段可以驻留在表或查询中。Sum 函数计算记录源中一组值的总计。
以下过程说明如何在文本框控件中输入表达式。
1. | 在导航窗格中,右键单击要更改的窗体,然后单击快捷菜单上的“布局视图”或“设计视图”。 |
2. | 选择要向其中输入表达式的控件。 |
3. | 如果属性表尚未显示,请按 F4 来显示它。 |
4. | 若要手动创建表达式,请在属性表中的“数据”选项卡上,单击文本框的 ControlSource 属性,然后键入 =,后跟表达式的其余部分。例如,若要计算如上所示的小计,请键入 =Sum([table_field]),务必以您字段的名称替换 table_field。 |
5. | 若要使用表达式生成器创建表达式,请单击属性框中的“生成”按钮 。 |
完成表达式后,属性表将与下图类似:
可以使用表达式来定义查询中的条件。然后 Access 将只返回与条件匹配的那些行。例如,假定您要查看其发货日期在 2010 年的前三个月的所有订单。若要输入条件,请在查询的“日期/时间”列的“条件”单元格中键入以下表达式。此示例使用名为 ShippedDate 的“日期/时间”列。若要定义日期范围,请按以下方式输入条件:
Between #1/1/2010# And #3/31/2010#
ShippedDate 列将与下图类似。
对于订单表中的每个记录,如果 ShippedDate 列中的值在您指定的日期范围内,则查询输出中将包括该记录。请注意,在表达式中用井号 (#) 将日期括起来。Access 将井号内的值视为“日期/时间”数据类型。通过将这些值视为日期/时间数据,您可以对它们执行计算,例如从一个日期减去另一个日期。
1. | 在导航窗格中,右键单击要更改的查询,然后单击快捷菜单上的“设计视图”。 |
2. | 在要输入条件的列的“条件”单元格中单击。 |
3. | 若要手动创建表达式,请键入条件表达式。 |
注释 不要在条件表达式的前面加上 = 运算符。
4. | 若要使用表达式生成器创建表达式,请在“设计”选项卡上的“查询设置”组中,单击“生成器” 。 |
提示 若要在较大的区域中编辑表达式,请将光标放在“条件”单元格中,然后按 Shift+F2 来显示“缩放”框:
假定您在设计一个查询,希望显示涉及查询中其他字段的计算的结果。若要创建计算字段,请在查询的“字段”行的空白单元格中输入表达式。例如,如果您的查询包含“数量”字段和“单价”字段,可以通过在查询的“字段”行中输入以下表达式将两个字段相乘来创建计算字段“总价”。
总价: [数量] * [单价]
使表达式以文本 Extended Price: 开头可将新列命名为 Extended Price。此名称通常称为别名。如果您没有提供别名,Access 会创建一个,例如 Expr1。
在运行查询时,Access 会对每行执行计算,如下图所示:
1. | 在导航窗格中,右键单击要更改的查询,然后单击快捷菜单上的“设计视图”。 |
2. | 单击要在其中创建计算字段的列中的“字段”单元格。 |
3. | 若要手动创建表达式,请键入表达式。 |
注释 请不要在条件表达式前面加上 = 运算符,而要使表达式以描述性标签开头,后跟一个冒号。例如,键入 Extended Price: 会为创建名为 Extended Price 的计算字段的表达式提供标签。然后,在冒号后面为表达式输入条件。
4. | 若要使用表达式生成器创建表达式,请在“设计”选项卡上的“查询设置”组中,单击“生成器”。 |
在 Access 2010 中,可以在表中创建计算字段,而无需另外使用查询来执行计算。
注释
✍ | 计算不能包括其他表或查询中的字段。 |
✍ | 计算结果是只读的。 |
若要创建计算字段,请执行下列操作:
1. | 通过在导航窗格中双击表来打开它。 |
2. | 水平滚动到表中最右边的一列,然后单击“单击以添加”列标题。 |
3. | 在出现的列表中,单击“计算字段”,然后单击结果所需的数据类型。 |
Access 会显示表达式生成器。
4. | 开始键入此字段所需的计算,例如: |
[数量] * [单价]
注释 没有必要在表达式前面加等号 (=)。
5. | 单击“确定”。 |
Access 会添加计算字段,然后突出显示字段标题,以便您可以键入字段名称。
6. | 为计算字段键入名称,然后按 Enter。 |
表达式非常适用于在向数据库中输入数据时对数据进行验证。在表中,可以创建两种验证:字段验证规则和记录验证规则,前者可防止用户在单个字段中输入无效数据,后者可防止用户创建不满足所输入的条件的记录。这两种验证规则都是使用表达式创建的。
例如,假定您有一个名为“库存”的表,其中包含一个名为“存货数量”的字段,而且您希望设置一个规则来强制用户输入大于或等于零的值。换句话说,库存决不可为负数。您可以在“存货数量”字段中使用以下表达式作为字段验证规则来实现此目的:
>=0
使用以下过程来输入字段验证规则或记录验证规则:
1. | 在导航窗格中,双击要更改的表。 |
Access 将在数据表视图中打开该表。
2. | 对于字段验证规则,选择要更改的字段。 |
3. | 在“字段”选项卡上的“字段验证”组中,单击“验证”,然后单击“字段验证规则”或“记录验证规则”。 |
Access 会显示表达式生成器。
4. | 开始键入所需的条件。例如,对于要求所有值都大于或等于零的字段验证规则,请键入以下内容: |
>=0
注释 不要在表达式前面加上等号 (=)。
验证规则表达式是布尔表达式,这意味着它们的计算结果为 True 或 False。验证规则的计算结果必须为 True 才能接受该值。在此示例中,如果您为“存货数量”字段输入小于零的值,则表达式的计算结果将为 False,Access 不会接受该值。如果尚未按下节所述输入验证消息,则 Access 会显示自己的消息来指示该字段的验证规则禁止您输入的值。
为使您的数据库更加便于使用,可以输入自定义验证消息。它们会替代 Access 在数据与验证规则不匹配时显示的常规消息。可以使用自定义验证消息来提供有助于用户输入正确数据的特定信息,例如“‘存货数量’值不能为负数”。使用以下过程来创建验证消息:
1. | 在导航窗格中,双击要更改的表。 |
Access 将在数据表视图中打开该表。
2. | 对于字段验证消息,选择向其添加了验证规则的字段。 |
3. | 在“字段”选项卡上的“字段验证”组中,单击“验证”,然后单击“字段验证消息”或“记录验证消息”。 |
4. | 在“输入验证消息”对话框中,键入您希望在数据与验证规则不匹配时显示的消息,然后单击“确定”。 |
注释 验证规则不适用于 Web 数据库中的控件。改用字段或记录验证规则,如上一节中所述。
除了表字段和记录外,控件也可以具有可接受表达式的“有效性规则”属性。例如,假定您使用窗体输入报表的日期范围,并希望确保开始日期不早于 2010 年 1 月 1 日。您可以对在其中输入开始日期的文本框的“有效性规则”和“验证文本”属性进行如下设置:
属性 |
设置 |
有效性规则 |
>=#1/1/2010# |
验证文本 |
不能输入早于 2010 年 1 月 1 日的日期。 |
如果尝试输入早于 2010 年 1 月 1 日的日期,将出现一条消息,显示“验证文本”属性中的文本。如果没有在“验证文本”属性框中输入任何文本,则 Access 会显示常规消息。单击“确定”后,Access 将返回到文本框。
提示 为表字段设置验证规则会在整个数据库中执行该规则,而无论在哪里修改该字段。而为窗体上的控件设置验证规则只会在使用该窗体时才会执行该规则。如果希望为不同用户建立不同的验证规则,为表字段和窗体上的控件分别设置验证规则会很有用。
1. | 在导航窗格中,右键单击要更改的窗体或报表,然后单击快捷菜单上的“设计视图”或“布局视图”。 |
2. | 右键单击要更改的控件,然后单击快捷菜单上的“属性”。 |
Access 将显示控件的属性表。
3. | 单击“全部”选项卡,然后单击“有效性规则”属性框。 |
4. | 键入表达式,或单击属性框中的“生成”按钮 ,以使用表达式生成器创建表达式。 |
注释 不要在表达式的前面加上 = 运算符。
5. | 若要自定义在用户输入的数据与验证规则不匹配时显示的文本,请在“验证文本”属性中键入所需文本。 |
可以使用表达式来为表中字段指定默认值。例如,假定您希望在添加新记录时自动将日期和时间插入到名为“订单日期”的字段中。为此,您可以使用下面的表达式:
Now()
1. | 在导航窗格中,双击要更改的表。 |
Access 将在数据表视图中打开该表。
2. | 选择要更改的字段。 |
3. | 在“字段”选项卡上的“属性”组中,单击“默认值”。 |
Access 会显示“表达式生成器”对话框。
4. | 在框中键入您的表达式,确保表达式以等号 (=) 开头。 |
注释 如果将控件绑定到表字段,并且控件和表字段都具有默认值,则控件的默认值优先于表字段的默认值。
使用表达式的另一个常见位置是控件的“默认值”属性。控件的“默认值”属性的行为与表中字段的“默认值”属性的行为类似。例如,若要将当前日期用作文本框的默认值,可以使用下面的表达式:
Date()
此表达式使用 Date 函数返回当前日期,而不是返回时间。如果将文本框绑定到了表字段,并且该字段具有默认值,则控件的默认值优先于表字段的默认值。通常最好为表中字段设置“默认值”属性。这样,如果您使几个来自不同窗体的控件基于相同的表字段,则会对每个控件应用相同的默认值,从而帮助确保每个窗体上的数据输入一致。
1. | 在导航窗格中,右键单击要更改的窗体或报表,然后单击快捷菜单上的“设计视图”或“布局视图”。 |
2. | 选择要更改的控件。 |
3. | 如果属性表尚未显示,请按 F4 来显示它。 |
4. | 单击属性表上的“全部”选项卡,然后单击“默认值”属性框。 |
5. | 键入表达式,或单击属性框中的“生成”按钮 ,以使用表达式生成器创建表达式。 |
在某些情况下,您可能希望仅当特定条件为 True 时才执行宏内的一个操作或一系列操作。例如,假定您希望仅当文本框中的值大于或等于 10 时才运行宏操作。若要设置此规则,请在宏内的 If 块中使用表达式来定义宏内的条件。
在此示例中,假定文本框名为“项目”。设置条件的表达式为 [项目]>=10。
1. | 在导航窗格中,右键单击要更改的宏,然后单击快捷菜单上的“设计视图”。 |
2. | 单击要修改的 If 块,或从“操作目录”窗格中添加 If 块。 |
3. | 单击 If 块的第一行。 |
4. | 在框中键入条件表达式,或单击表达式框旁边的“生成”按钮 来启动表达式生成器。 |
注释 键入的表达式必须是布尔表达式,即它的计算结果为 True 或 False。If 块内的宏操作只在条件计算结果为 True 时运行。
可以使用“分组、排序和汇总”窗格来为报表数据定义分组级别和排序顺序。最常见的是,按照您从列表中选择的字段进行分组或排序,但如果您希望按照计算值进行分组或排序,则可以输入表达式。
分组是将包含重复值的列组合在一起的过程。例如,假定数据库包含不同城市办事处的销售信息,并且数据库中的一个报表名为“城市销售额”。提供该报表数据的查询按城市值对数据进行分组。这种类型的分组可以使信息更易于阅读和理解。
而排序是将查询结果中的行(记录)按顺序排列的过程。例如,您可以按其主键值(或另一个字段中的另一组值)的升序或降序对记录进行排序,也可以按一个或多个字符的指定顺序(例如字母顺序)对记录进行排序。
1. | 在导航窗格中,右键单击要更改的报表,然后单击快捷菜单上的“布局视图”或“设计视图”。 |
2. | 在“设计”选项卡上的“分组和汇总”组中,单击“分组和排序”。 |
在报表下方会显示“分组、排序和汇总”窗格。
3. | 若要向报表中添加分组级别,请单击“添加组”。 |
4. | 若要向报表中添加排序顺序,请单击“添加排序”。 |
窗格中会显示新组级别或排序顺序,还会显示提供报表数据的字段列表。下图说明典型的新组级别(按类别分组)和排序顺序(按制造商排序),以及包含可用于分组和排序的字段列表:
5. | 在可用字段列表下,单击“表达式”来启动表达式生成器。 |
6. | 在表达式生成器的表达式框(上部的框)中输入要使用的表达式。表达式一定要以等号 (=) 运算符开头。 |
1. | 在导航窗格中,右键单击要更改的报表,然后单击快捷菜单上的“布局视图”或“设计视图”。 |
2. | 单击要更改的组级别或排序顺序。 |
3. | 单击“分组形式”(对于分组级别)或“排序依据”(对于排序顺序)旁边的向下箭头。 |
将出现包含可用字段的列表。
4. | 在包含字段的列表的底部,单击“表达式”以启动表达式生成器。 |
5. | 在表达式生成器的表达式框(上部的框)中键入表达式。表达式一定要以等号 (=) 运算符开头。 |