访问表单或报表的RecordSource
可以是表或查询。表可以是本地的或链接的(并且可能包含计算字段),并且查询可以引用其他查询和其他表。此外,查询可以使用“*”选择、用户定义函数 (UDF) 甚至远程连接的源。交叉表查询可以具有由字段中的值确定的字段名称,因此,交叉表字段名称可以随着数据的变化而变化。
我试图找到最有效的“轻触”方式来确定给定 RecordSource 的字段名称,并考虑以下因素:
包含用户定义函数的查询在确定字段名称时不应调用函数,因此记录集方法不适合。
不应在底层对象上加锁
理想情况下,数据库不会处于独占模式
理想情况下不应打开与链接表的连接,也不应触发远程表上的任何触发器。如果可能,应在不访问远程数据源的情况下确定字段。
字段名称是必需的,字段类型和属性会很好。字段描述将是一个奖励。
我担心交叉表查询可能会打开基础表和/或运行 UDF(正如我在测试中所做的那样),所以我准备跳过枚举交叉表查询的字段,尽管我不一定知道查询是否有作为交叉表查询的源...
我不确定使用 DAO TableDef 和 QueryDef 是否足够,或者我是否应该探索 ADO 模式和目录,或者其他一些方法?
这是一种非常基本的 DAO 方法,但我不相信它一定是最快的,或者它是否是轻触式的。
Sub EnumQueryDefFieldNames()
Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("Query7_Crosstab")
For Each fld In qdf.Fields
Debug.Print fld.Name
Next fld
End Sub