2016-07-11 8 views
0

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 

ответ

1

TableDef и QueryDef являются обычными объектами для этого. Просто и быстро.

Конечно, кросс-таблица должна получить данные для определения имен полей, кроме (возможно, не протестированных), если они жестко закодированы.

 Смежные вопросы

  • Нет связанных вопросов^_^