枚举Access RecordSource字段的最有效方法是什么?

时间:2016-07-11 11:51:04

标签: ms-access access-vba ado dao data-access-object

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

1 个答案:

答案 0 :(得分:1)

TableDef和QueryDef是通常的对象。简单快捷。

当然,交叉表需要检索数据以确定字段名称,除非(如果已经过测试)这些字段名称是硬编码的。