Вы можете использовать ACE / Jet OLE DB Provider и метод OpenSchema объекта ADO Connection, чтобы получить информацию о схеме в виде набора записей (что, вероятно, лучше, чем коллекция, поскольку ее можно фильтровать, сортировать и т. Д.).
Основная методология состоит в том, чтобы использовать adSchemaTables для получения базовых таблиц (не VIEW), а затем использовать каждый TABLE_NAME для извлечения adSchemaColumns для ORDINAL_POSITION,! DATA_TYPE,! IS_NULLABLE,! COLUMN_HASDEFAULT, CHERUM_SCALING! NAR! ,
adSchemaPrimaryKeys прост. В adSchemaIndexes вы найдете УНИКАЛЬНЫЕ ограничения, не уверенные в том, что их можно отличить от уникальных индексов, а также имен FOREIGN KEY для подключения к набору строк adSchemaForeignKeys, например. (псевдокод):
rsFK.Filter = "FK_NAME = '" & !INDEX_NAME & "'")
- обратите внимание на то, что Jet 3.51 позволяет использовать FK на основе безымянного ПК (!!)
Имена правил проверки и ограничений CHECK можно найти в наборе строк adSchemaTableConstraints, используя имя таблицы в вызове OpenSchema, затем используйте имя в вызове набора строк adSchemaCheckConstraints, фильтр для CONSTRAINT_TYPE = 'CHECK' ( ограничение с именем 'ValidationRule' + Chr $ (0), поэтому лучше всего избегать использования нулевых символов в имени). Помните, что правила проверки ACE / Jet могут быть либо на уровне строк, либо на уровне таблиц (ограничения CHECK всегда на уровне таблиц), поэтому вам может потребоваться использовать имя таблицы в фильтре: для adSchemaTableConstraints установлено значение []. []. ValidationRule будет []. ValidationRule в adSchemaCheckConstraints. Другая ошибка (предполагаемая ошибка) заключается в том, что поле имеет ширину 255 символов, поэтому любое определение ограничения Правила проверки / CHECK, содержащее более 255 символов, будет иметь значение NULL.
adSchemaViews для объектов Access Query, основанных на непараматизированном SELECT SQL DML, прост; Вы можете использовать имя VIEW в adSchemaColumns для получения подробной информации о столбце.
ПРОЦЕДУРЫ находятся в adSchemaProcedures, являясь всеми другими разновидностями объектов Access Query, включая параметризованный SELECT DML; для последнего я предпочитаю заменять синтаксис PARAMETERS на CREATE PROCEDURE PROCEDURE_NAME в PROCEDURE_DEFINITION. Не заглядывайте в adSchemaProcedureParameters, вы ничего не найдете: параметры можно перечислить, используя объект каталога ADOX для возврата команды ADO, например, (псевдокод):
Set Command = Catalog.Procedures(PROCEDURE_NAME).Command
затем перечислите коллекцию Comm.Parameters для .Name, .Type для DATA_TYPE, (.Attributes And adParamNullable) для IS_NULLABLE, .Value для COLUMN_HASDEFAULT и COLUMN_DEFAULT, .Size, .Precision .u.
Для свойств, специфичных для ACE / Jet, таких как сжатие Unicode, необходимо использовать объект другого типа. Например, длинный целочисленный Autonumber в Access-говорящий может быть найден с использованием объекта каталога ADO, например, (псевдокод):
bIsAutoincrement = Catalog.Tables(TABLE_NAME).Columns(COLUMN_NAME).Properties("Autoincrement").Value
Удачи:)