我有一个连接几个表的查询。查询在运行时要求一个参数。然后,它从结果中显示一些列/字段,其他字段(例如,输入的参数和所有行共有的其他字段)被隐藏。我正在尝试根据此查询创建我的第一个Access报告,我想将其中一些隐藏字段用作文本框/标签的记录源,但是我一直无法这样做。这些字段不会出现在可能的记录源列表中。
我尝试了Add Existing Fields
按钮,并从Fields in related tables
中选择了我想要的字段,但是当绑定的文本框出现在报告中时,出现了类似Invalid Control Property. No Such Field in the Field List
的错误,我认为这意味着字段对于报表仍然不可见。希望能帮助您完成此工作。
答案 0 :(得分:2)
答案是编辑查询并包括缺少的列,以便它们可用于报告。
对于未选择的查询列,“隐藏”一词的使用具有误导性。 SQL的工作方式-甚至在数据集的总体概念上还超越了SQL-就是查询中仅请求数据的子集。如果在查询中未选择某些列,则它们在结果数据集中显然是不可用的。
可能可以通过另一个查询重新获取排除的列,但这仍然并不意味着丢失的列只是“隐藏”的。在后续查询中获取不同的数据列的情况下,数据库引擎必须重新分析新查询,重新读取数据,然后从新的列集中编译数据,以将其以全新的子集形式返回。数据。这是一个完整的往返过程,不仅要取消隐藏数据,还要涉及更多的过程。
表单和报表是完全不同的对象类型,可以将字段标记为“隐藏”,但是尽管显示在数据表中,但查询却并不相同。 (VBA)代码中的访问表单和记录集对象之类的对象旨在保留查询数据的子集,因此它们能够临时隐藏(或忽略)或取消隐藏某些字段,而无需重新查询数据库。 (从技术上讲,访问表单具有其自己的Recordset对象,用于保存和管理查询的数据。)
即使Access在数据库和用户界面元素中都是“自包含的”,但它仍主要是标准的RDBMS(关系数据库管理系统)。 RDBMS高效数据处理的基本思想是仅获取当前操作所需的内容。考虑到SQL可用于从远程服务器查询数据。例如,甚至Access也可以从SQL Server获取数据并更新SQL Server上的数据。如果数据字段仅在不包含在查询中时才被“隐藏”,则意味着整个数据库(或至少是整个表)将被来回传递,唯一阻碍进入任何列的是“使其可见”,好像它实际上是立即可用的。对于内存和远程通信而言,这将是非常低效的。