我对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
答案 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()))
它会自动填充,并且该按钮可随时打开以打开报告。