【发布时间】:2018-03-07 23:47:03
【问题描述】:
我有一组报告,而不是当前从“选择报告”表单运行的报告。用户选择他们想要查看的报告名称和开始和/或结束日期,所选报告的基础查询会查看表单上的控件以将报告过滤到所选日期。
我们现在希望每周一早上自动运行其中一些报告,以通过电子邮件发送出去。报告的开始日期和结束日期将为 Date() 和 Date()+14。我知道如何编写代码来运行报告并将其附加到电子邮件中,但我不知道如何以编程方式将日期传递给表单的底层查询,而不是查看表单控件。
我已经搜索了答案,但只能找到解释如何执行其中一项的答案,但如果可以使用同一份报告同时执行这两项操作,则找不到答案。 我尝试在报表的基础查询中使用参数,但是当我从表单打开报表时,我得到日期参数的提示框,即使在表单上选择了日期并传递给报表预期的。
我也尝试通过 openargs 传递日期,而不是直接查看表单控件,但是我不知道如何将这些 openarg 值传递给查询,只传递给报表上的控件。这意味着显示的开始日期和结束日期是正确的,但日期过滤不适用于报告。通过单步执行,报表在 OnLoad 代码运行之前加载数据,该代码将控件设置为 openargs 值,因此在过滤数据时它们为空。
非常感谢任何帮助,我对这里的最佳方法感到有些困惑。谢谢。
【问题讨论】:
-
或许将查询的日期条件设置为
Date()和DateAdd("y", 14, Date())? -
@KostasK。那么您的意思是不要尝试将日期仅传递给现有来源,而是为整个记录来源提供修改后的标准?我没有想到那个选项,谢谢。但是,它是大量报告,因此为每个可能的报告提供修改后的记录源的编码意味着仅复制报告并拥有一组与表单一起使用和一组具有参数可能会更容易使用自动生成/电子邮件过程。我希望找到一种方法来解决这个问题,而无需复制报告。
-
不,我的意思是报告的基础查询。不要将日期作为参数传递给查询,而是让查询找出它们。当然,如果您需要报告日期始终默认为今天和今天 +14。
-
类似
SELECT * FROM T WHERE [Field] BETWEEN Date() And DateAdd("y", 14, Date()); -
感谢@KostasK。不幸的是,日期只有今天和今天 + 14,当我们在星期一早上运行它们以发送电子邮件时。当用户从当前选择表单运行报告时,他们可以选择任何开始或结束日期,或者将一个或两个日期留空。
标签: ms-access parameters vba