0

我有一张表,其中有两列,一列是收到日期,另一列是完成日期。根据用户在表单中输入的日期,我需要提取记录数。我有这个查询,不知道为什么我得到数据类型错误 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]));

感谢任何帮助。

谢谢。妮塔

4

1 回答 1

0

您声明LTotal为整数,然后使用字符串对其进行初始化,这就是您收到 13 型错误的原因。

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

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

实现您想要的最简单的方法是使用内部DCount() 函数

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 开始,那么您最好先坚持简单的东西,然后在您用尽 Access 其余部分提供的功能时继续使用 VBA 并且您知道这些限制。

于 2013-08-12T06:14:20.997 回答