在本章中,我们将使用内置函数。在Access中,有近一百个内置函数,几乎不可能覆盖它们中的每一个。在本章中,我们将介绍基本结构,语法,使用一些更流行的函数,以及缺陷,以便您可以自己去探索一些其他功能。
函数
函数是执行任务或计算并返回结果的VBA过程。函数通常可以在查询中使用,但也有其他地方可以使用函数。
您可以使用表格属性中的函数,例如,如果要为日期/时间字段指定默认值,您可以使用日期或Now函数从系统调用当前日期/时间信息,并自动输入该值。
您还可以在创建计算字段时使用表达式中的函数,或者使用窗体或报表控件中的函数。即使在宏参数中也可以使用函数。
函数可以很简单,不需要调用其他信息,或者只需引用表或查询中的一个字段。
另一方面,它们也可以变得相当复杂,有多个参数,字段引用,甚至嵌套在另一个函数内的其他函数。
让我们来看看使用内置函数的一些例子。
日期和时间函数
现在让我们了解日期和时间函数 -
Date()函数旨在返回当前系统日期。此函数不需要任何函数参数或附加信息。所有你需要做的是写函数的名称和那些打开和关闭括号。
有两个非常相似的内置函数Time()和Now()。
Time()函数仅返回当前系统时间,Now()函数返回当前系统日期和时间。
根据您要跟踪,存储或查询的数据,您有三个内置的,易于使用的功能来帮助执行该任务。
让我们现在打开你的数据库,并使用查询设计创建一个新查询,并添加tblProjects和tblTasks。

从tblProjects中添加ProjectName,从tblTasks中添加TaskTitle,StartDate和DueDate,然后运行查询。

您现在可以看到所有项目的所有不同任务。如果要查看当前进行中的项目任务,那么我们必须使用Date()函数来指定一个条件,以查看在当天日期或之后开始的项目。
现在让我们指定StartDate下面的条件。

标准以大于符号的运算符开头,后跟等于符号,然后是日期函数。
当我们运行此查询时,所有任务将在今天或将来发生,如以下屏幕截图所示。

这是一个如何使用Date()函数作为查询条件的示例。
比如,这个查询需要在本周开始的日期更灵活。
我们有几个不同的任务,本周开始,没有显示在这个当前列表,因为我们的标准。它看起来等于今天或以上的开始日期。
如果我们想要查看本周开始的任务,那些任务尚未完成或今天应该完成,那么让我们回到设计视图。
在这里,我们将为这些标准添加一些额外的信息。事实上,我们希望它大于或等于今天的日期减去7天。

如果我们输入减7并运行查询,您可以看到本周开始的任务。

DateDiff()函数
DateDiff()函数是另一个非常流行的日期/时间函数。 DateDiff函数返回VariAnt(long),指定两个指定日期之间的时间间隔数换句话说,它计算两个日期之间的差异,并且您可以选择函数计算该差异的间隔。。
比如,现在我们想计算作者的年龄。为此,我们首先需要创建一个新查询并添加authors表,然后添加FirstName,LastName和BirthDay字段。

我们可以通过计算他们的出生日期或生日与今天的日期之间的差异来计算人的年龄。
让我们尝试使用DateDiff函数在一个新的领域。

让我们称之为Age,后跟一个冒号,然后写DateDiff函数。
- DateDiff函数的第一个函数参数是interval,因此键入“yyyy”。
- 下一个函数参数是我们要计算的第一个日期,在这种情况下,它将是Birthday字段。
- 第三个函数参数是今天的日期。
现在,运行查询,您将看到显示每个作者年龄的新字段。

Format()函数
Format()函数返回一个字符串,其中包含根据格式表达式中包含的指令格式化的表达式。下面是可以在Format()function.ss中使用的用户定义格式的列表
设置 | 描述 |
---|---|
yyyy | Year |
q | Quarter |
m | Month |
y | Day of year |
d | Day |
w | Weekday |
ww | Week |
h | Hour |
n | Minute |
s | Second |
现在让我们返回到您的查询,并使用Format()函数在同一个字段中添加更多字段。

键入格式化函数。第一个函数参数将是一个表达式,它几乎可以是任何东西。现在让我们把生日字段作为第一个,下一个是写我们的格式。在这种情况下,我们需要月,日,日,日。在引号中写入“mmdd”,然后运行查询。

它现在采取从生日字段的日期,4是月和17是天。
我们在下面的字段中添加“mmm”和“mmmm”而不是“mmdd”,如下面的截图所示。

运行查询,你会看到的结果如下面的屏幕截图。

在下一个字段中,它从该生日的月份名称返回前3个字符,在最后一个字段中,您将获得完整的月份名称。
要查看到从生日开始的一个月,我们要添加“yyyy”,如下面的截图所示。

让我们再次运行查询。

你现在将看到月份后面跟一个逗号,然后是年份。
IIf() 函数
IIf()函数是“Immediate If”的缩写,此函数将表达式计算为true或false,并为每个返回值。它最多有三个函数参数,所有这些参数都是必需的。
- 第一个参数是要评估的任何表达式。
- 下一个参数代表真正的部分,如果第一个表达式为真,它可以是一个值或一个表达式。
- 最后一个参数是你想要返回的,如果你的表达式是假的。
例子
让我们举一个简单的例子。我们将使用查询设计创建一个新查询,并添加tblAuthors表,然后添加以下字段。

您现在可以看到我们有三个字段 - FirstName,MiddleInitial,LastName,然后是这个连接字段,它将所有三个字段拉在一起。让我们运行您的查询以查看此查询的结果。

现在,你可以看到查询的结果,但你也会注意到一些记录没有中间的初始。例如,Joyce Dyer记录没有中间的初始值,但在FullName字段中,您将看到真正不需要的周期。所以,回到设计视图。在这里,我们将使用IIf函数以不同的方式连接名称。

让我们在另一个字段中写入名称,并将其命名为FullName1,然后键入IIf函数。
Immediate If函数的第一个函数参数将是你的表达式。在表达式中,我们将看到中间的初始字段是空白还是为空。
下一个参数是真正的部分。所以,如果中间的initial是null,那么我们将显示FirstName和LastName。
现在,对于我们的错误部分 - 如果MiddleInitial不为null,那么我们将显示FirstName,MiddleInitial和LastName。
现在让我们运行查询,您将看到如下面截图所示的结果。
