您好我在MS Access中创建一个表来存储学校中孩子的详细信息。
我有一个名为YearGroup的字段,需要根据他们的出生日期计算他们所在的学年,以及他们是否已经上下移动一年。
即。如果表达方式认为他们已经六岁,那么他们应该被安排在第二年。如果他们被推倒或推迟一年,他们应该在第一年或第三年(这是基于名为YearModifier的表中的另一个字段)。
我目前的代码是:
Year(Now()) - IIf(Month([DOB]) > 8, Year([DOB]) + 6 + [YearModifier], Year([DOB]) + 5 + [YearModifier])
我的问题是Year(Now())
作为无效表达式返回。许多网站已经认识到使用Now()函数,我也尝试过Date()但Access似乎没有接受(版本是2010)。
发生了什么事?如何在计算字段表达式中获取今天的日期?
由于
答案 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)