MS Access:以计算字段表达式

时间:2015-09-02 16:38:27

标签: date ms-access ms-access-2010

您好我在MS Access中创建一个表来存储学校中孩子的详细信息。

我有一个名为YearGroup的字段,需要根据他们的出生日期计算他们所在的学年,以及他们是否已经上下移动一年。

即。如果表达方式认为他们已经六岁,那么他们应该被安排在第二年。如果他们被推倒或推迟一年,他们应该在第一年或第三年(这是基于名为YearModifier的表中的另一个字段)。

我目前的代码是:

Year(Now()) - IIf(Month([DOB]) > 8, Year([DOB]) + 6 + [YearModifier], Year([DOB]) + 5 + [YearModifier])

我的问题是Year(Now())作为无效表达式返回。许多网站已经认识到使用Now()函数,我也尝试过Date()但Access似乎没有接受(版本是2010)。

发生了什么事?如何在计算字段表达式中获取今天的日期?

由于

3 个答案:

答案 0 :(得分:1)

尝试使用表格中的所有字段创建查询,然后添加额外字段YearGroup: Year(Now()) - IIf(Month([DOB]) > 8, Year([DOB]) + 6 + [YearModifier], Year([DOB]) + 5 + [YearModifier])

似乎日期函数不能用于表格中的计算列。

答案 1 :(得分:0)

您可以使用它来获取年份,这可能适用于字段表达式:

格式(日期()" YYYY&#34)

关于你的功能(我已经重写了很多)

Year( Now() ) 
- Year([DOB])
- IIf(  Month([DOB]) > 8
      , 6 
      , 5 )
+ [YearModifier]

然而!

我认为你不想使用now()。哪一年他们在当前学年开始的9月1日依赖于他们的年龄不是现在!好的,现在可以使用到2015年12月31日,所以我必须假设你不会在这个日期之后使用这个功能!

如果你是,你必须使用2015年而不是现在()。

好吗?

答案 2 :(得分:0)

您可以使用简单的函数计算孩子的年龄:

Public Function AgeSimple( _
  ByVal datDateOfBirth As Date) _
  As Integer

' Returns the difference in full years from datDateOfBirth to current date.
'
' Calculates correctly for:
'   leap years
'   dates of 29. February
'   date/time values with embedded time values
'
' DateAdd() is used for check for month end of February as it correctly
' returns Feb. 28. when adding a count of years to dates of Feb. 29.
' when the resulting year is a common year.
' After an idea of Markus G. Fischer.
'
' 2007-06-26. Cactus Data ApS, CPH.

  Dim datToday  As Date
  Dim intAge    As Integer
  Dim intYears  As Integer

  datToday = Date
  ' Find difference in calendar years.
  intYears = DateDiff("yyyy", datDateOfBirth, datToday)
  If intYears > 0 Then
    ' Decrease by 1 if current date is earlier than birthday of current year
    ' using DateDiff to ignore a time portion of datDateOfBirth.
    intAge = intYears - Abs(DateDiff("d", datToday, DateAdd("yyyy", intYears, datDateOfBirth)) > 0)
  End If

  AgeSimple = intAge

End Function

然后你的表达式将是这样的(忽略修饰符):

ClassYear:IIf(AgeSimple([DOB])> 6,2,1)