Database 如何动态填充报告?

Database 如何动态填充报告?,database,ms-access,vba,ms-access-2010,Database,Ms Access,Vba,Ms Access 2010,希望这是关于访问的最后一个问题,因为我将很快完成它的工作 我目前有一个报告,它是由按下“运行”按钮时填写的表单生成的。搜索数据库主键并填充表单。当用户单击“打印”按钮时,将生成一个可打印的报告,其中包含来自该表单的数据。所有这些都很容易 现在,在表单中,只有一个列表框。该列表框根据单击的事务类型显示事务类型的结果。例如,单击“购买”将生成列表框中已购买物品的所有客户,单击“出售”将生成列表框中已出售物品的所有客户。交易比这两项多得多,但就本问题而言,这并不重要 我需要做的是使每个事务类型的列表框

希望这是关于访问的最后一个问题,因为我将很快完成它的工作

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

现在,在表单中,只有一个列表框。该列表框根据单击的事务类型显示事务类型的结果。例如,单击“购买”将生成列表框中已购买物品的所有客户,单击“出售”将生成列表框中已出售物品的所有客户。交易比这两项多得多,但就本问题而言,这并不重要

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

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

采购: 约翰 辛蒂 亚历克斯

售出: 马特 史蒂文 约翰 抢劫

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


提前感谢您的帮助

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

DoCmd.OpenReport "rptName", acViewPreview, , "SomeField=" & frmName!ctlName
如果表单上的值是字符串,则需要用撇号括起来:

DoCmd.OpenReport "rptName", acViewPreview, , "SomeField='" & frmName!ctlName & "'"
报表还具有一个可以使用的
过滤器
属性,或者您可以通过编程方式设置其
记录源
。第一个选项是最常见也是最简单的

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


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

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

您能举一个简单的例子说明如何做到这一点吗?