Эта статья о способах получения метаданных в FireDAC. Она основана на официальной документации.
Метаданные в FireDAC можно получить при помощи компонента TFDMetaInfoQuery или нескольких методов FDConnection.
Методы TFDConnection
- GetCatalogNames – the catalog list;
- GetSchemaNames – the schema list;
- GetTableNames – the table and view list;
- GetFieldNames – the table field list;
- GetKeyFieldNames – the table primary key list;
- GetGeneratorNames – the generator/sequence list;
- GetPackageNames – the package list;
- GetStoredProcNames – the stored procedure list.
Эти методы полезны когда
-приложению нужны имена объектов
-приложение не нуждается в дополнительной информации об этих объектах
Например, метод GetTableNames получает таблицы, представления и синонимы имен из текущей базы данных.
1 |
FDConnection1.GetTableNames('Northwind', 'dbo', '', Memo1.Lines); |
Из справки
1 |
procedure GetTableNames(const ACatalogName, ASchemaName, APattern: string; AList: TStrings; AScopes: TFDPhysObjectScopes = [osMy]; AKinds: TFDPhysTableKinds = [tkSynonym, tkTable, tkView]; AFullName: Boolean = True); |
Параметры ACatalogName и/или ASchemaName – это выбор имени каталога, схемы. Если они не определены, то мы получим все видимые объекты или объекты в текущей БД / схеме. Это зависит от БД. Параметр APattern это аргумент, аналогичный LIKE – поисковая маска. Аналогичный метод можно найти в TFDCustomManager.
Демо доступно по адресу FireDAC\Samples\Comp Layer\TFDConnection\GetFieldNames.
TFDMetaInfoQuery
TFDMetaInfoQuery это компонент, который возвращает множество (“датасет”), состоящее из метаданных. Чтобы выбрать тип получаемых метаданных можно выбрать свойство MetaInfoKind, перед этим установив параметр Connection. Также можно опционально выбрать свойства CatalogName, SchemaName, BaseObjectName и ObjectName. Чтобы получить список таблиц, можно поступить следующим образом.
1 2 3 |
FDMetaInfoQuery1.Connection := FDConnection1; FDMetaInfoQuery1.MetaInfoKind := mkTables; FDMetaInfoQuery1.Open; |
Для описания структуры датасета смотрите Metadata Structure. Если БД что-то не поддерживает (например MySQL не поддерживает генераторы), то вернется пустое множество. Датасет может быть только прочитан. Read-only.
Кэширование метаданных
Полученные метаданные кэшируются FireDAC с каждым соединением. Это настраивается включением fiMeta в FetchOptions.Cache.
Исключение fiMeta из FetchOptions.Cache не аннулирует кэш. Все кэшированные метаданные остаются до следующего использования. Чтобы обновить метаданные, используйте метод TFDConnection.RefreshMetadataCache
Текущий каталог и схема
TFDConnection.ConnectionIntf.CurrentCatalog – выдаст текущий каталог
FDConnection1.ConnectionIntf.CurrentSchema – выдаст текущую схему
To get the current catalog and schema name, use TFDConnection.ConnectionIntf.CurrentCatalog and CurrentSchema. To change the current catalog or schema, assign new values to these properties.
MetaCurCatalog и MetaCurSchema позволяют переписать информацию, возвращаемую из БД.