访问表单或报表的RecordSource
可以是表格或查询。表可以是本地的或链接的(可能包含计算字段),查询可以引用其他查询和其他表。此外,查询可以使用“*”选项,用户定义函数(UDF)甚至远程连接的源。交叉表查询可以具有由字段中的值确定的字段名称,因此,交叉表字段名称可能随数据更改而变化。
我正在尝试找到确定给定RecordSource 字段名称的最有效“轻触”方式,并考虑以下因素:
包含用户定义函数的查询应该不在确定字段名称时调用函数,因此记录集方法不合适。
不应将锁定放在基础对象上
理想情况下,数据库不会处于独占模式
理想情况下,链接表的连接应该不,也不应该触发远程表上的任何触发器。如果可能的话,应确定无需访问远程数据源的字段。
字段名称是必需的,字段类型和属性会很好。字段描述将是一个奖励。
我担心Crosstab查询可能会打开基础表和/或运行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
答案 0 :(得分:1)
TableDef和QueryDef是通常的对象。简单快捷。
当然,交叉表需要检索数据以确定字段名称,除非(如果已经过测试)这些字段名称是硬编码的。