在 MS Access 报告中使用查询的隐藏 columns/fields

Use query's hidden columns/fields in MS Access report

我有一个连接几个表的查询。查询在 运行 时请求参数。然后它从结果中显示一些 columns/fields,其他字段(例如,输入的参数和所有行共有的其他字段)被隐藏。我正在尝试基于此查询创建我的第一个 Access 报告,我想使用其中一些隐藏字段作为 text-boxes/labels 的记录源,但我一直无法这样做。这些字段不会出现在可能的记录源列表中。

我已经尝试了 Add Existing Fields 按钮并从 Fields in related tables 中选择了我想要的字段,但是当绑定的文本框出现在报告中并出现 Invalid Control Property. No Such Field in the Field List 之类的错误时,我认为表示字段对报表仍然不可见。如果您能帮助完成这项工作,我们将不胜感激。

答案是编辑查询并包含缺失的列,以便它们可用于报告。

对于未选择的查询列,使用单词 "hidden" 具有误导性。 SQL 的工作方式——甚至超出数据集整体概念中的 SQL——是在查询中只请求数据的 子集 。如果在查询中未选择某些列,则它们在结果数据集中显然不可用。

可能可以使用另一个查询重新获取排除的列,但这仍然不意味着丢失的列只是 "hidden"。在后续查询获取不同列数据的情况下,数据库引擎必须重新分析新查询,重新读取数据,然后从新的列集合中编译数据以返回到一个全新的子集中数据。这是一个完整的往返过程,比仅仅取消隐藏数据要复杂得多。

窗体和报表是完全不同类型的对象,可以将字段标记为 "hidden",但尽管显示在数据表中,查询也不相同。 (VBA) 代码中的 Access Forms 和 Recordset 对象等对象旨在 保存查询数据的子集 ,因此它们能够暂时隐藏(或忽略)或取消隐藏某些字段而无需重新查询数据库。 (从技术上讲,Access Form 有自己的 Recordset 对象,用于保存和管理查询数据。)

尽管 Access "self contained" 同时具有数据库和用户界面元素,但它仍然主要是一个标准的 RDBMS(关系数据库管理系统)。 RDBMS 高效数据处理的主要思想是只获取当前操作所需的数据。考虑到 SQL 可用于从远程服务器查询数据。例如,甚至 Access 也可以从 SQL 服务器获取数据并更新数据。如果数据字段在不包含在查询中时只有 "hidden",那将意味着整个数据库(或至少整个 table)将来回传递,并且唯一阻碍获取的东西在任何列都将是 "making it visible",就好像它实际上是立即可用的一样。这对于内存和远程通信来说都是非常低效的。