我对访问和 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 记录的查询时,我没有注意到这两种方法之间有任何显着的时间差异
我通常会创建一个包含用户可以添加的任何动态信息的表单。即使它只是一个日期字段,也没关系。
报告后面的查询将包含您正在使用的日期字段,并且您可以在 Criteria 中输入
=[Forms]![MyFormName]![MyTextBoxName]
其中 MyFormName 是上述表单的名称,MyTextboxName 是用户输入日期的文本框的名称。
然后在打开报告的表单上放置一个按钮。完毕!