根据用户输入Access获取startdate和enddate(VBA)之间的记录计数

时间:2013-08-12 04:53:11

标签: ms-access access-vba

我有一张表,其中有两列,一列是Date Received,另一列是Date Finished。 根据用户输入日期到表单我需要拉出记录的数量。 我有这个查询,不知道为什么我得到数据类型错误13。

Dim LTotal As Integer
LTotal = "SELECT Count(*) AS TotalCount FROM tblMatchBook " & _
         "WHERE ((tblMatchBook.DateFinished >= [Forms]![frmRptDates]![txtSDate]) AND ([tblMatchBook].[DateReceived] <= [Forms]![frmRptDates]![txtEDate]))"
MsgBox (LTotal)

我有这个查询,它在查询窗口中有效,但无法在表单上运行。

PARAMETERS [Start Date] DateTime, [End Date] DateTime;
SELECT Count(*) AS CompletedSurvey
FROM tblMatchBook
WHERE (((tblMatchBook.DateFinished)>=[Start Date]) And (((tblMatchBook.DateReceived))<=[End Date]));

感谢任何帮助。

感谢。 尼塔

1 个答案:

答案 0 :(得分:0)

您将LTotal声明为整数,然后用字符串初始化它,这就是您收到13类错误的原因。

要解决您的问题,您必须了解自己在做什么:您需要执行对数据库引擎的查询才能获得结果,然后您需要读取返回的结果集

字符串本身只包含一系列字符,它不会为您做任何事情。

实现目标的最简单方法是使用内部DCount() function

Dim LTotal as Integer

LTotal = Dcount("*", "tblMatchBook", "(DateFinished >= [Forms]![frmRptDates]![txtSDate]) AND ([DateReceived] <= [Forms]![frmRptDates]![txtEDate])")

MsgBox LTotal

您实际上不需要VBA来使用它。您只需将以下内容粘贴到表单上文本框的ControlSource即可,只要用户更改表单上的txtSDatetxtEDate,您就会自动获取记录数(并且将焦点从这些控件移开,以便Access可以获取它们已被更改的内容。

=Dcount("*", "tblMatchBook", "(DateFinished >= [Forms]![frmRptDates]![txtSDate]) AND ([DateReceived] <= [Forms]![frmRptDates]![txtEDate])")

有很多方法可以达到你想要的效果。这可能是最简单的,虽然DCount()不是非常有效或灵活,如果你从Access开始,那么你最好先坚持使用简单的东西,然后当你已经用尽了所提供的功能时继续使用VBA。 Access的其余部分,你知道这些限制。