【问题标题】:What's the most efficient way of enumerating the fields of an Access RecordSource?枚举 Access RecordSource 的字段的最有效方法是什么?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 1970-01-01
      • 2018-03-29
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多