表达式的示例

本文提供了 Access 中的表达式示例。表达式结合了数学或逻辑运算符、常量、函数、表字段、控件以及计算结果为单个值的属性。Access 中的表达式可用于计算值、验证数据及设置字段或控件的默认值。

注意: 本文介绍创建表达式的基本步骤,并非使用 Access 所提供工具创建表达式的全面指导。有关创建表达式的详细信息,请参阅构建表达式一文。

本文内容

理解表达式

窗体和报表中所用表达式示例

查询和筛选器中所用表达式示例

默认值表达式示例

字段验证规则表达式示例

宏条件表达式示例

理解表达式

在 Access 中,术语“表达式”意义等同于“公式”。表达式由众多元素构成,可单独或结合使用这些元素生成结果。这些元素包括:

  • 标识符 - 窗体或报表中表字段或控件的名称或其属性

  • 运算符,例如 +(加号)或 -(减号)

  • 函数,例如 SUMAVG

  • 常量(不会更改的值),例如文本字符串或不是由表达式计算得出的数字。

可通过多种方法使用表达式,例如执行计算、检索控件的值或向查询提供条件等。

有关表达式使用方法及其用途的详细信息,请参阅构建表达式一文。

返回页首

窗体和报表中所用表达式示例

本节中的表提供在窗体或报表中控件内计算值的表达式示例。若要创建计算控件,请在控件的 ControlSource属性中(而非在表字段或查询中)输入表达式。

以下步骤介绍如何在现有窗体或报表的文本框控件中输入表达式。

创建计算控件

  1. 在导航窗格中,右键单击要更改的窗体或报表,然后单击快捷菜单上的“设计视图按钮图像

  2. 在窗体或报表中,右键单击要更改的文本框控件(而非与该文本框相关联的标签),然后单击快捷菜单上的“属性”。

  3. 根据需要单击“所有”选项卡或“数据”选项卡。这两个选项卡都提供“控件来源”属性。

  4. 单击“控件来源”属性旁边的对话框,然后键入表达式。例如,可复制并粘贴下一节的表中“表达式”列内的表达式。

  5. 关闭属性表。

用于组合或操纵文本的表达式

下表中的表达式使用 &(& 号)和 +(加号)运算符来组合文本字符串、内置函数以操纵文本字符串,或操作文本以创建计算控件。

表达式

结果

="N/A"

显示 N/A。

=[FirstName] & " " & [LastName]

显示名为 FirstName 和 LastName 的表字段中的值。此示例中,使用了 & 运算符来组合 FirstName 字段、空格字符(括在引号内)和 LastName 字段。

=Left([ProductName], 1)

使用 Left 函数显示名为 ProductName 的字段或控件中值的第一个字符。

=Right([AssetCode], 2)

使用 Right 函数显示名为 AssetCode 的字段或控件中值的最后 2 个字符。

=Trim([Address])

使用 Trim 函数显示 Address 控件的值,删除所有前导或尾随空格。

=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode])

使用 IIf 函数,如果 Region 控件中的值为 null,则显示 City 和 PostalCode 控件的值;否则显示 City、Region 和 PostalCode 控件的值(用空格分隔)。

=[City] & (" " + [Region]) & " " & [PostalCode]

使用 + 运算符和 null 传播,如果 Region 控件中的值为 null,则显示 City 和 PostalCode 字段或控件的值;否则显示 City、Region 和 PostalCode 字段或控件的值(用空格分隔)。

Null 传播意味着如果表达式的任何组件为 null,则整个表达式也为 null。+ 运算符支持 null 传播;而 & 运算符不支持。

页眉和页脚的表达式

使用 PagePages 在窗体或报表中显示或打印页码。PagePages 属性仅在打印或打印预览时可用,因此不显示于窗体或报表的属性表中。通常情况下,在窗体或报表的页眉或页脚部分放置文本框,然后使用如下表所示的表达式,即可使用这些属性。

有关在窗体和报表中使用页眉和页脚的详细信息,请参阅在窗体或报表中插入页码一文。

表达式

示例结果

=[Page]

1

="Page " & [Page]

第 1 页

="Page " & [Page] & " of " & [Pages]

Page 1 of 3

=[Page] & " of " & [Pages] & " Pages"

1 of 3 Pages

=[Page] & "/" & [Pages] & " Pages"

1/3 Pages

=[Country/region] & " - " & [Page]

UK - 1

=Format([Page], "000")

001

="Printed on: " & Date()

Printed on:12/31/07

用于执行算术运算的表达式

可使用表达式将两个或更多字段或控件中的值相加、相减、相乘、相除。可以使用表达式对日期执行算术运算。例如,假设有名为 RequiredDate 的日期/时间表字段。在该字段或绑定到该字段的控件中,表达式 = [RequiredDate] - 2 返回 RequiredDate 字段中值所对应两天前的日期/时间。

表达式

结果

=[Subtotal]+[Freight]

Subtotal 和 Freight 字段或控件值的和。

=[RequiredDate]-[ShippedDate]

RequiredDate 和 ShippedDate 字段或控件值之间的时间间隔。

=[Price]*1.06

Price 字段或控件的值与 1.06 的积(Price 值增加 6%)。

=[Quantity]*[Price]

Quantity 和 Price 字段或控件值的积。

=[EmployeeTotal]/[CountryRegionTotal]

EmployeeTotal and CountryRegionTotal 字段或控件值的商。

注意: 在表达式中使用算术运算符(+-*/)时,如果表达式中某一控件的值为 null,则整个表达式的结果为 null,这称为 Null 传播。如表达式中所用控件之一的任何记录具有 null 值,可使用 Nz 函数将 null 值转换为 0 以避免 Null 传播(例如 =Nz([Subtotal])+Nz([Freight]))。

有关该函数的详细信息,请参阅 Nz 函数一文。

用于引用其他字段或控件中值的表达式

有时需要其他位置(例如另一窗体或报表的字段或控件中)的值。可使用表达式返回另一字段或控件中的值。

下表列出了可用于窗体中计算控件的表达式示例。

表达式

结果

=Forms![Orders]![OrderID]

Orders 窗体中 OrderID 控件的值。

=Forms![Orders]![Orders Subform].Form![OrderSubtotal]

Orders 窗体名为 Orders Subform 的子窗体中 OrderSubtotal 控件的值。

=Forms![Orders]![Orders Subform]![ProductID].Column(2)

Orders 窗体名为 Orders Subform 的子窗体中的多列列表框 ProductID 中第 3 列的值。(请注意,0 指第 1 列,1 指第 2 列,依此类推)。

=Forms![Orders]![Orders Subform]![Price] * 1.06

Orders 窗体名为 Orders Subform 的子窗体中 Price 控件的值与 1.06 的积(Price 控件的值增加 6%)。

=Parent![OrderID]

当前子窗体的主窗体或父窗体中 OrderID 控件的值。

下表中的表达式展示了在报表上使用计算控件的一些方法。这些表达式引用 Report 属性

有关该属性的详细信息,请参阅 Report 属性一文。

表达式

结果

=Report![Invoice]![OrderID]

名为“Invoice”的报告中名为“OrderID”的控件的值。

=Report![Summary]![Summary Subreport]![SalesTotal]

Summary 报表名为 Summary Subreport 的子报表中 SalesTotal 控件的值。

=Parent![OrderID]

当前子报表的主报表或父报表中 OrderID 控件的值。

用于计数、求和以及求平均值的表达式

可使用名为聚合函数的函数类型计算一个或多个字段或控件的值。例如,可计算报表中组页脚的组合计,或计算窗体中行项目的订单小计。还可以计算一个或多个字段中的项目数或计算平均值。

下表中的表达式描述了使用 AvgCountSum 等函数的几种方法。

表达式

说明

=Avg([Freight])

使用 Avg 函数,显示名为“Freight”的表字段或控件值的平均数。

=Count([OrderID])

使用 Count 函数显示 OrderID 控件中的记录数。

=Sum([Sales])

使用 Sum 函数显示 Sales 控件的值之和。

=Sum([Quantity]*[Price])

使用 Sum 函数显示 Quantity 和 Price 控件值的积之和。

=[Sales]/Sum([Sales])*100

显示由某一 Sales 控件值除所用 Sales 控件值之和所得的销售额百分比。

注意: 如果将该控件的“格式”属性设置为“百分比”,请勿在表达式中包含“*100”。

有关如何使用聚合函数及汇总字段和列中值的详细信息,请参阅使用查询求和使用查询对数据进行计数对数据表中的行进行计数显示数据表中的列总计

使用域聚合函数选择性计数、求和及查找值的表达式

需要选择性求和或计数时,请使用名为域聚合函数的函数类型。“域”包含一个或多个表中的一个或多个字段,或一个或多个窗体或报表上的一个或多个控件。例如,可将表字段中的值与窗体控件中的值进行匹配。

表达式

说明

=DLookup("[ContactName]", "[Suppliers]", "[SupplierID] = " & Forms("Suppliers")("[SupplierID]"))

使用 DLookup 函数返回 Suppliers 表中这样的 ContactName 字段的值,其所对应 SupplierID 字段的值与 Suppliers 窗体中 SupplierID 控件的值相匹配。

=DLookup("[ContactName]", "[Suppliers]", "[SupplierID] = " & Forms![New Suppliers]![SupplierID])

使用 DLookup 函数返回 Suppliers 表中这样的 ContactName 字段的值,其所对应 SupplierID 字段的值与 New Suppliers 窗体中 SupplierID 控件的值相匹配。

=DSum("[OrderAmount]", "[Orders]", "[CustomerID] = 'RATTC'")

使用 DSum 函数返回 Orders 窗体中 CustomerID 为 RATTC 的 OrderAmount 字段中值的总计。

=DCount("[Retired]","[Assets]","[Retired]=Yes")

使用 DCount 函数返回 Assets 表中 Retired 字段(Yes/No 字段)中 Yes 值的数量。

用于操纵和计算日期的表达式

跟踪日期和时间是一项基本数据库活动。例如,可计算从发票日期起已经过的天数,以计算应收帐款的帐龄。可用多种方式设置日期和时间格式,如下表所示。

表达式

说明

=Date()

使用 Date 函数以 mm-dd-yy 形式显示当前日期,其中 mm 为月份(1 到 12 月)、dd 代表日期(1 到 31 日)、yy 为年份(1980 到 2099 年)的后两位。

=Format(Now(), "ww")

使用 Format 函数显示当前日期在一年中的周数,其中 ww 代表第 1 周到第 53 周。

=DatePart("yyyy", [OrderDate])

使用 DatePart 函数显示 OrderDate 控件的四位数年份值。

=DateAdd("y", -10, [PromisedDate])

使用 DateAdd 函数显示 PromisedDate 控件值前 10 天的日期。

=DateDiff("d", [OrderDate], [ShippedDate])

使用 DateDiff 函数显示 OrderDate 和 ShippedDate 控件值之间相差的天数。

=[InvoiceDate] + 30

对日期使用算术运算,计算出 InvoiceDate 字段或控件中日期后 30 天的日期。

用于返回两个可能值中某个值的条件表达式

下表中的示例表达式使用 IIf 函数返回两个可能值中的一个。向 IIf 函数传递 3 个参数:第 1 个参数是必定返回 TrueFalse 值的表达式。第 2 个参数是该表达式为 True 时返回的值,第三个参数是该表达式为 False 时返回的值。

表达式

说明

=IIf([Confirmed] = "Yes", "Order Confirmed", "Order Not Confirmed")

使用 IIf (Immediate If) 函数,若 Confirmed 控件为 Yes 则显示消息“Order Confirmed”;否则显示消息“Order Not Confirmed”。

=IIf(IsNull([Country/region]), " ", [Country])

使用 IIfIsNull 函数,如果 Country/region 控件的值为 null 则显示空字符串;否则显示 Country/region 控件的值。

=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode])

使用 IIfIsNull 函数,如果 Region 控件中的值为 null,则显示 City 和 PostalCode 控件的值;否则显示 City、Region 和 PostalCode 字段或控件的值。

=IIf(IsNull([RequiredDate]) Or IsNull([ShippedDate]), "Check for a missing date", [RequiredDate] - [ShippedDate])

使用 IIfIsNull 函数,如果 RequiredDate 减 ShippedDate 的结果为 null,显示“Check for a missing date”;否则显示 RequiredDate 和 ShippedDate 控件日期值之间的时间间隔。

返回页首

查询和筛选器中所用表达式示例

本节包含的表达式示例可用于在查询中创建计算字段或向查询提供条件。计算字段即查询中由表达式所得的列。例如,可以计算值、组合名字和姓氏等文本值,或设置部分日期的格式。

在查询中使用条件可限制所处理的记录。例如,可使用 Between 运算符,提供起始和结束日期并将查询结果限制为在这两个日期之间装运的订单。

以下各节介绍如何向查询添加计算字段,并提供查询中可用表达式的示例。

在查询设计视图中添加计算字段

  1. 在导航窗格中,右键单击要更改的查询,然后单击快捷菜单上的“设计视图”。

  2. 在要创建计算字段的列中单击“字段”单元格。可输入字段名称后跟冒号,也可键入表达式。如果不输入名称,则 Access 将添加 Exprn:,其中 n 为序列号。

  3. 键入表达式。

    -或-

    在“设计”选项卡的“查询设置”组中,单击“生成器”启动“表达式生成器”。

    有关使用“表达式生成器”的详细信息,请参阅构建表达式一文。

用于在查询或筛选中操纵文本的表达式

下表中的表达式使用 &+ 运算符来组合文本字符串、内置函数以操作文本字符串,或操作文本以创建计算字段。

表达式

说明

FullName: [FirstName] & " " & [LastName]

创建名为 FullName 的字段,显示 FirstName 和 LastName 字段的值(用空格分隔)。

Address2: [City] & " " & [Region] & " " & [PostalCode]

创建名为 Address2 的字段,显示 City、Region 和 PostalCode 字段中的值(用空格分隔)。

ProductInitial:Left([ProductName], 1)

创建名为 ProductInitial 的字段,然后使用 Left 函数,在 ProductInitial 字段中显示 ProductName 字段中值的第一个字符。

TypeCode:Right([AssetCode], 2)

创建名为 TypeCode 的字段,然后使用 Right 函数,显示 AssetCode 字段中值的最后两个字符。

AreaCode:Mid([Phone],2,3)

创建名为 AreaCode 的字段,然后使用 Mid 函数,显示从 Phone 字段中值的第 2 个字符开始的 3 个字符。

用于在计算字段中执行算术运算的表达式

可使用表达式将两个或更多字段或控件中的值相加、相减、相乘、相除。也可以对日期执行算术运算。例如,假设有名为 RequiredDate 的日期/时间字段。表达式 =[RequiredDate] - 2 将返回 RequiredDate 字段中值之前 2 天的日期/时间值。

表达式

说明

PrimeFreight: [Freight] * 1.1

创建名为 PrimeFreight 的字段,然后在该字段中显示运费增加 10% 后的值。

OrderAmount: [Quantity] * [UnitPrice]

创建名为 OrderAmount 的字段,然后显示 Quantity 和 UnitPrice 字段中值的积。

LeadTime: [RequiredDate] - [ShippedDate]

创建名为 LeadTime 的字段,然后显示 RequiredDate 和 ShippedDate 字段中值之差。

TotalStock: [UnitsInStock]+[UnitsOnOrder]

创建名为 TotalStock 的字段,然后显示 UnitsInStock 和 UnitsOnOrder 字段中值之和。

FreightPercentage:Sum([Freight])/Sum([Subtotal]) *100

创建名为 FreightPercentage 的字段,然后显示每项小计中运费的百分比。此表达式使用 Sum 函数计算 Freight 字段中值的总和,然后再将这些总和除以 Subtotal 字段中值之和。

若要使用此表达式,必须将选择查询转换为总计查询,因为需要在设计网格中使用“总计”行;并且必须将此字段的“总计”单元格设置为“表达式”。

有关创建总计查询的详细信息,请参阅使用查询对数据进行求和一文。

如果将该字段的“格式”属性设置为“百分比”,请勿包含“*100”。

有关如何使用聚合函数及汇总字段和列中值的详细信息,请参阅使用查询求和使用查询对数据进行计数对数据表中的行进行计数显示数据表中的列总计

对计算字段中的日期进行操纵和计算的表达式

几乎所有数据库都存储和跟踪日期和时间。将表中的日期和时间字段设置为“日期/时间”数据类型,即可在 Access 中处理日期和时间。Access 可对日期执行算术计算,例如,可计算从发票日期起已经过的天数,以计算应收帐款的帐龄。

表达式

说明

LagTime:DateDiff("d", [OrderDate], [ShippedDate])

创建名为 LagTime 的字段,然后使用 DateDiff 函数,显示订单日期和装运日期之间的天数。

YearHired:DatePart("yyyy",[HireDate])

创建名为 YearHired 的字段,然后使用 DatePart 函数,显示每个员工的聘用年份。

MinusThirty:Date( )- 30

创建名为 MinusThirty 的字段,然后使用 Date 函数,显示当前日期前 30 天的日期。

使用 SQL 聚合或域聚合函数进行计数、求和及求平均值的表达式

下表中的表达式使用了聚合或汇总数据的 SQL(结构化查询语言)函数。这些函数(例如 SumCountAvg)常称为聚合函数。

除聚合函数外,Access 还提供“域”聚合函数,可用于对值进行选择性求和或计数。例如,可仅对特定区域内的值进行计数,或查找另一表中的值。域聚合函数集合包括 DSum 函数DCount 函数DAvg 函数

若要计算总计,通常需要创建总计查询。例如,按组汇总就需要使用总计查询。若要在查询设计网格中启用总计查询,请单击“视图”菜单上的“总计”。

表达式

说明

RowCount:Count(*)

创建名为 RowCount 的字段,然后使用 Count 函数计算查询中记录的数量,包括 null(空白)字段的记录。

FreightPercentage:Sum([Freight])/Sum([Subtotal]) *100

创建名为 FreightPercentage 的字段,然后将 Freight 字段中值之和除以 Subtotal 字段中值之和,计算每项小计中运费的百分比。(此示例使用 Sum 函数。)

注意: 此表达式必须用于总计查询。如果将该字段的“格式”属性设置为“百分比”,请勿包含“*100”。

有关创建总计查询的详细信息,请参阅使用查询对数据进行求和一文。

AverageFreight:DAvg("[Freight]", "[Orders]")

创建名为 AverageFreight 的字段,然后使用 DAvg 函数,计算总计查询中所有订单的平均运费。

适用于缺少信息的字段(值为 null 的字段)的表达式

此处显示的表达式适用于可能缺少信息的字段,例如包含 null(未知或未定义)值的字段。null 值很常见,例如新产品的未知价格或同事忘记添加到订单的值。查找和处理 null 值的能力对数据库操作而言至关重要,下表中的表达式介绍了处理 null 值的一些常见方法。

表达式

说明

CurrentCountryRegion:IIf(IsNull([CountryRegion]), " ", [CountryRegion])

创建名为 CurrentCountryRegion 的字段,然后使用 IIfIsNull 函数,在 CountryRegion 字段包含 null 值时显示空字符串;否则显示 CountryRegion 字段的内容。

LeadTime:IIf(IsNull([RequiredDate] - [ShippedDate]), "Check for a missing date", [RequiredDate] - [ShippedDate])

创建名为 LeadTime 的字段,然后使用 IIfIsNull 函数,在 RequiredDate 字段或 ShippedDate 字段中的值为 null 时显示消息“Check for a missing date”;否则显示两日期之差。

SixMonthSales:Nz([Qtr1Sales]) + Nz([Qtr2Sales])

创建名为 SixMonthSales 的字段,首先使用 Nz 函数将任何 null 值转换为 0,然后显示 Qtr1Sales 和 Qtr2Sales 字段中值的总和。

使用子查询创建计算字段的表达式

可使用嵌套查询(也称子查询)创建计算字段。下表中的表达式是由子查询得出计算字段的一个示例。

表达式

说明

Cat:(SELECT [CategoryName] FROM [Categories] WHERE [Products].[CategoryID]=[Categories].[CategoryID])

创建名为 Cat 的字段,如果 Categories 表中的 CategoryID 与 Products 表中的 CategoryID 相同,则显示 CategoryName。

用于定义条件和限制结果集中记录的表达式

可使用表达式为查询定义条件。Access 随后返回符合条件的行。本节中的步骤介绍有关向查询添加条件的基本信息,本节中的表提供用于匹配文本和日期值的条件示例。

向查询添加条件

  1. 在导航窗格中,右键单击要更改的查询,然后单击快捷菜单上的“设计视图按钮图像

  2. 在设计网格的“条件”行中,单击要使用的列中的单元格,然后键入条件。

    若要在较大区域中键入表达式,请按 Shift+F2 以显示“缩放”框。

    -或-

    在“设计”选项卡的“查询设置”组中,单击“生成器按钮图像 启动“表达式生成器”,并创建表达式。

注意: 创建定义条件的表达式时,请勿在表达式前使用 = 运算符。

有关使用“表达式生成器”的详细信息,请参阅构建表达式一文。

用于匹配整个或部分文本值的表达式

此表中的示例表达式演示匹配整个或部分文本值的条件。

字段

表达式

说明

ShipCity

"London"

显示发往 London 的订单。

ShipCity

"London" Or "Hedge End"

使用 Or 运算符,显示发往 London 或 Hedge End 的订单。

ShipCountryRegion

In("Canada", "UK")

使用 In 运算符显示发往 Canada 或 UK 的订单。

ShipCountryRegion

Not "USA"

使用 Not 运算符,显示发往 USA 以外国家/地区的订单。

ProductName

Not Like "C*"

使用 Not 运算符和 * 通配符,显示名称不以 C 开头的产品。

CompanyName

>="N"

显示发往名称以字母 N 到 Z 开头的公司的订单。

ProductCode

Right([ProductCode], 2)="99"

使用 Right 函数,显示 ProductCode 值以 99 结尾的订单。

ShipName

Like "S*"

显示发往名称以字母 S 开头的客户的订单。

在匹配条件中使用日期的表达式

下表中的表达式演示条件表达式中日期及相关函数的使用方法。

有关输入和使用日期值的详细信息,请参阅输入日期或时间值一文。有关在这些示例表达式中使用函数的信息,请单击各函数主题的链接。

字段

表达式

说明

ShippedDate

#2/2/2007#

显示在 2007 年 2 月 2 日 装运的订单。

ShippedDate

Date()

显示今天装运的订单。

RequiredDate

Between Date( ) And DateAdd("m", 3, Date( ))

使用 Between...And 运算符、DateAddDate 函数,显示今天和 3 个月前的今天之间下的订单。

OrderDate

< Date( ) - 30

使用 Date 函数显示 30 天前的订单。

OrderDate

Year([OrderDate])=2007

使用 Year 函数显示订单日期在 2007 年的订单。

OrderDate

DatePart("q", [OrderDate])=4

使用 DatePart 函数显示第 4 日历季度的订单。

OrderDate

DateSerial(Year ([OrderDate]), Month([OrderDate])+1, 1)-1

使用 DateSerialYearMonth 函数,显示每个月最后一天的订单。

OrderDate

Year([OrderDate])= Year(Now()) And Month([OrderDate])= Month(Now())

使用 YearMonth 函数和 And 运算符,显示本年本月的订单。

ShippedDate

Between #1/5/2007# And #1/10/2007#

使用 Between...And 运算符,显示 2007 年 1 月 5 日到 2007 年 1 月 10 日之间装运的订单。

RequiredDate

Between Date( ) And DateAdd("M", 3, Date( ))

使用 Between...And 运算符,显示今天和 3 个月前的今天之间下的订单。

BirthDate

Month([BirthDate])=Month(Date())

使用 MonthDate 函数,显示本月过生日的员工。

用于匹配缺失值 (null) 或零长度字符串的表达式

下表中的表达式适用于可能缺少信息的字段,即包含 null 值或零长度字符串的字段。null 值表示缺少信息,它不表示 0 或其他任何值。Access 支持缺少信息,因为这一概念对于数据库的完整性至关重要。现实中,信息的缺失很常见,即使只是暂时的(例如新产品待定的价格)。因此,模拟业务等现实本质的数据库必须能够将信息记录为缺失。可使用 IsNull 函数确定字段或控件是否包含 null 值,并可使用 Nz 函数将 null 值转换为 0。

字段

表达式

说明

ShipRegion

Is Null

显示 ShipRegion 字段为 null(缺失)的客户的订单。

ShipRegion

Is Not Null

显示 ShipRegion 字段包含值的客户的订单。

Fax

""

显示不使用传真机的客户的订单,这样的客户,其 Fax 字段中具有零长度字符串值而非 null(缺失)值。

使用模式匹配记录的表达式

尝试匹配遵循模式的行时,Like 运算符可提供极大的灵活性,因为可将 Like 运算符与通配符结合使用,定义 Access 要匹配的模式。例如,*(星号)通配符将匹配任意类型的字符序列,从而轻松查找以某字母开头的所有名称。例如,使用 Like "S*" 表达式可查找以字母 S 开头的所有名称。

有关详细信息,请参阅 Like 运算符一文。

字段

表达式

说明

ShipName

Like "S*"

查找 ShipName 字段中以字母 S 开头的所有记录。

ShipName

Like "*Imports"

查找 ShipName 字段中以“Imports”结尾的所有记录。

ShipName

Like "[A-D]*"

查找 ShipName 字段中以字母 A、B、C 或 D.开头的所有记录。

ShipName

Like "*ar*"

查找 ShipName 字段中包含字母序列“ar”的所有记录。

ShipName

Like "Maison Dewe?"

查找 ShipName 字段中满足以下条件的所有记录:其值的第一部分包含“Maison”,第二部分是由 5 个字母构成的字符串,该字符串前 4 个字母为“Dewe”而最后一个字母未知。

ShipName

Not Like "A*"

查找 ShipName 字段中不以字母 A 开头的所有记录。

基于域聚合函数结果匹配行的表达式

需要选择性求和、计数和求平均值时,请使用域聚合函数。例如,有时需要对特定范围内的值或计算结果为 Yes 的值进行计数。有时又需要查找并显示另一表中的值。下表中的示例表达式使用域聚合函数对一组值执行计算,并将结果用作查询条件。

字段

表达式

说明

Freight

> (DStDev("[Freight]", "Orders") + DAvg("[Freight]", "Orders"))

使用 DStDevDAvg 函数,显示运费高于运费平均值与标准偏差之和的所有订单。

Quantity

> DAvg("[Quantity]", "[Order Details]")

使用 DAvg 函数,显示订购数量高于平均订购数量的产品。

基于子查询结果进行匹配的表达式

子查询也称嵌套查询,用于计算要用作条件的值。下表中的示例表达式基于子查询返回结果匹配行。

字段

表达式

显示

UnitPrice

(SELECT [UnitPrice] FROM [Products] WHERE [ProductName] = "Aniseed Syrup")

价格与 Aniseed Syrup 相等的产品。

UnitPrice

>(SELECT AVG([UnitPrice]) FROM [Products])

单价高于平均值的产品。

Salary

> ALL (SELECT [Salary] FROM [Employees] WHERE ([Title] LIKE "*Manager*") OR ([Title] LIKE "*Vice President*"))

工资高于职位为“Manager”或“Vice President”的所有员工的每个销售代表的工资。

OrderTotal: [UnitPrice] * [Quantity]

> (SELECT AVG([UnitPrice] * [Quantity]) FROM [Order Details])

总计高于平均订单价值的订单。

用于更新查询的表达式

可使用更新查询修改数据库中一个或多个现有字段中的数据。例如,可替换或完全删除值。下表演示在更新查询中使用表达式的一些方法。对于要更新的字段,在查询设计网格的“更新到”行中使用以下表达式。

有关创建更新查询的详细信息,请参阅创建和运行更新查询一文。

字段

表达式

结果

Title

"Salesperson"

将文本值更改为 Salesperson。

ProjectStart

#8/10/07#

更改日期值为 10-Aug-07。

退休

将 Yes/No 字段中的 No 值更改为 Yes。

PartNumber

"PN" & [商品编号]

将 PN 添加到每个指定部件号的开头。

LineItemTotal

[单价] * [数量]

计算 UnitPrice 和 Quantity 的积。

运费

[运费] * 1.5

将运费增加 50%。

销售

DSum("[Quantity] * [UnitPrice]",
"Order Details", "[ProductID]=" & [ProductID])

当前表中的 ProductID 值与 Order Details 表中的 ProductID 值相等时,基于 Quantity 和 UnitPrice 的积更新总销售额。

ShipPostalCode

Right([ShipPostalCode], 5)

截断最左的字符,保留最右的 5 个字符。

UnitPrice

Nz([UnitPrice])

将 UnitPrice 字段中的 null(未定义或未知)值更改为零(0)。

用于 SQL 语句的表达式

Access 使用结构化查询语言(或称 SQL)作为查询语言。在查询设计视图中创建的每个查询也可使用 SQL 表示。若要查看任意查询的 SQL 语句,请单击“视图”菜单上的“SQL 视图”。下表显示了使用表达式的 SQL 语句示例。

使用表达式的 SQL 语句

结果

SELECT [FirstName],[LastName] FROM [Employees] WHERE [LastName]="Danseglio"

显示姓氏为 Danseglio 的员工所对应 FirstName 和 LastName 字段中的值。

SELECT [ProductID],[ProductName] FROM [Products] WHERE [CategoryID]=Forms![New Products]![CategoryID];

对于 Products 中 CategoryID 值与打开的 New Products 窗体中所指定 CategoryID 值相等的记录,显示其 ProductID 和 ProductName 字段中的值。

SELECT Avg([ExtendedPrice]) AS [Average Extended Price] FROM [Order Details Extended] WHERE [ExtendedPrice]>1000;

计算 ExtendedPrice 字段中值大于 1000 的订单的延伸价格,并将结果显示在名为 Average Extended Price 的字段中。

SELECT [CategoryID], Count([ProductID]) AS [CountOfProductID] FROM [Products] GROUP BY [CategoryID] HAVING Count([ProductID])>10;

在名为 CountOfProductID 的字段中,显示包含 10 种以上产品的类别的产品总数。

返回页首

默认值表达式示例

设计数据库时,最好向字段或控件分配默认值。随后,Access 将在创建包含字段的新纪录或创建包含控件的对象时提供默认值。下表中的表达式代表字段或控件的默认值示例。

为表中字段添加默认值

  1. 在导航窗格中,右键单击要更改的表,然后单击快捷菜单上的“设计视图”

  2. 单击要更改的字段,并单击“常规”选项卡上的“默认值”属性框。

  3. 键入表达式,或单击属性框右侧的“构建”按钮 “生成器”按钮 ,以使用“表达式生成器”创建表达式。

如果控件绑定到表中具有默认值的字段,则该控件的默认值优先。

字段

表达式

默认字段值

Quantity

1

1

Region

"MT"

MT

Region

"纽约, N.Y."

New York, N.Y.(请注意:带标点的值必须括在引号中。)

Fax

""

零长度字符串表示在默认情况下此字段应为空,而不是包含 null 值

订单日期

Date( )

当天的日期

DueDate

Date() + 60

从当日起往后 60 天的日期

返回页首

字段验证规则表达式示例

可使用表达式为字段或控件创建验证规则。随后,Access 将在该字段或控件中有输入数据时实行该规则。若要创建验证规则,请修改字段或控件的 ValidationRule 属性。还应考虑设置 ValidationText 属性,用于承载 Access 在有违验证规则时显示的文本。若不设置 ValidationText 属性,则 Access 在有违验证规则时显示默认错误消息。

向字段添加验证规则

  1. 在导航窗格中,右键单击要更改的表,然后单击快捷菜单上的“设计视图”

  2. 单击要更改的字段。

  3. 单击位于表设计器的下半部分的“验证规则”属性框。

  4. 键入表达式,或单击属性框右侧的“构建”按钮 “生成器”按钮 ,以使用“表达式生成器”创建表达式。

    注意: 创建验证规则时,请勿在表达式前使用 = 运算符。

下表中的示例演示 ValidationRule 属性的验证规则表达式和 ValidationText 属性的关联文本。

ValidationRule 属性

ValidationText 属性

<> 0

请输入非零值。

0 Or > 100

值必须为 0 或大于 100。

Like "K???"

值必须为以字母 K 开头的 4 个字符。

< #1/1/2007#

输入 2007 年 1 月 1 日前的日期。

>= #1/1/2007# And < #1/1/2008#

必须输入 2007 年的日期。

有关验证数据的详细信息,请参阅创建验证规则以验证字段中的数据一文。

返回页首

宏条件表达式示例

在某些情况下,可能需要仅在特定条件为真时才在宏中执行操作或系列操作。例如,假设希望某项操作仅在 Counter 文本框中的值为 10 时运行,请在宏的“条件”列中使用以下表达式定义条件:[Counter]=10

为宏操作添加条件

  1. 在导航窗格中,右键单击要更改的宏,然后单击快捷菜单上的“设计视图”。

  2. 如果宏设计器中未显示“条件”列,请在“设计”选项卡上的“显示/隐藏”组中单击“条件”。

  3. 单击要更改的宏操作的“条件”单元格,然后键入条件表达式。

  4. 保存更改并关闭宏。

ValidationRule 属性一样,“条件”列表达式也是条件表达式。必须解析为 True 或 False 值。仅当条件为 True 时才采取的操作。

使用此表达式执行操作

If

[City]="Paris"

运行该宏的窗体中 City 字段中的值为 Paris。

DCount("[OrderID]", "Orders") > 35

Orders 表的 OrderID 字段中有超过 35 个条目。

DCount("*", "[Order Details]", "[OrderID]=" & Forms![Orders]![OrderID]) > 3

Order Details 表中有超过 3 个条目的 OrderID 字段与 Orders 窗体中 OrderID 字段相等的。

[ShippedDate] Between #2-Feb-2007# And #2-Mar-2007#

运行该宏的窗体上 ShippedDate 字段中的值介于 2-Feb-2007 和 2-Mar-2007 之间。

Forms![Products]![UnitsInStock] < 5

Products 窗体上 UnitsInStock 字段中的值小于 5。

IsNull([FirstName])

运行该宏的窗体上的 FirstName 值为 null(没有值)。此表达式相当于 [FirstName] Is Null。

[CountryRegion]="UK" And Forms![SalesTotals]![TotalOrds] > 100

运行该宏的窗体上 CountryRegion 中的值为 UK,且 SalesTotals 窗体上 TotalOrds 字段的值大于 100。

[CountryRegion] In ("France", "Italy", "Spain") And Len([PostalCode])<>5

运行该宏的窗体上 CountryRegion 字段中的值为 France、Italy 或 Spain,且邮政编码长度不等于 5 个字符。

MsgBox("Confirm changes?",1)=1

请在 MsgBox 函数显示的对话框中单击“确定”。如果在该对话框中单击“取消”,Access 将忽略操作。

注意: 若要强制 Access 暂时忽略操作,请键入 False 作为条件。尝试查找宏中的问题时,强制 Access 暂时忽略操作可能很帮助。

返回页首

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×