表达式示例

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

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

本文内容

窗体和报表

所有窗体和报表表达式

文本操作; 其他控件中的值; 数据操作 页眉和页脚; 计数、求和和求平均值; 仅两个值的条件 算术运算; SQL 聚合函数

查询和筛选

所有查询和筛选表达式

文本操作; SQL 聚合函数; 匹配文本值;将 记录模式与 Like; 匹配 更新查询 算术运算; 查找丢失的数据; 匹配日期条件; 匹配包含 SQL 聚合的行; SQL 语句 数据操作; 包含子查询的计算字段; 包含缺失数据的字段; 匹配包含子查询的字段

表格

所有表表达式

字段默认值 字段有效性规则

宏

所有宏表达式

表单和报表

本部分中的表显示用于计算窗体或报表上控件中值的表达式。 若要创建计算控件,请在控件的属性中 ControlSource 而不是在表字段或查询中输入表达式。

注意

使用 条件格式突出显示数据时,也可以在窗体或报表中使用表达式。

文本操作

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

表达式 结果
="N/A" 显示 N/A。
=[FirstName] & " " & [LastName] 显示名为 FirstName 和 LastName 的表字段中的值。 在本示例中, & 运算符用于组合 FirstName 字段、空格字符 (用引号) 括起来)和 LastName 字段。
=Left([ProductName], 1) 使用此 Left 函数显示名为 ProductName的字段或控件中值的第一个字符。
=Right([AssetCode], 2) 使用此 Right 函数显示名为 AssetCode的字段或控件中值的最后两个字符。
=Trim([Address]) 使用此函数在 Trim 删除前导和尾随空格后显示控件的 Address 值。
=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode]) 如果控件为 null,则使用该IIf函数显示 and PostalCode 控件的CityRegion值。 否则,它将显示 、 和RegionPostalCode控件的City值(用空格分隔)。
=[City] & (" " + [Region]) & " " & [PostalCode] 使用运算符+和 null 传播,如果字段或控件中的Region值为 null,则显示 and PostalCode 控件的City值。 否则,它将显示 、 和RegionPostalCode字段或控件的City值(用空格分隔)。 Null 传播意味着如果表达式的任何部分为 null,则整个表达式为 null。 运算符支持 + null 传播,但 & 运算符不支持。

返回页首

页眉和页脚

使用 and Pages 属性在Page窗体或报表中显示或打印页码。 这些属性仅在打印或打印预览期间可用,因此不会显示在窗体或报表的属性表中。 通常,可以在窗体或报表的页眉或页脚部分放置一个文本框,然后使用如下表所示的表达式。

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

表达式 结果
=[Page] 1
="Page " & [Page] 第 1 页
="Page " & [Page] & " of " & [Pages] 第 1 页,共 3 页
=[Page] & " of " & [Pages] & " Pages" 第 1 页(共 3 页)
=[Page] & "/" & [Pages] & " Pages" 第 1 页/共 3 页
=[Country/region] & " - " & [Page] UK - 1
=Format([Page], "000") 001
="Printed on: " & Date() 打印时间:17/12/31

返回页首

算数运算

可使用表达式对两个或更多字段或控件中的值进行加减乘除运算。 可以使用表达式对日期执行算术运算。 例如,假设有名为 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 和 CountryRegionTotal 字段或控件值的商。

注意

如果在表达式中使用算术运算符 (+、 -或 */) ,并且其中一个控件为 null,则整个表达式的结果为 null。 这称为 null 传播。 如果控件可能具有 null 值,则可以通过使用 Nz 函数将 null 值转换为 0 来避免 null 传播。 例如,使用 =Nz([Subtotal])+Nz([Freight]).

返回页首

其他控件中的值

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

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

表达式 结果
=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![Invoice]![OrderID] 名为 “OrderID” 控件的值在名为 “Invoice” 的报告中。
=Report![Summary]![Summary Subreport]![SalesTotal] 在 “摘要报告” 中名为 “摘要子报告” 中子报告上的 SalesTotal 控件的值。
=Parent![OrderID] 当前子报表的主报表或父报表中 OrderID 控件的值。

返回页首

计数、求和以及求平均值

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

下表中的表达式描述了使用 Avg、Count 和 Sum 等函数的几种方法。

表达式 说明
=Avg([Freight]) 使用 Avg 函数以显示名为 “Freight" 的表字段或控件值的平均值。
=Count([OrderID]) 使用 “计数” 功能显示 OrderID 控件中的记录数。
=Sum([Sales]) 使用 Sum 函数显示 Sales 控件的值之和。
=Sum([Quantity]*[Price]) 使用 Sum 函数显示 Quantity 和 Price 控件值的积之和。
=[Sales]/Sum([Sales])*100 通过将控件的 Sales 值除以控件中 Sales 所有值之和来显示销售额百分比。 如果将 Format 该控件 Percent的属性设置为 ,请勿在表达式中包含 *100 。

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

返回页首

SQL 聚合函数

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

表达式 说明
=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") 使用 “格式函数” 显示当前日期在一年中的周数,其中 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 函数传递三个参数:第一个参数是必须返回 True OR False 值的表达式。 第 2 个参数是该表达式为 True 时返回的值,第三个参数是该表达式为 False 时返回的值。

表达式 说明
=IIf([Confirmed] = "Yes", "Order Confirmed", "Order Not Confirmed") 使用 IIf (Immediate If) 函数,如果 Confirmed 控件的值为 YesConfirmed 控件,则显示消息“Order Confirmed”;否则显示消息 "Order Not Confirmed."
=IIf(IsNull([Country/region]), " ", [Country]) 使用 IIf 和 IsNull 函数,如果 Country/region 控件的值为 null 则显示空字符串;否则显示 Country/region 控件的值。
=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode]) 使用 IIf 和 IsNull 函数,如果 Region 控件中的值为 null,则显示 City 和 PostalCode 控件的值;否则显示 City、Region 和 PostalCode 字段或控件的值。
=IIf(IsNull([RequiredDate]) Or IsNull([ShippedDate]), "Check for a missing date", [RequiredDate] - [ShippedDate]) 使用 IIf 和 IsNull 函数,如果 RequiredDate 减 ShippedDate 的结果为 null,显示“Check for a missing date”;否则显示 RequiredDate 和 ShippedDate 控件日期值之间的时间间隔。

返回页首

查询和筛选

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

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

以下部分提供了用于查询的表达式示例。

查询中的文本操作

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

表达式 说明
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 个字符。
ExtendedPrice: CCur([Order Details].[Unit Price]*[Quantity]*(1-[Discount])/100)*100 命名计算字段 ExtendedPrice,并使用 CCur 函数来计算已享受折扣的行项目总计。

返回页首

查询中的算术运算

可使用表达式对两个或更多字段或控件中的值进行加减乘除运算。 也可以对日期执行算术运算。 例如,假设有名为 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 值之和。 若要使用此表达式,请将选择查询转换为总计查询。 需要使用设计网格中的“总计”行,并将此字段Expression的“总计”单元格设置为 。 有关创建总计查询的详细信息,请参阅 使用查询对数据求和。 如果将 Format 该字段 Percent的属性设置为 ,请勿包含 *100。

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

返回页首

查询中的日期操作

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

表达式 说明
LagTime: DateDiff("d", [OrderDate], [ShippedDate]) 创建名为 LagTime 的字段,然后使用 DateDiff 函数,显示订单日期和装运日期之间的天数。
YearHired: DatePart("yyyy",[HireDate]) 创建名为 YearHired 的字段,然后使用 DatePart 函数,显示每个员工的聘用年份。
MinusThirty: Date( )- 30 创建名为 MinusThirty 的字段,然后使用 Date 函数,显示当前日期前 30 天的日期。

返回页首

查询中的 SQL 聚合函数

下表中的表达式使用 SQL 函数来聚合或汇总数据。 您经常看到诸如 Sum、 的 Count函数, Avg 这些函数被称为聚合函数。

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

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

表达式 说明
RowCount: Count(*) 创建名为 RowCount 的字段,然后使用 Count 函数计算查询中记录的数量,包括 null(空白)字段的记录。
FreightPercentage: Sum([Freight])/Sum([Subtotal]) *100 创建名为 FreightPercentage的字段,然后通过将字段中的值之和除以字段中的FreightSubtotal值之和来计算每项小计中运费的百分比。 本示例使用函数 Sum 。 此表达式必须用于总计查询。 如果将 Format 该字段 Percent的属性设置为 ,请勿包含 *100。 有关创建总计查询的详细信息,请参阅 使用查询对数据求和。
AverageFreight: DAvg("[Freight]", "[Orders]") 创建名为 AverageFreight 的字段,然后使用 DAvg 函数,计算总计查询中所有订单的平均运费。

返回页首

包含缺失数据的字段

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

表达式 说明
CurrentCountryRegion: IIf(IsNull([CountryRegion]), " ", [CountryRegion]) 创建名为 CurrentCountryRegion 的字段,然后使用 IIf和 IsNull 函数,在 CountryRegion 字段包含 null 值时显示空字符串;否则显示 CountryRegion 字段的内容。
LeadTime: IIf(IsNull([RequiredDate] - [ShippedDate]), "Check for a missing date", [RequiredDate] - [ShippedDate]) 创建名为 LeadTime 的字段,然后使用 IIf 和 IsNull 函数,在 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。

返回页首

匹配文本值

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

字段 表达式 说明
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 THROUGH 开 Z头的公司的订单。
ProductCode Right([ProductCode], 2)="99" 使用 Right 函数,显示 ProductCode 值以 结尾 99的订单。
ShipName Like "S*" 显示发往名称以字母 S开头的客户的订单。

返回页首

匹配日期条件

下表中的表达式演示条件表达式中日期及相关函数的使用方法。 有关输入和使用日期值的详细信息,请参阅设置日期和时间字段的格式一文。

字段 表达式 说明
ShippedDate #2/2/2017# 显示在 2017 年 2 月 2 日发货的订单。
ShippedDate Date() 显示今天装运的订单。
RequiredDate Between Date( ) And DateAdd("m", 3, Date( )) 使用运算符 Between...And 以及 DateAdd 和 Date 函数,显示今天和 3 个月前的今天之间下的订单。
OrderDate < Date( ) - 30 使用 Date 函数显示 30 天前的订单。
OrderDate Year([OrderDate])=2017 使用 Year 函数显示订单日期在 2017 年的订单。
OrderDate DatePart("q", [OrderDate])=4 使用 DatePart 函数显示第 4 日历季度的订单。
OrderDate DateSerial(Year ([OrderDate]), Month([OrderDate])+1, 1)-1 使用 DateSerial、Year 和 Month 函数,显示每个月最后一天的订单。
OrderDate Year([OrderDate])= Year(Now()) And Month([OrderDate])= Month(Now()) 使用 Year、Month 函数和 And 运算符,显示本年本月的订单。
ShippedDate Between #1/5/2017# And #1/10/2017# 使用运算符显示 Between...And发货日期不早于 2017 年 1 月 5 日且不晚于 2017 年 1 月 10 日。
RequiredDate Between Date( ) And DateAdd("M", 3, Date( )) 使用运算符 Between...And 显示今天和 3 个月前的今天之间下的订单。
BirthDate Month([BirthDate])=Month(Date()) 使用 Month 和 Date 函数,显示本月过生日的员工。

返回页首

查找丢失的数据

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

字段 表达式 说明
ShipRegion Is Null 显示 ShipRegion 字段为 null(缺失)的客户的订单。
ShipRegion Is Not Null 显示 ShipRegion 字段包含值的客户的订单。
Fax "" 显示不使用传真机的客户的订单,这样的客户,其 Fax 字段中具有零长度字符串值而非 null(缺失)值。

返回页首

匹配包含 Like 的记录模式

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 开头的所有记录。

返回页首

匹配包含 SQL 聚合的行

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

字段 表达式 说明
Freight > (DStDev("[Freight]", "Orders") + DAvg("[Freight]", "Orders")) 使用 DStDev 和 DAvg 函数,显示运费高于运费平均值与标准偏差之和的所有订单。
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]) 总计高于平均订单价值的订单。

返回页首

更新查询

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

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

字段 表达式 结果
标题 "Salesperson" 将文本值更改为 Salesperson。
ProjectStart #8/10/17# 将日期值更改为 10-Aug-17。
停用 Yes 将 Yes/No 字段中的 No 值更改为 Yes。
PartNumber "PN" & [PartNumber] 将 PN 添加到每个指定部件号的开头。
LineItemTotal [UnitPrice] * [Quantity] 计算 UnitPrice 和 Quantity 的积。
运费 [Freight] * 1.5 将运费增加 50%。
Sales 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 语句

结构化查询语言 (SQL) 是 Access 使用的查询语言。 在查询设计视图中创建的每个查询也可使用 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 1
Region "MT" MT
Region "New York, N.Y." New York, N.Y.(请注意:带标点的值必须括在引号中。)
Fax "" 零长度字符串表示在默认情况下此字段应为空,而不是包含 null 值
订单日期 Date( ) 当天的日期
DueDate Date() + 60 从当日起往后 60 天的日期

返回页首

字段验证规则

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

下表中的示例显示了该属性的 ValidationRule 有效性规则表达式以及该 ValidationText 属性的关联文本。

ValidationRule 属性 ValidationText 属性
<> 0 请输入非零值。
0 Or > 100 值必须为 0 或大于 100。
Like "K???" 值必须为以字母 K 开头的 4 个字符。
< #1/1/2017# 输入 2017 年 1 月 1 日前的日期。
>= #1/1/2017# And < #1/1/2008# 必须输入 2017 年的日期。

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

返回页首

宏表达式

在某些情况下,您可能希望只有在特定条件为 True 时才执行宏内的一个操作或一系列操作。 例如,假设希望仅在“计数器”文本框的值为 10 时才运行操作。 您可以使用表达式在 If 块中定义条件:

[Counter]=10

与属性一样 ValidationRule ,If 块中的表达式也是条件表达式。 必须解析为某一 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-2017# And #2-Mar-2017# 运行该宏的窗体上 ShippedDate 字段中的值介于 2-Feb-2017 和 2-Mar-2017 之间。
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 将忽略操作。

返回页首

另请参阅