2013-06-20 84 views
0

我对访问和vba非常陌生。如何将动态日期过滤器添加到Access报告

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

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

回答

1

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

该报告将包含您所使用的日期字段后面的查询,并在条件就可以把

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

哪里MyFormName是上述形式的名称,MyTextboxName是名用户放入日期的文本框。

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

+0

我明白了。但我真的想在报告本身拥有过滤器选项。这样,如果用户在日期选择上改变了主意,他不需要返回到原始表单来输入新的日期数据... – user1015214

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记录

+0

您的每个建议的代码都到哪里去了?附加到“过滤器”按钮? – user1015214

+0

我通常把它放在“打开报告”按钮点击子。或者,如果你把它放在报告本身上,并希望它自动更新,那么可能是Report_Current?我不确定是否存在“报表当前”事件,其方式与“表单当前”相同。您只需要一个名为“刷新”的按钮并运行此代码,该代码仅在屏幕上可见,并且在打印报告时不会显示。 – ashareef

+0

那么,你可以只刷新按钮并使用上面显示的过滤器代码?此外,当你写.RecordSource =“Myquery”时,该名称何时使用,为什么它是必要的?我在下面的代码中看不到“Myquery”。 – user1015214

相关问题