Fragen zu Metadaten (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu FAQ (FireDAC)

Dieses Thema enthält eine Liste mit Fragen und Antworten zum Abrufen von Metadaten.

F1: Gibt es eine Methode zum Überprüfen, ob eine Tabelle in einer Datenbank vorhanden ist?

A: Es gibt zwei grundlegende Methoden:

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;

Die erste Methode ist stärker optimiert.

F2: Können in Oracle mit TFDMetaInfoQuery die Paketprozeduren abgerufen werden?

A: Der folgende Code gibt eine Liste der Prozeduren für das Oracle-Paket PACKAGE_NAME zurück.

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

F3: Wie kann ich Indexnamen mit TFDMetaInfoQuery ermitteln?

A: Der folgende Code gibt eine Liste der Indizes für die MY_TAB-Tabelle zurück.

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

F4: Der Abfragegenerator, Entwurfszeiteditoren und Funktionen zum Abrufen von Metadaten geben zu meinem aktuellen Schema gehörende Objektnamen zurück, denen der Schema-/Katalogname vorangestellt ist. Wie kann ich den Schema-/Katalognamen ausschließen?

A: Zwei Optionen:

  • Setzen Sie AFullName im TFDConnection.GetXxxxName-Aufruf auf False.
  • FireDAC verfügt über zwei allgemeine Verbindungsdefinitionsparameter: MetaDefCatalog und MetaDefSchema. Je nach DBMS werden beide oder nur einer davon unterstützt (Einzelheiten finden Sie unter FireDAC-Datenbankkonnektivität). Wenn das Objekt zu einem angegebenen MetaDefCatalog-Katalog/MetaDefSchema-Schema gehört, dann wird dieser Katalog-/Schemaname aus einem Objektnamen ausgeschlossen. Setzen Sie deshalb MetaDefCatalog/MetaDefSchema auf den Namen Ihres Entwicklungskatalogs/-schemas, wenn Sie Ihre Anwendung an einen anderen Katalog/an ein anderes Schema weitergeben müssen.

F5: Ich rufe eine gespeicherte Oracle-Prozedur mit einem öffentlichen Synonym auf, aber FireDAC hängt immer den Schemanamen an den Namen der gespeicherten Prozedur an. Wie kann ich das vermeiden?

A: FireDAC verfügt über zwei allgemeine Verbindungsdefinitionsparameter: MetaCurCatalog und MetaCurSchema. Je nach DBMS werden beide oder nur einer davon unterstützt (Einzelheiten finden Sie unter FireDAC-Datenbankkonnektivität). Durch Setzen dieser Parameter auf "*" vermeiden Sie die Verwendung des entsprechenden Namensteils in einem vollständigen Objektnamen.