【问题标题】:how to add a dynamic date filter to Access report如何向 Access 报告添加动态日期过滤器
【发布时间】:2013-06-21 02:15:00
【问题描述】:

我对 access 和 vba 很陌生。

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

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

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

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

    例如,您有一个名为 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 记录的查询时,我没有注意到这两种方法之间有任何显着的时间差异

    【讨论】:

    • 您的每个建议的代码到底在哪里?附加到“过滤器”按钮?
    • 我通常把它放在“打开报告”按钮点击子。或者,如果您将它放在报告本身并希望它自动更新,那么可能是 Report_Current?我不确定是否存在与当前表单相同的报告当前事件。您可以只使用一个名为刷新的按钮并运行此代码,该代码仅在屏幕上可见,并且在您打印报告时不会显示。
    • 那么,你可以只做一个刷新按钮,并使用如上所示的过滤代码吗?此外,当您编写 .RecordSource = "Myquery" 时,何时使用该名称以及为什么需要它?我没有看到以下代码中提到了“Myquery”。
    • 使用Filter 的好处是您可以保存查询定义,然后不必对其进行编辑。 MyQuery 只是我用于该查询的名称。在另一种方法中,它没有出现的原因是因为没有名为 MyQuery 的查询,您正在构建字符串,然后将其直接放入记录源中。如果我不够清楚,请告诉我。
    • 澄清一下:如果您创建一个名为 MyQuery 的 RecordSource,现在它将显示在 Report 的 Property 表的 Record Source 下拉列表中?为什么这有助于编辑,如果您需要更改过滤器,您仍然需要返回代码。我看到的唯一好处是如果您想将记录源重新用于另一个报告,但这可能吗?
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 我明白了。但我真的很想在报告本身上有过滤器选项。这样,如果用户在日期选择上改变了主意,他就不需要回到原来的表单来输入新的日期数据......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多