在 Access 2010 中的表设计中使用计算列

Office 可视操作方法

**摘要:**了解如何使用 Access 2010 在表设计中创建计算列,使计算传播到所有基于表的对象。

上次修改时间: 2015年3月9日

适用范围: Access 2010 | Access Services | Office 2010

**发布时间:**2010 年 8 月

**供稿人:**Ken Getz,MCW Technologies, LLC(该链接可能指向英文页面)

概述

虽然 Access 始终支持查询中的计算列,但有时您可以在表中执行计算,以便能在任何基于该表的对象中使用计算字段。此外,SharePoint 支持其表中的计算;由于 Access 和 SharePoint 之间的集成,Access 必须支持 Access 表中的同一类计算。Access 2010 中的表中的计算列提供了一项新功能,旨在帮助最终用户和开发人员快速生成更易于维护的应用程序。

例如,有一个包含书名的表,该表中的每一行均包含有关一本书籍的信息,其中包括该书籍的标题、作者相关信息等。虽然该表存储了作者的名字和姓氏,但在任何可能要使用书籍信息的情况下,您可能还必须具有作者的全名。如果该表本身可包含此信息,则会很有用。此外,您可能还希望根据书名对表进行分类。由于许多书名都以"A"、"An"或"The"开头,因此您很可能需要忽略这些单词,并在根据书名进行排序时不使用它们。将计算列用于作者的全名和可排序书名可能会很有用。此直观操作方法演示如何创建这些计算列。

请考虑备选方法 - 当表中没有计算列时,最终用户可在其整个应用程序中的多个位置创建这些相同的计算。即使是开发人员也可能需要在其整个应用程序中的多个位置定义类似的表达式。当然,反复创建类似的表达式会导致出现错误。将表达式放置在表中的最低的可能位置可减少此类问题。

编码

若要查看 Access 2010 中的表中的计算列,请先在数据库中创建一个名为"Book"的新表。通常,若要创建计算字段,您必须创建一个新列并将其类型指定为"计算"(见图 1)。创建该列后,Access 会呈现表达式生成器,如图 2 所示。(不过,您可能已避免对 Access 中的其他任务使用表达式生成器,因为您可能会发现,可使用表达式生成器更轻松地编写代码,以便创建实际简化任务的计算字段。)

图 1 演示如何选择"计算"字段类型。

图 1. 选择"计算"字段类型

选择计算字段类型

图 2 演示如何使用表达式生成器来帮助创建计算字段。

图 2. 使用表达式生成器创建计算字段

使用表达式生成器创建计算字段

例如,若要演示如何创建 FullName 字段,请首先在"Book"表中创建三个文本字段,分别名为"FirstName"、"MiddleInitial"和"LastName"。保存该表,并创建一个名为"FullName"的新计算列,然后在表达式生成器中创建以下表达式。

[FirstName] & " " & 
([MiddleInitial] + " ") & 
[LastName]

(表达式生成器依赖已保存版本的表中的字段 - 因此,您必须先保存该表,然后再尝试使用表达式生成器创建计算字段。)请注意,此表达式使用 空 传播 - 也就是说,如果 MiddleInitial 不为 空 ,则该表达式将包括 MiddleInitial 字段,且后跟一个空格。如果 MiddleInitial 为 空 ,则使用 + 运算符连接字段和空格将导致整个表达式为 空 。这样一来,如果 MiddleInitial 为 空 ,则不会产生额外的空格。向该表添加几个行,并插入带中间名首字母和不带中间名首字母的姓名。FullName 字段应准确反映书籍作者的全名。

创建更复杂的计算

创建可排序标题字段需要执行更多操作,尽管它使用的概念与上一示例使用的概念相同。在本示例中,将创建名为"Title"的文本列,然后保存该表。添加一个名为"SortableTitle"的新计算列,然后使用表达式生成器创建以下表达式。

IIf(Left([Title],2)="A ",
 Mid([Title],3,Len([Title])-2),
 [Title])

此表达式会将书名左边的两个字符与"A"进行比较,并在必要时从该标题的开头去除"A"。如果前面的字符与"A"不匹配,则表达式将使用原始标题。

> [!NOTE] >

虽然 Mid 方法的第三个参数在 VBA 中是可选的,但计算字段会要求您提供所有参数值。

打开表,并输入以"A"开头的标题值,您将在 SortableTitle 字段中看到计算值。

若要扩展计算以包含以"An"开头的书籍,请通过单击"表达式"属性右侧的"生成"按钮来修改表达式,如图 3 所示。

图 3 演示如何通过单击"生成器"按钮来修改表达式。

图 3. 单击"生成器"按钮来修改表达式

单击"生成器"按钮以修改表达式

在表达式生成器中,修改现有表达式,使其与以下代码示例类似。

IIf(Left([Title],2)="A ",
 Mid([Title],3,Len([Title])-2),
 IIf(Left([Title],3)="An ",
  Mid([Title],4,Len([Title])-3),
  [Title]))

将书籍添加到以"An"开头的表中,并验证表达式是否正常工作。最后,再一次修改表达式,并添加对以"The"开头的书籍的支持。

IIf(Left([Title],2)="A ",
 Mid([Title],3,Len([Title])-2),
 IIf(Left([Title],3)="An ",
  Mid([Title],4,Len([Title])-3),
  IIf(Left([Title],4)="The ",
   Mid([Title],5,Len([Title])-4),
   [Title])))

添加以"The"开头的书名,并验证计算字段是否按预期方式工作。

读取

有些人争论说,在表中添加计算字段违反了规范化规则,在一些情况下,他们是对的。但在某些情况下,打破这些规则很有意义:当您知道您在每个基于表的对象中需要计算时,当您知道表达式无法随时间更改时,或当您在表中使用计算可使数据更加清楚时,请使用该功能。此外,在 Access 2003 或 Access 2007 中,您始终能在查询中包含计算。这样一来就需要您将所有窗体和报表基于查询而非表 - 最终用户可能会漏掉此要点,因此,如果最终用户要创建自己的窗体和报表,则最好是考虑在表中使用计算字段。

请注意,计算字段无法调用用户定义的函数,而只能调用内置函数。此外,您必须为调用的方法提供所有参数,即使这些参数是可选的也是如此。

如果使用计算字段,则请注意,早期版本的 Access 将无法打开表 - 在使用此新功能之前,请确认您仅在 Access 2010 中需要表。

观看

观看视频

观看视频(该链接可能指向英文页面)

时长:10:51 | 大小:10.9 MB | 类型:WMV

浏览

关于作者

Ken Getz 是 MCW Technologies 的高级顾问。他是 ASP.NET Developers Jumpstart(《ASP.NET 开发人员入门》,Addison-Wesley,2002)、Access Developer's Handbook(《Access 开发人员手册》,Sybex,2001)和 VBA Developer's Handbook, 2nd Edition(《VBA 开发人员手册第 2 版》,Sybex,2001)的合著者。