如何检索日期字段在下一年之内的所有记录的计数,并将其存储在变量中?

时间:2018-08-28 19:08:16

标签: date ms-access access-vba ms-access-2016

我对MS Access相当陌生,但是对数据库有一定的了解,并且对SQL有所了解。

我正在Access中创建一个数据库。在用户将首先看到的主要表单上,我需要显示Case表中所有记录的计数,这些记录的日期为下一年的StatuteOfLimitation

我的目标是创建一个描述信息的标签,下面带有一个按钮。该按钮将打开所有记录的报告(此部分工作正常),我希望该按钮的标题显示符合条件的记录总数。

我唯一想到的方法是检索计数并将其存储到变量中。从那里,我应该能够将标题设置为变量值。

我已经看到了几种获取计数并将其存储在变量中的方法,但是我发现的所有方法仅存储了每条记录的计数,而没有过滤日期范围。

这是我能想到的最好的方法,但是没有用:

Private Sub Form_Load()

    Dim oneYearFromToday As TempVars
    SET TempVars!oneYearFromToday = (SELECT COUNT(StatuteOfLimitation) FROM Case 
    WHERE StatuteOfLimitation <= DateAdd("yyyy", 1, Date());

End Sub 

4 个答案:

答案 0 :(得分:1)

DCount()“如何检索日期字段在下一年之内的所有记录的计数”提供了一种简单的方法。

Dim lngCount As Long
lngCount = DCount("*", "Case", "[StatuteOfLimitation] <= DateAdd('yyyy', 1, Date())")

然后,您可以在命令按钮的Caption属性中使用该计数。假设按钮名为cmdOpenReport ...

Me!cmdOpenReport.Caption = "Report " & lngCount & " cases"

如果要在TempVar中代替常规Long变量中的计数,则将其声明为As TempVar(仅一个)而不是As TempVars(一个集合)。而且,当您为其分配值时,请勿使用Set

Dim oneYearFromToday As TempVar
TempVars!oneYearFromToday = DCount("*", "Case", "[StatuteOfLimitation] <= DateAdd('yyyy', 1, Date())")

答案 1 :(得分:0)

我可能不会使用tempvar来存储您的变量。您可以使用DAO尝试以下类似操作。

Private sub Form_Load()
dim rst         as dao.recordset
dim strSQL      as string

'Creates query string
strsql = "SELECT Count(StatueOfLimitation) as RecordCount " & _
         "FROM Case " & _
         "WHERE (((StatueOfLimitation) <= DateAdd('yyyy',1,date())));"

'Opens the query string into a recordset
set rst = currentdb.openrecordset(strsql)

'Change Labelnamehere isnto the name of the label control on your form
'Change what ever saying you want here to something you want the label to display
me.labelnamehere.caption = "What ever saying you want here " & rst![RecordCount] 'Don't need a variable storage is you can use the result here

rst.close 'closes recordset
set rst = nothing 'Clears memory

EndCode: 'Ensures clean up is successful
If not rst is nothing then
     rst.close
     set rst = nothing
end if
end sub

如果这对您不起作用,请告诉我,我将做进一步的挖掘。

答案 2 :(得分:0)

我无法评论HansUp的答案,但是要在VBA中更改标签标题,您需要在“设计”视图中打开表单。这不是我通常要做的事情,我的个人喜好是使用未更改标签的未绑定文本框,但是我已经在一个数据库中完成了此操作,以更新上次发送电子邮件的时间/日期和用户。

代码如下:

    DoCmd.OpenForm "yourformname", acDesign, , , , acHidden
    Forms![yourformname]![yourlabelname].Caption = "There are " & TempVars!onYearFromToday & " cases to view."
    DoCmd.Close acForm, "yourformname", acSaveYes
    DoCmd.OpenForm "yourformname", acNormal

答案 3 :(得分:0)

使用按钮显示信息是个坏主意。那不是按钮的目的。

使用文本框并设置其 ControlSource

=DCount("*","[Case]","[StatuteOfLimitation]<=DateAdd("yyyy",1,Date()))

它会自动填充,并且该按钮可随时打开以打开报告。