如何动态填充报告?

时间:2013-08-01 19:10:55

标签: database vba ms-access access-vba ms-access-2010

希望这是我对Access的最后一个问题,因为我很快就会完成它。

我目前有一个报表是根据按下“运行”按钮时填写的表单生成的。搜索数据库主键并填充表单。当用户单击“打印”按钮时,将生成可打印的报告,该报告由该表单中的数据填充。所有这一切都很简单。

现在,在表单中,有一个列表框。该列表框显示事务类型的结果,具体取决于单击的事务类型。例如,单击“购买”将产生在列表框中购买了某些东西的所有客户,单击“已售出”将产生已在列表框中销售某些东西的所有客户。有比这两个更多的交易,但这对于这个问题的目的无关紧要。

我需要做的是让每个交易类型的列表框内容(由VBA中的查询填充)显示在可打印报告上。

例如,报告可能如下所示:

购买: 约翰 辛迪 亚历

销售: 马特 史蒂芬 约翰 罗布

有谁知道一个简单的方法吗?我可以模糊地想到我将如何做到这一点,但它很复杂,我不知道我需要使用的确切功能。基本上我以为我会运行填充列表框的查询,然后在while循环中解析每个结果,并将其显示在报表上。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

与Form相比,Report是一个相当静态的对象。要动态更改报表中显示的数据,通常会使用OpenReport的Where参数,通常在按下按钮并从当前活动表单上的控件中读取一些值:

DoCmd.OpenReport "rptName", acViewPreview, , "SomeField=" & frmName!ctlName

如果表单上的值是字符串,那么它需要用撇号包围:

DoCmd.OpenReport "rptName", acViewPreview, , "SomeField='" & frmName!ctlName & "'"

报告还有一个您可能使用的Filter属性,或者您可以通过编程方式设置其RecordSource。第一个选项是最常见的,也是最简单的。

如果报告有一个列表框,那么您通常会使用带有引用表单控件的条件的查询来修改其RowSource。但我会质疑为什么这是必要的,因为列表框与报告中的其他数据无关。

如果您正在谈论动态更改报告中显示的内容 - 移动和隐藏控件等 - 那么这是一个不同的问题。您需要先在“设计视图”中打开报表。这很不寻常,很少需要。通常,您可以创建单独的报告,可能复制原始报告,只需使用按钮来决定要显示的报告。 (有报告事件可用于隐藏或移动报表上的控件 - 例如OnFormat - 不需要在设计视图中打开报表,但我认为这不是你的意思寻找。)

答案 1 :(得分:0)

假设将使用用于创建表单的记录集创建报表,您可以将填充列表框的记录集加入到填充表单其余部分的记录集中。例如,如果将列表框的记录集LEFT JOIN连接到事务类型上的表单的记录集,则生成的记录集应该包含创建所需报表所需的所有内容。 如果报表需要根据事务类型更改其格式,请尝试使用报表的OnOpen和OnClose事件以及详细信息部分的OnFormat事件。我对这样的报道有一些经验。如果您需要有关活动的更多帮助,请添加一些具体细节的评论,我可能会提出有用的建议。