如何向Access报表添加动态日期过滤器

时间:2013-06-20 17:42:15

标签: ms-access access-vba

我是非常新的访问和vba。

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

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

2 个答案:

答案 0 :(得分: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记录的查询

答案 1 :(得分:1)

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

报告背后的查询将包含您正在使用的日期字段,您可以在标准中添加

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

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

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