0

访问表单或报表的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
4

1 回答 1

1

TableDef 和 QueryDef 是常用的对象。简单快速。

当然,交叉表将需要检索数据以确定字段名称,除非(可能尚未测试)这些是硬编码的。

于 2016-07-11T12:15:57.937 回答