0

我对访问和 vba 很陌生。

我创建了一个访问数据库并创建了一个报告。报告中的一列是日期列,我想创建一个动态用户过滤器,用户可以在其中输入日期范围,查询将接受该过滤器。

我正在使用 Access 2013。在属性表上,我看到了一个查找部分,我可以在其中选择文本框、列表框或组合框。我还看到了“输入掩码”部分。我需要使用这些吗?如果需要,如何使用?我在任何地方都需要 vba 代码吗?

4

2 回答 2

2

有两种方法可以解决这个问题。哪种方法取决于您要移动的数据量等因素。

示例您有一个名为 ShipDate 的字段,并且您想查看 6 月 1 日至 6 月 10 日之间发货的所有内容让我们假设txtStartDatetxtEndDate是填充日期的文本框

使用Filter

Reports![MyReportName].RecordSource = "MyQuery"
Reports![MyReportName].Filter = "ShipDate BETWEEN #" & txtStartDate & "# AND #" & txtEndDate & "#"
Reports![MyReportName].FilterOn = True
  • 积极的:只需要改变FilterFilterOn
  • 否定:(我可能对此有误,希望有人能纠正我)如果数据位于网络位置而不是您的桌面上,那么您实际上是在将整个查询拉到您的计算机上,然后在您的屏幕上进行过滤.

编辑 SQL 字符串

strSQL = "SELECT ShipDate FROM MyTable WHERE ShipDate BETWEEN #" & txtStartDate & "# AND #" & txtEndDate & "#"
Reports![MyReportName].RecordSource = strSQL

- 正面:仅提取显示所需的绝对最少的记录 - 负面:您必须构建查询字符串并设置RecordSource

我个人使用过滤器方法,直到我开始使用返回数百条记录的查询。除了当我有一个返回大约 50k 记录的查询时,我没有注意到这两种方法之间有任何显着的时间差异

于 2013-06-20T18:15:00.497 回答
1

我通常会创建一个包含用户可以添加的任何动态信息的表单。即使它只是一个日期字段,也没关系。

报告后面的查询将包含您正在使用的日期字段,并且您可以在 Criteria 中输入

=[Forms]![MyFormName]![MyTextBoxName]

其中 MyFormName 是上述表单的名称,MyTextboxName 是用户输入日期的文本框的名称。

然后在打开报告的表单上放置一个按钮。完毕!

于 2013-06-20T17:54:35.493 回答