【发布时间】:2013-06-21 02:15:00
【问题描述】:
我对 access 和 vba 很陌生。
我创建了一个访问数据库并创建了一个报告。报告中的一列是日期列,我想创建一个动态用户过滤器,用户可以在其中输入日期范围,查询将接受该过滤器。
我使用的是 Access 2013。在属性表上,我看到了一个查找部分,我可以在其中选择文本框、列表框或组合框。我还看到了“输入掩码”部分。我需要使用这些吗?如果需要,如何使用?我在任何地方都需要 vba 代码吗?
【问题讨论】:
我对 access 和 vba 很陌生。
我创建了一个访问数据库并创建了一个报告。报告中的一列是日期列,我想创建一个动态用户过滤器,用户可以在其中输入日期范围,查询将接受该过滤器。
我使用的是 Access 2013。在属性表上,我看到了一个查找部分,我可以在其中选择文本框、列表框或组合框。我还看到了“输入掩码”部分。我需要使用这些吗?如果需要,如何使用?我在任何地方都需要 vba 代码吗?
【问题讨论】:
有两种方法可以解决这个问题。哪种方法取决于您要移动的数据量等因素。
例如,您有一个名为 ShipDate 的字段,并且您想查看 6 月 1 日至 6 月 10 日之间发货的所有内容
让我们假设 txtStartDate 和 txtEndDate 是用日期填充的文本框
使用Filter
Reports![MyReportName].RecordSource = "MyQuery"
Reports![MyReportName].Filter = "ShipDate BETWEEN #" & txtStartDate & "# AND #" & txtEndDate & "#"
Reports![MyReportName].FilterOn = True
Filter和FilterOn
编辑 SQL 字符串
strSQL = "SELECT ShipDate FROM MyTable WHERE ShipDate BETWEEN #" & txtStartDate & "# AND #" & txtEndDate & "#"
Reports![MyReportName].RecordSource = strSQL
- 肯定的:只提取显示所需的绝对最低限度的记录
- 否定:您必须构建查询字符串并设置RecordSource
我个人使用过滤器方法,直到我开始使用返回数百条记录的查询。除了当我有一个返回大约 50k 记录的查询时,我没有注意到这两种方法之间有任何显着的时间差异
【讨论】:
Filter 的好处是您可以保存查询定义,然后不必对其进行编辑。 MyQuery 只是我用于该查询的名称。在另一种方法中,它没有出现的原因是因为没有名为 MyQuery 的查询,您正在构建字符串,然后将其直接放入记录源中。如果我不够清楚,请告诉我。
我通常会创建一个包含用户可以添加的任何动态信息的表单。即使它只是一个日期字段,也没关系。
报告后面的查询将包含您正在使用的日期字段,并且您可以在 Criteria 中放置
=[Forms]![MyFormName]![MyTextBoxName]
其中 MyFormName 是上述表单的名称,MyTextboxName 是用户输入日期的文本框的名称。
然后在打开报告的表单上放置一个按钮。完成!
【讨论】: