2

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

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

现在,在表单中,有一个列表框。该列表框根据单击的事务类型显示事务类型的结果。例如,点击“Purchase”将产生所有在列表框中购买过东西的客户,点击“Sold”将产生在列表框中所有已经售出过东西的客户。交易比这两个多得多,但这对于这个问题的目的来说并不重要。

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

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

采购:约翰·辛迪·亚历克斯

出售:马特·史蒂文·约翰·罗布

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

预先感谢您的任何帮助!

4

2 回答 2

2

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

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

如果表单上的值是一个字符串,那么它需要用撇号括起来:

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

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

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

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

于 2013-08-01T19:31:47.717 回答
0

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

于 2013-08-02T14:40:24.530 回答