【发布时间】:2016-07-11 11:51:03
【问题描述】:
访问表单或报告的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
【问题讨论】:
标签: ms-access vba ado dao data-access-object