RecordSource
для формы доступа или отчета может быть таблицей или запросом. Таблица может быть локальной или связанной (и может содержать вычисленные поля), а запрос может ссылаться на другие запросы и другие таблицы. Кроме того, запрос может использовать опции «*», пользовательские функции (UDF) и даже удаленные источники. В запросах Crosstab могут быть имена полей, которые определяются значениями в полях, и поэтому имена полей кросс-таблицы могут изменяться по мере изменения данных.Каков наиболее эффективный способ перечисления полей Access RecordSource?
Я пытаюсь найти самый эффективный «легкий сенсорный» способ определения имен полей данного RecordSource со следующими соображениями:
запросов, которые включают в себя определяемые пользователем функции должен не вызывать функции при определении имен полей, поэтому подход набора записей не подходит.
замки не должны быть помещены на нижележащих объектов
база данных, в идеале, не в монопольном режиме в идеале должен не открываемых
Подключение к связанным таблицам, и не следует предпринимать никаких триггеров на удаленных таблицах. Если возможные поля должны быть определены без какого-либо доступа к удаленным источникам данных.
Имя поля обязательное поле, тип поля и атрибуты были бы хороши. Описание поля будет бонусом.
Я боюсь, что запросы Crosstab потенциально откроют базовые таблицы и/или запустит UDF (как и в моем тестировании), поэтому я готов пропустить перечисление полей запроса Crosstab, хотя я не обязательно знать, если запрос имеет источник, который является перекрестный запрос ...
Я уверен, если с помощью Daos TableDef и QueryDef будет достаточно, или должен ли я изучить ADO Schemas и каталоги, или, возможно, некоторые другие подход?
Это очень простой подход к 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