Access 2003完整教程:表达式的示例

Microsoft Access 的许多操作中都要使用表达式,包括创建计算控件、查询、筛选条件、默认值、有效性规则和宏的条件。通常,创建表达式最简捷的方法就是找到类似的表达式示例,然后对它进行修改。

窗体、报表和数据访问页中使用的表达式示例

处理和计算日期的示例

下表列出了可在窗体、报表和数据访问页上的计算控件中使用的表达式示例。

表达式说明
=Date()使用Date函数显示当前日期,显示时用 mm-dd-yyyy 形式,其中 mm 是月份(1 到 12),dd 是日期(1 到 31),yyyy 则是年份(1980 到 2099)。
=Format(Now(), "ww")使用Format函数显示当前日期在该年中是第几个星期,其中 ww 为 1 到 53。
=DatePart("yyyy", [订购日期])使用DatePart函数显示“订购日期”字段值的四位年份值。
=DateAdd("y", -10, [应付日期])使用DateAdd函数显示“应付日期”字段值前 10 天的日期值。
=DateDiff("d", [订购日期], [发货日期])使用DateDiff函数显示“订购日期”和“发货日期”字段值之间相差的天数。

注释

有关处理文本值的示例

下表列出了可在窗体、报表和数据访问页上的计算控件中使用的表达式示例。

表达式说明
=“N/A”显示 N/A。
=[名字]&" "&[姓氏]显示“姓氏”字段和“名字”字段的值,两者之间以空格隔开。
=Left([产品名称], 1)使用Left函数显示“产品名称”字段值的第一个字符。
=Right([AssetCode], 2)使用Right函数显示“资产代码”字段值的最后两个字符。
=Trim([地址])使用Trim函数显示“地址”字段的值,并且删除首尾的空格。
=IIf(IsNull([地区]),[城市]&" "& [邮政编码],[城市]&" "&[地区]&" "& [邮政编码])如果“地区”值为Null则使用IIf函数显示“城市”和“邮政编码”字段的值,否则显示“城市”、“地区”和“邮政编码”字段的值,中间以空格分隔。

注释

处理数学运算的示例

下表列出了可在窗体、报表和数据访问页上的计算控件中使用的表达式示例。

表达式说明
= [小计] + [运费]“小计”和“运费”字段值的总和。
=[到货日期]-[发货日期]“到货日期”和“发货日期”字段值的差。
=[价格] * 1.06“价格”字段值的 1.06 倍(“价格”值增加 6 %)。
=[数量] * [价格]“数量”和“价格”字段值的乘积。
=[雇员总计]/[国家/地区总计]“雇员总计”和“国家/地区总计”字段值的比值。

注释

条件表达式示例

下表列出了可在窗体、报表和数据访问页上的计算控件中使用的表达式示例。

表达式说明
=IIf([确认] = "是","订单已确认","订单没有确认")如果“确认”字段的值为“是”则显示“订单已确认”消息,否则显示“订单没有确认”。
=IIf(IsNull([国家/地区])," ",[国家/地区])如果“国家/地区”字段值为Null则显示空字符串,否则显示“国家/地区”字段的值。
=IIf(IsNull([地区]),[城市]&" "& [邮政编码], [城市]&" "&[地区]&" " &[邮政编码])如果“地区”字段值为 Null 则显示“邮政编码”和“城市”字段的值,否则显示“城市”、“地区”和“邮政编码”字段的值。
=IIf(IsNull([到货日期] - [发货日期]),"检查相差日期",[到货日期] - [发货日期])如果“到货日期”减去“发货日期”的值为 Null 则显示“检查相差日期”消息,否则显示“到货日期”和“发货日期”字段值之差。

注释

聚合函数和域聚合函数的示例

注释不能在数据访问页中使用聚合函数和域聚合函数。此外,也不能在Microsoft Access 项目 (.adp)中使用域聚合函数。

使用聚合函数的表达式的示例

表达式说明
=Avg([运费])使用Avg函数显示“运费”控件的平均值。
=Count([订单ID])使用Count函数显示“订单ID”控件中的记录数。
=Sum([销售额])使用Sum函数显示“销售额”控件值的总和。
=Sum([数量] * [价格])使用Sum函数显示“数量”和“价格”控件值的乘积总和。
=[销售额] / Sum([销售额]) * 100显示销售额百分比,即“销售额”控件值与所有“销售额”控件值的总和的比值。

注释如果控件的“格式”属性设置为“百分比”,则不要包含 *100。

使用域聚合函数的表达式的示例

表达式说明
=DLookup("[联系人姓名]", "[供应商]", "[供应商ID] = Forms![供应商ID]")使用DLookup函数显示当“供应商”表的“供应商ID”字段值等于活动窗体上的“供应商ID”控件值时的“联系人姓名”字段值。
=DLookup("[联系人姓名]", "[供应商]", "[供应商ID] = Forms![新供应商]![供应商ID]")使用DLookup函数显示当“供应商”表的“供应商ID”字段等于“新供应商”窗体中的“供应商ID”控件值时的“联系人姓名”字段值。
=DSum("[订单金额]", "[订单]", "[客户ID] = 'RATTC'")使用DSum函数显示“订单”表中“客户ID”字段值为 RATTC 时的“订单金额”字段值的总和。

注释

在查询和筛选中使用表达式示例

用于检索记录的条件示例

取值范围(>、<、>=、<=、<> 或 Between...And)

表达式结果
> 234对于“数量”字段,大于 234 的数字
< 1200.45对于“单价”字段,小于 1200.45 的数字
>= "Callahan"对于“姓氏”字段,从 Callahan 直至字母表结尾的所有姓氏
Between #2/2/1999# And #12/1/1999#对于“订货日期”字段,1999 年 2 月 2 日至 1999 年 12 月 1 日之间的日期 (ANSI-89)
Between '2/2/1999' And '12/1/1999'对于“订货日期”字段,1999 年 2 月 2 日至 1999 年 12 月 1 日之间的日期 (ANSI-92)

不匹配的值 (Not)

表达式结果
Not "美国"对于“货主国家/地区”字段,已发货给美国以外国家/地区的订单
Not 2对于 ID 字段,其 ID 不等于 2 的雇员
Not T*对于“姓氏”字段,其名称不以字母“T”打头的雇员 (ANSI-89)
Not T%对于“姓氏”字段,其名称不以字母“T”打头的雇员 (ANSI-92)

列表值 (In)

表达式结果
In("加拿大", "英国")对于“货主国家/地区”字段,已发货给加拿大或英国的订单
In(法国, 德国, 日本)对于“国家/地区名称”字段,居住在法国或德国或日本的雇员

文本、部分和匹配值

表达式结果
"伦敦"对于“发货城市”字段,已发货给伦敦的订单
"伦敦" Or "休斯敦"对于“发货城市”字段,已发货给伦敦或休斯敦的订单
>="N"对于“公司名称”字段,已发货给其名称以字母 N 到 Z 开头的公司的订单
Like "S*"对于“发货名称”字段,已发货给其名称以 S 开头的客户的订单 (ANSI-89)
Like "S%"对于“发货名称”字段,已发货给其名称以 S 开头的客户的订单 (ANSI-92)
Right([订单 ID], 2) = 99对于“订单 ID”字段,其 ID 值以 99 结尾的订单
Len([公司名]) > Val(30)对于“公司名称”字段,其名称超过 30 个字符的公司的订单

字段的部分值 (Like)

表达式结果
Like "S*"对于“发货名称”字段,已发货给其名称以字母 S 开头的客户的订单 (ANSI-89)
Like "S%"对于“发货名称”字段,已发货给其名称以字母 S 开头的客户的订单 (ANSI-92)
Like "*Imports"对于“货主名称”字段,运往其名称以“Imports”结尾的客户的订单 (ANSI-89)
Like "%Imports"对于“货主名称”字段,运往其名称以“Imports”结尾的客户的订单 (ANSI-92)
Like "[A-D]*"对于“货主名称”字段,运往其名称以字母 A 到 D 打头的客户的订单 (ANSI-89)
Like "[A-D]%"对于“货主名称”字段,运往其名称以字母 A 到 D 打头的客户的订单 (ANSI-92)
Like "*ar*"对于“货主名称”字段,运往其名称包含字母序列“ar”的客户的订单 (ANSI-89)
Like "%ar%"对于“货主名称”字段,运往其名称包含字母序列“ar”的客户的订单 (ANSI-92)
Like "Maison Dewe?"对于“发货名称”字段,已发货给客户的订单,其客户名称以“Maison”作为名称的第一部分,并具有五个字母长的第二名称,且其中前四个字母是“Dewe”而最后的字母为未知的 (ANSI-89)
Like "Maison Dewe_"对于“发货名称”字段,已发货给客户的订单,其客户名称以“Maison”作为名称的第一部分,并具有五个字母长的第二名称,且其中前四个字母是“Dewe”而最后的字母为未知的 (ANSI-92)

日期

表达式结果
#2/2/2000#对于“发货日期”字段,于 2000 年 2 月 2 日发货的订单 (ANSI-89)
'2/2/2000'?对于“发货日期”字段,于 2000 年 2 月 2 日发货的订单 (ANSI-92)
Date()对于“到货日期”字段,日期为今天的订单
Between Date( ) And DateAdd("M", 3, Date( ))对于“到货日期”字段,到货日期为今天至从今天起三个月之间的订单
< Date( )- 30对于“订货日期”字段,已超过 30 天的订单
Year([订货日期]) = 1999对于“订货日期”字段,订货日期在 1999 年内的订单
DatePart("q", [订货日期]) = 4对于“订货日期”字段,日期为第四季度的订单
DateSerial(Year ([订货日期]), Month([订货日期]) + 1, 1) - 1对于“订货日期”字段,日期为每月最后一天的订单
Year([订货日期]) = Year(Now()) And? Month([订货日期]) = Month(Now())对于“订货日期”字段,日期为当年当月的订单

空字段的值(Null或零长度字符串)

表达式结果
Is Null对于“发货地区”字段,客户的“发货地区”字段为Null(空)的订单
Is Not Null对于“发货区域”字段,其“发货”字段包含值的客户的订单

注意
对于“传真”字段,显示没有传真机的客户的订单,用“传真”字段中的零长度字符串值而不是 Null(空)值来表明。

域聚合函数的结果

表达式结果
> (DStDev("[运费]", "订单") + DAvg("[运费]", "订单"))对于“运费”字段,运费大于平均值与运费标准偏差之和的订单
>DAvg("[单位数量]", "订单明细")对于“单位数量”字段,其订购数量高于平均订单数量的产品

作为条件的子查询结果

表达式结果
(SELECT [单价] FROM [产品] WHERE [产品名称] = "Aniseed Syrup")对于“单价”字段,其价格与 Aniseed Syrup 的价格相同的产品
> (SELECT AVG([单价]) FROM [产品])对于“单价”字段,其单价高于平均价的产品
> ALL (SELECT [工资] FROM [雇员] WHERE ([头衔] LIKE "*经理*") OR ([头衔] LIKE "*副总裁*"))对于“薪金”字段,比头衔为“经理” 或“副总裁”的雇员的工资高的每位销售代表的工资
> ALL (SELECT AVG([单价] * [单位数量]) FROM [订单明细])对于 OrderTotal: [单价] * [单位数量]计算字段,其总计大于平均订单值的订单

计算字段所用的表达式示例

处理文本值

表达式结果
全名: [名字] & " " & [名字]在“全名”中显示“名字”字段和“姓氏”字段的值,中间用空格分隔。
地址2:[城市] & " " & [地区] & " " & [邮政编码]在“地址2”字段中显示“城市”、“地区”和“邮政编码”字段的值,用空格分隔。
ProductInitial: Left([产品名], 1)在 ProductInitial 字段中显示“产品名”字段中值的第一个字符
TypeCode: Right([AssetCode], 2)在 TypeCode 字段中显示 AssetCode 字段中值的后两个字符
AreaCode: Mid([Phone], 2, 3)在 AreaCode 字段中,显示自 Phone 字段中值的第二个字符起的头三个字符

进行数学运算

表达式结果
PrimeFreight: [运费] * 1.1在 PrimeFreight 字段中显示外加 10 个百分点的运费。
订购量: [单位数量] * [单价]在“订购量”字段中显示“单位数量”与“单价”相乘的积
交付周期: [到货日期] - [发货日期]在“交付周期”字段中显示“到货日期”字段值与“发货日期”字段值之差
TotalStock: [UnitsInStock] + [UnitsOnOrder]在 TotalStock 字段中显示 UnitsInStock 字段值与 UnitsOnOrder 字段值的和
运费百分比: Sum([运费])/Sum([小计]) *100在“运费百分比”字段中显示每一小计中货物运费的百分比,用“运费”字段的数值总和除以“小计”字段的数值总和。

必须在设计网格中显示“总计”行,而且该字段的“总计”单元格必须设为“表达式”。

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

SumofUnits: Nz([股票量], 0) + Nz([订单量], 0)在“SumofUnits”字段中显示所有库存量订购量的总和。

如果在表达式中使用算术运算符(+-*/),且表达式中某一字段的数值为Null,则整个表达式的结果将为Null。例如,如果在使用的表达式中,某一字段的部分记录具有Null值,可以利用Nz函数将Null值转换为零。

处理和计算日期

表达式结果
时间间隔: DateDiff("d", [订货日期], [发货日期])在“时间间隔”字段中显示订货日期与发货日期之间的天数
YearHired: DatePart("yyyy", [雇用日期])在“受雇年份”字段中显示每个雇员的受雇年份
MonthNo: DatePart("M",? [订购日期])在 MonthNo 字段中显示月份
PriorDate: Date( ) - 30在 PriorDate 字段中显示在当前日期之前 30 天的日期

使用 SQL 和域聚合函数

表达式结果
Count(*)使用Count函数计算查询中的记录数,包括具有Null(空)字段的记录。
运费百分比: Sum([运费])/Sum([小计]) *100在“运费百分比”字段中显示每一小计中货物运费的百分比,用“运费”字段的数值总和除以“小计”字段的数值总和。

必须在设计网格中显示“总计”行,而且该字段的“总计”单元格必须设为“表达式”。

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

AverageFreight: DAvg("[运费]", "[订单]")在 AverageFreight 字段中,显示合并在一个总计查询中的所有记录给出的平均折扣

使用Null

表达式结果
CurrentCountry: IIf(IsNull([国家/地区]), " ", [国家/地区])如果“国家/地区”字段值为Null,则在 CurrentCountry 字段中显示空字符串,否则显示“国家/地区”字段的值。
交付周期: IIf(IsNull([到货日期] - [发货日期]), "请检查丢失的日期", [到货日期] - [发货日期])如果“到货日期”或“发货日期”字段的值为Null,则在“交付周期”字段中显示“请检查丢失的日期”信息,否则,将显示差值
SixMonthSales: Nz([Qtr1Sales], 0) + Nz([Qtr2Sales], 0)先使用Nz函数将Null值转换为零,然后在 SixMonthSales 字段中显示第一季和第二季组合销售字段的总计。

使用子查询

表达式结果
类别: (SELECT [类别名] FROM [类别] WHERE [产品].[类别 ID] = [类别].[类别 ID])如果“类别”表的“类别 ID”与“产品”表的“类别 ID”相同,则在“类别”字段中显示“类别名”。

在更新查询中使用的表达式示例

对要更新的字段,请在查询设计网格中的“更新到”单元格上使用下列表达式:

表达式结果
"Saleperson"将文本值改为 Salesperson
#8/10/99#将日期值改为 10-Aug-99
将“是/否”字段中的“否”数值改为“是”
"PN" & [PartNumber]将“PN”添加到每个指定部件编号的开头
[单价] * [数量]计算“单价”和“数量”的乘积
[运货费] * 1.5增加百分之五十的“运货费”金额
DSum("[数量] * [单价]",
"订单明细", "[产品ID]=" &? [产品ID])
当前表中的“产品ID”与“订单明细”表中的“产品ID”匹配时,会根据“单价”和“数量”的乘积更新销售总额
Right([ShipPostalCode], 5)截掉最左侧的几个字符,只留最右侧的五个字符
IIf(IsNull([单价]), 0, [单价])在“单价”字段中将Null值改为零 (0)

在 SQL 语句中使用的表达式示例

可以在SQL 语句中的许多地方使用表达式,如下列示例所示。表达式以加粗文本显示。

表达式结果
SELECT [名字], [姓氏] FROM [雇员] WHERE[姓氏] = "Davolio";显示姓氏为 Davolio 的雇员对应的“姓氏”与“名字”字段中的值。
SELECT [产品ID], [产品名称] FROM [产品] WHERE[类别ID] = Forms![新产品]![类别ID];对于“产品”表中“类别ID”值与打开着的“新产品”窗体中指定的“类别ID”值匹配的记录,显示“产品”表“产品ID”与“产品名称”字段的值。
SELECTAvg([成交价])AS [平均成交价] FROM [成交订单明细] WHERE[成交价] > 1000;在“平均成交价”字段中显示“成交价”字段值大于 1,000 的订单的平均成交价。
SELECT [类别ID],Count([产品ID])AS [产品ID 数量]
FROM [产品] GROUP BY [类别ID] HAVINGCount([产品ID]) > 10;
在“产品ID 数量”的字段中,显示产品数量超过 10 的类别的产品总数。

默认值表达式的示例

表达式默认字段值
11
"MT"MT
"New York, N.Y."New York, N.Y.(请注意,如果该值包含标点符号,必须将其放在引号中)
" "零长度字符串
Date( )当前日期
=Yes在计算机的本地语言中显示“是”。

宏条件表达式的示例

可以在宏条件中使用任何计算结果为 True/False 或“是/否”的表达式。如果条件的值为 True 或“是”,就会运行该宏。

提示

若要让 Microsoft Access 暂时忽略某个操作,请输入 False 作为条件。暂时忽略某个操作有助于找出宏中的问题。

使用下列表达式执行该操作的条件
[城市]="上海"“上海”是运行该宏的窗体中“城市”字段的值。
DCount ("[订单ID]", "订单")>35“订单”表的“订单ID”字段的项数超过 35。
DCount ("*", "订单明细", "[订单ID]=Forms![订单]![订单ID]")>3“订单明细”表中的“订单ID”字段值与“订单”窗体的“订单ID”字段值匹配,“订单明细”表中满足这一条件的记录超过 3 条。
[发货日期] Between #2-Feb-2001# And #2-Mar-2001#执行此宏的窗体上的“发货日期”字段值在 2001 年 2 月 2 日和 2001 年 5 月 2 日之间。
Forms![产品]![库存量]<5“产品”窗体的“库存量”字段的值小于 5。
IsNull([名字])运行该宏的窗体上的“名字”字段值是Null(没有值)。这个表达式等价于:[名字] IsNull
[国家/地区]="UK" And Forms![销售总额]![订货总数]>100运行该宏的窗体上的“国家/地区”字段值是 UK,且在“销售总数”窗体内的“订货总数”字段值大于 100。
[国家/地区] In ("法国", "意大利", "西班牙") And Len ([邮政编码])<>5运行该宏的窗体上“国家/地区”字段值是法国、意大利或西班牙,且邮政编码的字符长度不等于 5。
MsgBox("确认更改?",1)=1MsgBox函数显示“确认更改?”的对话框中单击“确定”。如果在对话框中单击了“取消”,Microsoft Access 将忽略该操作。

上页:Access 2003完整教程:导出数据或数据库对象 下页:Access 2003完整教程:在字段中查找或替换值

Access 2003完整教程:表达式的示例

Access 2003完整教程:在字段中查找或替换值Access 2003完整教程:Access 2003 入门
Access 2003完整教程:导入或链接数据和对象Access 2003完整教程:Access 规格
Access 2003完整教程:使用键盘管理关系Access 2003完整教程:在 Access 中使用辅助功能
Access 2003完整教程:修改筛选 (MDB)Access 2003完整教程:字段、控件和对象的命名指南
Access 2003完整教程:在“数据表”视图中使用快捷键导航Access 2003完整教程:在“窗体”视图中使用快捷键导航
Access 2003完整教程:保护 Access 数据库中的 Visual Basic for Applications 代码 (MDB)Access 2003完整教程:使用用户级安全机制帮助保护 Access 数据库及其对象 (MDB)
Access 2003完整教程:发布网页Access 2003完整教程:更新指向图片或对象的链接
Access 2003完整教程:删除数据访问页顶部的占位符文字Access 2003完整教程:恢复初始的工具栏、按钮和命令设置
Access 2003完整教程:运行宏Access 2003完整教程:保护 Microsoft Access 项目 (ADP)
Access 2003完整教程:Access 安全概述 (MDB)Access 2003完整教程:使用“设置用户级安全机制向导”帮助保护数据库 (MDB)
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号