Interrogation des métadonnées (FireDAC)
Remonter à Utilisation des métadonnées (FireDAC)
Sommaire
Utilisation de TFDConnection
TFDConnection offre des méthodes GetXxxxNames simples d'emploi pour renvoyer la liste des noms d'objets de la base de données :
- GetCatalogNames - liste des catalogues ;
- GetSchemaNames - liste des schémas ;
- GetTableNames - liste des tables et des vues ;
- GetFieldNames - liste des champs de table ;
- GetKeyFieldNames - liste des clés primaires de table ;
- GetGeneratorNames - liste des générateurs/séquences ;
- GetPackageNames - liste des packages ;
- GetStoredProcNames - liste des procédures stockées.
Ces méthodes sont utiles quand :
- L'application a besoin de noms d'objets ;
- L'application n'a pas besoin d'autres informations sur ces objets.
Par exemple, la méthode GetTableNames récupère le nom des tables, vues et synonymes dans la base de données et le schéma en cours. Pour l'appeler, utilisez le code suivant :
FDConnection1.GetTableNames('Northwind', 'dbo', '', Memo1.Lines);
Utilisez les arguments ACatalogName et/ou ASchemaName pour limiter la liste renvoyée au catalogue et/ou schéma spécifié. S'ils ne sont pas spécifiés, tous les objets "visibles" ou les objets se trouvant dans la base de données/schéma en cours seront renvoyés. Cela dépend du SGBD. En effet, il faut savoir que certains SGBD (comme MS Access) peuvent renvoyer des erreurs si le schéma/catalogue est spécifié et n'est pas supporté par le SGBD.
De plus, l'application peut restreindre les listes d'objets en utilisant l'argument AScopes, selon la portée des objets. L'argument APattern, c'est-à-dire le masque de recherche LIKE, sera appliqué aux noms d'objets.
Vous pouvez trouver une méthode similaire dans la classe TFDCustomManager.
Pour plus d'informations, consultez la démo FireDAC : FireDAC\Samples\Comp Layer\TFDConnection\GetFieldNames.
Utilisation de TFDMetaInfoQuery
TFDMetaInfoQuery est le composant ensemble de données permettant d'interroger et de parcourir les listes de métadonnées. Pour ce faire, définissez les propriétés Connection, MetaInfoKind et éventuellement CatalogName, SchemaName, BaseObjectName et ObjectName, et ouvrez l'ensemble de données. Le code suivant vous permet d'obtenir la liste des tables :
FDMetaInfoQuery1.Connection := FDConnection1;
FDMetaInfoQuery1.MetaInfoKind := mkTables;
FDMetaInfoQuery1.Open;
Vous trouverez une description de la structure des ensembles de données dans la rubrique Structure des métadonnées. Si un SGBD ne prend pas en charge un type de métadonnées particulier, par exemple SQL Server ne prend pas en charge les mkGenerators, un ensemble de données vide est renvoyé. L'ensemble de métadonnées est en lecture seule et ne peut pas être modifié.
Mise en cache des métadonnées
Les métadonnées récupérées sont mises en cache par FireDAC à chaque connexion. Pour contrôler ce processus, incluez fiMeta dans FetchOptions.Cache.
Le fait d'exclure fiMeta de FetchOptions.Cache n'invalide pas le cache de métadonnées. Toutes les métadonnées en cache y restent jusqu'à la prochaine utilisation. Pour actualiser le cache de métadonnées pour un objet spécifié ou pour tous les objets, utilisez TFDConnection.RefreshMetadataCache.
Catalogue et schéma en cours
Pour obtenir le nom du catalogue et du schéma en cours, utilisez TFDConnection.ConnectionIntf.CurrentCatalog et CurrentSchema. Pour changer le catalogue ou le schéma en cours, assignez de nouvelles valeurs à ces propriétés.
MetaCurCatalog et MetaCurSchema vous permettent de redéfinir les informations renvoyées par la session de base de données. Pour certaines bases de données, l'utilisation de ces paramètres peut être requise pour spécifier les valeurs correctes, car l'API renvoie des valeurs incorrectes.