数据库完成后在 Access 中创建报表

Posted

技术标签:

【中文标题】数据库完成后在 Access 中创建报表【英文标题】:Creating reports in Access after the DB is completed 【发布时间】:2009-11-04 13:14:05 【问题描述】:

我有一个在 Access 中开发的功能齐全的数据库。它是使用一个非常“交互式”的开发者-客户增量-迭代过程来完成的,因为没有人真正知道最终数据库要显示什么。所有表格和表格(和子表格)都已开发(和规范化),但是现在必须设计和实施报告。

当然,表单基于查询,这些查询从表单本身获取标准来运行查询并在子表单中显示信息。现在,在实践中,报告基本上必须是屏幕上表格的可打印版本,以便分发。根据我的研究,报告也基于查询,但由于我的查询使用表单中的字段在子表单中显示相关信息,除非我基本上复制所有查询,否则我看不到创建这些报告不要从表单中提取值。这似乎非常乏味和低效。这是为数据库创建报告的“最佳实践”方式吗?

V.K.

【问题讨论】:

您是指 Access 意义上的“子表单”(即嵌入在另一个表单中的表单)还是只是另一个表单,其数据取决于在第一个表单中输入的某些过滤条件?在第一种情况下,您不需要表单字段引用来链接表单及其子表单:techonthenet.com/access/subforms/link.php 我认为您的“增量迭代”的一部分应该涉及在此过程中创建一两个报告。在设计数据库时应考虑报告要求;如果你这样做了,你就不会把自己画到这个角落了。 “一个非常“交互式”的开发者-客户增量-迭代过程”是我在 Access 中做事的方式大约 15 年了。超频应用部署granite.ab.ca/access/ufad.htm 我无法选择如何执行生命周期。有人告诉我,要求在所有表格完成后最后完成报告。但是,它是真正访问意义上的子表单,并且表单/子表单由大多数表单的主/子字段链接。超频繁的应用程序部署 - 记住这一点! :) 【参考方案1】:

您可以在表单上放置一个按钮,该按钮使用相同的查询启动报告。然后报告查询将使用表单中的字段/查询,然后应该返回相同的结果集。

【讨论】:

这只有在所有信息都在一个表单上时才有效,对吧?我有带有子表单的表单(有些带有选项卡)来显示一组相关信息,这些信息都在不同的表中。不过,我会这样做,而不是只打印(使用打印按钮)简短表格的报告。【参考方案2】:

查询中的硬编码表单字段是这里的问题部分——这绝对不是“最佳实践”。我猜您在 WHERE 子句中需要这些值?您可以做的是从查询中删除字段引用(以便查询返回 all 记录)。在子窗体或报表中,不要将查询直接用作记录源。相反,请使用一些 SQL 来访问您的(通用)查询 and 和其他过滤条件。例如,您的子表单的记录源可以是

SELECT * FROM myQuery WHERE someQueryField = Me.Parent!SomeFormField

允许您在报告中使用相同的 myQuery 和不同的 WHERE 子句(不引用表单)。

【讨论】:

如果你很幸运,并且有任何报告可以使用查询中的硬编码表单引用来填充,现在就构建它们(如果迟早需要它们。)。对于其他报告,我会使用 Heinzi 的建议并重新处理这些查询和表单。 我认为我不应该使用 SELECT * 并且只选择我想要的字段,因为当我只想要一个已知的数据子集时,将所有数据提取为记录会效率低下。我会尝试重新处理查询。 好吧,如果 myQuery 已经只包含您想要的字段(这是我的印象,因为您专门针对一种特定表单的需求定制了查询),那么重复相同的列表是没有意义的这里的字段数。【参考方案3】:

我不确定我是否理解您的问题,但我最近使用了一个使用表单来生成报告的应用程序,我可能对此有所了解。

您不希望您的报告与表单的单个记录相关联。您希望您的报表使用与表单相同的记录源,当然,只要它们显示相同的数据。

这样做的原因是,如果您将报表硬连接到表单字段,则报表只能在表单打开时才能使用,并且只能显示一条记录。

如果您创建报告以便加载所有记录,那么您需要能够一次打印一条记录,为此您只需使用 DoCmd.OpenReport 命令的 WHERE 参数,使用 PK 值作为你的标准。

所以,是的,您应该使用相同的记录源。为什么会有人认为这是一个问题?

【讨论】:

以上是关于数据库完成后在 Access 中创建报表的主要内容,如果未能解决你的问题,请参考以下文章

在 Access 2013 中创建用于打印报表的 UI

在 Access 中创建导航窗口

如何在Visual Studio 2010中创建Crystal Reports [关闭]

报表对象可以实现数据的显示和编辑吗

Firebase Auth (android) 后在数据库中创建用户

无法使用 oracle 存储过程在水晶报表 2013 中创建报表