MS 访问:在计算字段表达式中处理今天的日期



嗨,我正在MS Access中创建一个表来存储学校中儿童的详细信息。

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

。如果表达式认为他们是六岁,他们应该被放在第二年。如果它们向下或向上移动了一年,它们应该在第1年或第3年(这是基于表中的另一个名为YearModifier的字段)。

我现在的代码是:

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

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

怎么回事?如何在计算字段表达式中获得今天的日期?

谢谢

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

似乎不能在表的计算列中使用Date函数

您可以使用它来获取年份,这可能在字段表达式中工作:

格式(日期(),"yyyy")

关于你的功能(我稍微重写了一下)

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

!

我不认为你想现在使用()。他们在哪一年取决于他们在9月1日学年开始时的年龄,而不是现在!Ok现在将工作到2015年12月31日,所以我必须假设您将不会在此日期之后使用该功能!

如果你是,你必须使用2015而不是Now()。

好吗?

你可以用一个简单的函数来计算孩子的年龄:

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((捐赠))> 6、2、1)

相关内容

  • 没有找到相关文章