2014-10-28 87 views
0

我在使用Access 2007.我正在尝试做一些事情,我认为语法是问题,但是我尝试的所有内容都无法正常工作。在If语句中访问DateDiff

我需要一个报告中的文本框来给我超过30天的记录数和另一个相同但60天的记录数。所以基本上“如果记录是今天超过30天,那就算了,否则就不要。”

我做的最好的事情是这样的:

=Count(IIf(DateDiff("d",[StartDate],Date())>30,"")) 

[起始日期]是记录被放入数据库中的日期,时间()今天是我的希望。

它返回一个数字,但数字不正确。我已经让DateDiff在IF语句之外工作,所以我认为这是我的语法,但是......我做错了什么?有没有更简单的方法来做到这一点?我对可用函数的知识非常有限,基本上没有VBA知识。

非常感谢!

+0

好吧,这似乎现在的工作......对不起,我不知道我做错了 – msim 2014-11-03 21:11:18

回答

0

你尝试

=Sum(IIf(DateDiff("d",[StartDate],Date())>30, 1, 0)) 
+0

这将返回相同的数字。我认为,因为每个记录是1,所以计数和总和将是相同的 – msim 2014-11-03 19:52:10

0

看起来你lmisunderstood的IFF()

例如IFF(表情,动作1,动作2)表示:

if expression=true then 
    do action1 
else 
    do action2 
end if 

所以你在做什么基本上是计算什么datediff返回并不计算它匹配的记录!
如果您在iff()的第一个动作中有count(),那么您的方法将是正确的。

我有一个更好的解决方案,你反正...

创建报表(编辑“MY_TABLE”下面的函数来匹配您的表的名称:

Private Function MyCount(Optional intDays As Integer = 30) As Long 

    MyCount = DCount("*", "MY_TABLE", "DateDiff('d', [StartDate], Date()) > " & intDays) 

End Function 

然后你只需来填充您的文本框作为后续

,以获得最近30天计数:
MyTextbox.value = mycount的

要获取过去60天计数:
MyTextbox.value = mycount的(60)

+0

谢谢Thomas,我如何在报告中创建一个函数? – msim 2014-11-03 19:46:22

+0

嘿托马斯,其实我最初写的东西现在似乎在工作,所以我不认为我在错误的地方有COUNT。我很想知道你在用私人功能和所有功能谈论什么,但是我现在正在得到正确的数字 – msim 2014-11-03 21:13:06