Fragen zu Metadaten (FireDAC)
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.