本文提供了 Access 中的许多表达式示例。 表达式结合了数学或逻辑运算符、常量、函数、表字段、控件以及计算结果为单个值的属性。 可以使用 Access 中的表达式来计算值、验证数据和设置默认值。
本文内容
窗体和报表
本节中的表提供在窗体或报表中控件内计算值的表达式示例。 若要创建计算控件,请在控件的 ControlSource 属性中(而非在表字段或查询中)输入表达式。
注意 当你使用条件格式突出显示数据时,还可以在窗体或报表中使用表达式。
文本操作
下表中的表达式使用 &(& 号)和 +(加号)运算符来组合文本字符串、内置函数以操纵文本字符串,或操作文本以创建计算控件。
表达式 |
结果 |
---|---|
="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 传播;而 & 运算符不支持。 |
页眉和页脚
使用 Page 和 Pages 在窗体或报表中显示或打印页码。 Page 和 Pages 属性仅在打印或打印预览时可用,因此不显示于窗体或报表的属性表中。 通常情况下,在窗体或报表的页眉或页脚部分放置文本框,然后使用如下表所示的表达式,即可使用这些属性。
有关在窗体和报表中使用页眉和页脚的详细信息,请参阅在窗体或报表中插入页码一文。
表达式 |
结果 |
---|---|
=[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 控件值之和所得的销售额百分比。 如果将该控件的“格式”属性设置为“百分比”,请勿在表达式中包含 *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 函数传递 3 个参数:第 1 个参数是必定返回 True 或 False 值的表达式。 第 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]) |
使用 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 运算符,提供起始和结束日期并将查询结果限制为在这两个日期之间装运的订单。
下面提供在查询中使用的表达式示例。
文本操作
下表中的表达式使用 & 和 + 运算符来组合文本字符串、内置函数以操作文本字符串,或操作文本以创建计算字段。
表达式 |
说明 |
---|---|
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 字段中值之和。 若要使用此表达式,必须将选择查询转换为总计查询,因为需要在设计网格中使用“总计”行;并且必须将此字段的“总计”单元格设置为“表达式”。 有关创建总计查询的详细信息,请参阅使用查询对数据进行求和一文。 如果将该字段的“格式”属性设置为“百分比”,请勿包含 *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 的字段,然后将 Freight 字段中值之和除以 Subtotal 字段中值之和,计算每项小计中运费的百分比。 (此示例使用 Sum 函数。) 此表达式必须用于总计查询。 如果将该字段的“格式”属性设置为“百分比”,请勿包含 *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 到 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]) |
总计高于平均订单价值的订单。 |
更新查询
可使用更新查询修改数据库中一个或多个现有字段中的数据。 例如,可替换或完全删除值。 下表演示在更新查询中使用表达式的一些方法。 对于要更新的字段,在查询设计网格的“更新到”行中使用以下表达式。
有关创建更新查询的详细信息,请参阅创建和运行更新查询一文。
字段 |
表达式 |
结果 |
---|---|---|
标题 |
"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 语句
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 |
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 将忽略操作。 |