传一个附件上来,请高手看一看,作者: Henry D. Sy 时间: 2008-12-16 08:57
你干脆用天来就算
错误的原因是:你加的只是年数,而你要得到是具体到日(也就是几月几日)。
比如 2008年2月29日,今年是润年明年不是,你加1年,当然是得到 2009-02-28作者: 明镜 时间: 2008-12-16 10:05
查询的要求是,根据"开始日期"加上"年"和"月"得出结束日期,如开始日期是2007年1月1日加上1年1个月,那么结束日期就应当是2008年1月31日,如加上1年2个月就是2008年2月29日了(是计算实际的年月),
版主说的很对,因为有润年的原因,遇到2月29日就出现问题了.如开始日期为2008年2月29日加上1年应当是2009年2月28日,但查询的结果却是2009年2月27日.这说明这个问题在查询中很难做到,但在VBA中应当可以解决的,但要如何解决确是颇为困难的.作者: Henry D. Sy 时间: 2008-12-16 10:13
可以这样判断
当开始日期是2月29日,且 月字段为0 时,年数 mod 4 <>0,
则,设计你想要的结果。作者: Henry D. Sy 时间: 2008-12-16 10:15
记得,
先算增加月,然后算增加年
一般来说,只要月不为0,不会出现错误。作者: 明镜 时间: 2008-12-16 10:18
谢谢版主提供思路,能否再提供这段VBA?等待中.作者: Henry D. Sy 时间: 2008-12-16 10:35
先想要的正确结果是如何。作者: Henry D. Sy 时间: 2008-12-16 11:23
没有测试,
你测试一下,有问题再探讨
Public Function GetEndDate(dtmStartDate As Date, intYear As Integer, intMonth _
[ 本帖最后由 Henry D. Sy 于 2008-12-16 12:19 编辑 ]作者: Henry D. Sy 时间: 2008-12-16 12:21
SELECT 表.姓名, 表.开始日期, 表.年, 表.月, GetEndDate([开始日期],[年],[月]) AS 表达式1, IIf(Format([开始日期],"mm-dd")<>"02-29",DateAdd("yyyy",[年],DateAdd("m",[月],[表]![开始日期]))-1,IIf([月]=0,IIf([年] Mod 4<>0,DateAdd("yyyy",[年],DateAdd("m",[月],[表]![开始日期])),DateAdd("yyyy",[年],DateAdd("m",[月],[表]![开始日期]))-1),DateAdd("yyyy",[年],DateAdd("m",[月],[表]![开始日期]))-1)) AS 表达式2
FROM 表作者: 明镜 时间: 2008-12-16 20:05
谢了, 试了一下, 还是没用, 是否直接帮助做到Access中?作者: Henry D. Sy 时间: 2008-12-16 20:28
什么问题作者: 明镜 时间: 2008-12-16 22:34
我在窗体上做了"结束日期"的控件,把属性设为更新前,然后运行这段代码,但没显示,是我做得不对,还是其他方面有问题?请指教.作者: Henry D. Sy 时间: 2008-12-16 22:41