设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: 明镜
打印 上一主题 下一主题

[查询] 这个“结束日期”的公式如何修改?

[复制链接]
11#
 楼主| 发表于 2008-12-16 10:18:46 | 只看该作者
谢谢版主提供思路,能否再提供这段VBA?等待中.
12#
发表于 2008-12-16 10:35:16 | 只看该作者
先想要的正确结果是如何。
13#
发表于 2008-12-16 11:23:00 | 只看该作者
没有测试,
你测试一下,有问题再探讨
  1. Public Function GetEndDate(dtmStartDate As Date, intYear As Integer, intMonth _
  2.                                                                      As Integer) As Date
  3.     Dim strTemp As String
  4.     Dim dtmED As Date

  5.     strTemp = Format(dtmStartDate, "mm-dd")
  6.     dtmED = DateAdd("yyyy", intYear, DateAdd("m", intMonth, dtmStartDate)) - 1

  7.     If strTemp = "02-29" Then
  8.         If intMonth = 0 Then
  9.             If intYear Mod 4 <> 0 Then
  10.                 dtmED = DateAdd("yyyy", intYear, dtmStartDate)
  11.             End If
  12.         End If
  13.     End If

  14.     GetEndDate = dtmED

  15. End Function
复制代码


直接在查询中用IIf也可以,不过性能可能会差些。

[ 本帖最后由 Henry D. Sy 于 2008-12-16 12:19 编辑 ]
14#
发表于 2008-12-16 12:21: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 表
15#
 楼主| 发表于 2008-12-16 20:05:36 | 只看该作者
谢了,   试了一下,   还是没用,   是否直接帮助做到Access中?
16#
发表于 2008-12-16 20:28:03 | 只看该作者
什么问题
17#
 楼主| 发表于 2008-12-16 22:34:33 | 只看该作者
我在窗体上做了"结束日期"的控件,把属性设为更新前,然后运行这段代码,但没显示,是我做得不对,还是其他方面有问题?请指教.
18#
发表于 2008-12-16 22:41:45 | 只看该作者
原帖由 明镜 于 2008-12-16 22:34 发表
我在窗体上做了"结束日期"的控件,把属性设为更新前,然后运行这段代码,但没显示,是我做得不对,还是其他方面有问题?请指教.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
19#
 楼主| 发表于 2008-12-16 23:09:23 | 只看该作者
这个上传的文件已基本上可以用了,但就是月份是12个月或者它的倍数时,显示不正确( 少了一天)

[ 本帖最后由 明镜 于 2008-12-16 23:17 编辑 ]
20#
发表于 2008-12-16 23:34:19 | 只看该作者
  1. Public Function GetEndDate(dtmStartDate As Date, intYear As Integer, intMonth _
  2.                                                                      As Integer) As Date
  3.     Dim strTemp As String
  4.     Dim dtmED As Date

  5.     strTemp = Format(dtmStartDate, "mm-dd")
  6.     dtmED = DateAdd("yyyy", intYear, DateAdd("m", intMonth, dtmStartDate)) - 1

  7.     If strTemp = "02-29" Then
  8.         If intMonth = 0 Then
  9.             If intYear Mod 4 <> 0 Then
  10.                 dtmED = DateAdd("yyyy", intYear, dtmStartDate)
  11.             End If
  12.         ElseIf intMonth Mod 12 = 0 Then
  13.             dtmED = DateAdd("yyyy", intYear, DateAdd("m", intMonth, _
  14.                                                      dtmStartDate))
  15.         End If
  16.     End If

  17.     GetEndDate = dtmED

  18. End Function
复制代码

[ 本帖最后由 Henry D. Sy 于 2008-12-16 23:36 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-2 12:41 , Processed in 0.095745 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表