Questions relatives aux métadonnées (FireDAC)
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.