我有一张表,其中有两列,一列是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]));
感谢任何帮助。
感谢。 尼塔
答案 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
即可,只要用户更改表单上的txtSDate
或txtEDate
,您就会自动获取记录数(并且将焦点从这些控件移开,以便Access可以获取它们已被更改的内容。
=Dcount("*", "tblMatchBook", "(DateFinished >= [Forms]![frmRptDates]![txtSDate]) AND ([DateReceived] <= [Forms]![frmRptDates]![txtEDate])")
有很多方法可以达到你想要的效果。这可能是最简单的,虽然DCount()
不是非常有效或灵活,如果你从Access开始,那么你最好先坚持使用简单的东西,然后当你已经用尽了所提供的功能时继续使用VBA。 Access的其余部分,你知道这些限制。