Questions relatives aux métadonnées (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à FAQ (FireDAC)

Cette rubrique contient une liste des questions et réponses relatives à l'extraction des métadonnées.

Q1 : Existe-t-il une méthode pour vérifier si une table existe dans une base de données ?

R : Il existe deux méthodes de base :

1)

 try
   FDQuery1.Open('select * from tab where 0 = 1');
   Result := True;
 except
   on E: EFDDBEngineException do
     if E.Kind = ekObjNotExists then
       Result := False
     else
       raise;
 end;

2)

 var
   oList: TStrings;
 begin
   oList := TStringList.Create;
   try
     FDConnection1.GetTableNames('', '', ATableName, oList, [osMy, osOther, osSystem],
       [tkTable, tkTempTable, tkLocalTable]);
     Result := oList.Count > 0;
   finally
     oList.Free;
   end;
 end;

La première est plus optimisée.

Q2 : Pour Oracle, est-il possible d'obtenir les procédures du package en utilisant TFDMetaInfoQuery ?

R : Le code suivant renvoie la liste des procédures du package Oracle PACKAGE_NAME.

 FDMetaInfoQuery1.BaseObjectName := 'PACKAGE_NAME';
 FDMetaInfoQuery1.MetaInfoKind := mkProcs;
 FDMetaInfoQuery1.Open;

Q3 : Comment puis-je récupérer le nom des index en utilisant TFDMetaInfoQuery ?

R : Le code suivant renvoie la liste des index de la table MY_TAB.

 FDMetaInfoQuery1.ObjectName := 'MY_TAB';
 FDMetaInfoQuery1.MetaInfoKind := mkIndexes;
 FDMetaInfoQuery1.Open;

Q4 : Query Builder, les éditeurs de conception et les fonctions d'extraction des métadonnées renvoient le nom des objets appartenant à mon schéma actuel, avec comme préfixe le nom du schéma/catalogue. Comment puis-je l'exclure ?

R : Deux options :

  • Définissez AFullName sur False dans l'appel TFDConnection.GetXxxxName ;
  • FireDAC possède deux paramètres généraux de définition de connexion : MetaDefCatalog et MetaDefSchema. Selon le SGBD, un paramètre ou les deux sont supportés (voir Connectivité des bases de données FireDAC pour plus de détails). Si l'objet appartient à un catalogue MetaDefCatalog/schéma MetaDefSchema spécifié, le nom de ce catalogue/schéma sera exclu du nom d'un objet. Par conséquent, définissez MetaDefCatalog/MetaDefSchema sur le nom de votre catalogue/schéma de développement si vous devez déployer votre application vers un catalogue/schéma différent.

Q5 : J'appelle une procédure stockée Oracle à l'aide d'un synonyme public, mais FireDAC ajoute toujours le nom du schéma au nom de la procédure stockée. Comment éviter cela ?

R : FireDAC possède deux paramètres généraux de définition de connexion : MetaCurCatalog et MetaCurSchema. Selon le SGBD, un paramètre ou les deux sont supportés (voir Connectivité des bases de données FireDAC pour plus de détails). Le fait de les définir sur '*' évite l'utilisation d'une partie de nom correspondante dans le nom complet d'un objet.