嗨,我正在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)