Definieren von Verbindungen (FireDAC)
Nach oben zu Arbeiten mit Verbindungen (FireDAC)
Beschreibt, wie FireDAC-Verbindungsparameter gespeichert und verwendet werden, sowie die Bedeutung von Verbindungsdefinitionen. Zum Festlegen von Verbindungsparametern muss eine Anwendung eine Verbindungsdefinition verwenden. Die Verbindungsdefinition besteht aus einer Reihe von Parametern. Eine Verbindung kann auch in einen Pool gestellt werden.
Inhaltsverzeichnis
Allgemeine Informationen
Eine Verbindungsdefinition besteht aus einem Satz von Parametern, die definieren, wie eine Anwendung mit einem DBMS über einen bestimmten FireDAC-Treiber verbunden wird. Sie entspricht einem BDE-Alias, ADO-UDL (gespeicherter OLEDB-Verbindungsstring) oder ODBC-Datenquellennamen (DSN). Die Liste mit den unterstützten Datenbankmanagementsystemen und zugehörigen Parametern finden Sie unter FireDAC-Datenbankkonnektivität.
FireDAC unterstützt 3 Arten von Verbindungsdefinitionen:
Typ | Beschreibung | Vorteile | Nachteile |
---|---|---|---|
Persistent | Hat einen eindeutigen Namen, wird vom FDManager verwaltet und in einer Verbindungsdefinitionsdatei gespeichert. | Kann einmal definiert und für viele Anwendungen verwendet werden. Kann in einen Pool gestellt werden. | Die Parameter (Serveradresse, DB-Name usw.) sind öffentlich sichtbar und können versehentlich geändert werden.
FDManager muss erneut aktiviert oder die Delphi-IDE neu gestartet werden, damit eine neu hinzugefügte Definition zur Entwurfszelt sichtbar ist. |
Privat | Hat einen eindeutigen Namen, wird vom FDManager verwaltet, wird aber NICHT in einer Verbindungsdefinitionsdatei gespeichert. | Verbindungsdefinitionsparameter sind "außerhalb" der Anwendung nicht sichtbar. Kann in einen Pool gestellt werden. | Die Anwendung muss nach dem Programmneustart eine Verbindungsdefinition erstellen und kann diese nicht mit anderen Programmen gemeinsam nutzen.
Kann nicht zur Entwurfszeit erstellt werden. |
Temporär | Hat keinen Namen, wird nicht in einer Verbindungsdefinitionsdatei gespeichert und wird nicht vom FDManager verwaltet. | Am einfachsten erstellen Sie eine Verbindungsdefinition durch Festlegen der Eigenschaft TFDConnection.Params.
Kann zur Entwurfszeit mit dem TFDConnection-Komponenteneditor erstellt werden. |
Wie bei privat. Kann außerdem nicht über den Namen referenziert werden und kann nicht in einen Pool gestellt werden. |
Verbindungsdefinitionsdatei
Die persistenten Verbindungsdefinitionen werden in einer externen Datei, der Verbindungsdefinitionsdatei, gespeichert. Diese Datei hat das Format einer Standard-INI-Textdatei. Sie kann zunächst mit den Hilfsprogrammen FDExplorer oder FDAdministrator manuell oder über Code bearbeitet werden. Standardmäßig heißt die Datei C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini
.
Einfacher Inhalt dieser Datei:
[Oracle_Demo]
DriverID=Ora
Database=ORA_920_APP
User_Name=ADDemo
Password=a
MetaDefSchema=ADDemo
;MonitorBy=Remote
[MSSQL_Demo]
DriverID=MSSQL
Server=127.0.0.1
Database=Northwind
User_Name=sa
Password=
MetaDefSchema=dbo
MetaDefCatalog=Northwind
MonitorBy=Remote
In einer Anwendung kann in der Eigenschaft FDManager.ConnectionDefFileName ein Name für eine Verbindungsdefinitionsdatei festgelegt werden. FireDAC sucht nach einer Verbindungsdefinitionsdatei an den folgenden Orten:
- Wenn ConnectionDefFileName angegeben ist:
- Suche nach einem Dateinamen ohne Pfad, dann Suche in einem Anwendungs-EXE-Ordner.
- Ansonsten Verwendung des angegebenen Dateinamens.
- Wenn ConnectionDefFileName nicht angegeben ist:
- Suche nach FDConnectionDefs.ini in einem Anwendungs-EXE-Ordner.
- Wenn die Datei dort nicht gefunden wird, Suche nach einer im Registrierungsschlüssel HKCU\Software\Embarcadero\FireDAC\ConnectionDefFile angegebenen Datei. Standardmäßig heißt die Datei
C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini
.
Wenn FDManager.ConnectionDefFileAutoLoad True ist, wird automatisch eine Verbindungsdefinitionsdatei geladen. Ansonsten muss sie durch Aufruf der Methode FDManager.LoadConnectionDefFile vor der ersten Verwendung der Verbindungsdefinitionen geladen werden. Zum Beispiel vor dem Setzen von TFDConnection.Connected auf True.
Erstellen einer persistenten Verbindungsdefinition
Eine persistente Verbindungsdefinition kann mit FDExplorer oder FDAdministrator erstellt werden. Im Folgenden wird gezeigt, wie Sie dies im Code durchführen. Siehe auch die Demo Connection Definitions.
Das folgende Codefragment erstellt eine Verbindungsdefinition mit Namen "MSSQL_Connection", die alle Parameter enthält, die zum Herstellen einer Verbindung zum lokal ausgeführten Microsoft SQL Server mit der Betriebssystemauthentifizierung (SSPI) erforderlich sind:
uses
FireDAC.Comp.Client, FireDAC.Stan.Def, FireDAC.Stan.Intf,
// Required uses for creating a persistent connection with MSSQL (to fdconnectiondefs.ini)
FireDAC.Phys.MSSQL,
FireDAC.Phys.MSSQLDef;
const
cNameConnDef = 'MSSQL_Connection';
procedure TForm1.PersistentConnectionClick(Sender: TObject);
var
oDef: IFDStanConnectionDef;
oParams: TFDPhysMSSQLConnectionDefParams; // MSSQL connection params
begin
// Adding new persistent connection to fdconnectiondefs.ini
FDManager.ConnectionDefs.AddConnectionDef;
oDef := FDManager.ConnectionDefs.AddConnectionDef;
oDef.Name := cNameConnDef;
oParams := TFDPhysMSSQLConnectionDefParams(oDef.Params);
oParams.DriverID := 'MSSQL'
oParams.Database := 'Northwind';
oParams.UserName := '.............';
oParams.Password := '.............';
oParams.Server := '127.0.0.1';
oParams.OSAuthent := false;
oParams.MARS := false;
oDef.MarkPersistent;
oDef.Apply;
end;
.....................
procedure TForm1.ConnectionClick(Sender: TObject);
FDConnection1.ConnectionDefName := cNameConnDef;
FDConnection1.Connected := True;
end;
FDManager ist eine globale Instanz des FireDAC-Verbindungsmanagers. Die Eigenschaft FDManager.ConnectionDefs: IFDStanConnectionDefs ist eine Sammlung von persistenten und privaten Verbindungsdefinitionen. Die Methode AddConnectionDef fügt eine neue Verbindungsdefinition hinzu. Die Methode MarkPersistent kennzeichnet eine Verbindungsdefinition als persistent. Die Methode Apply speichert eine Verbindungsdefinition in einer Verbindungsdefinitionsdatei. Ohne den Aufruf von MarkPersistent wäre die Verbindungsdefinition privat.
Erstellen einer privaten Verbindungsdefinition
Eine private Verbindungsdefinition kann nur im Code erstellt werden. Der Code entspricht dem obigen, aber ohne den Aufruf von MarkPersistent.
Sie können auch ein ähnliches Verfahren wie für die BDE verwenden:
var
oParams: TStrings;
begin
oParams := TStringList.Create;
oParams.Add('Server=127.0.0.1');
oParams.Add('Database=Northwind');
oParams.Add('OSAuthent=Yes');
FDManager.AddConnectionDef('MSSQL_Connection', 'MSSQL', oParams);
.....................
FDConnection1.ConnectionDefName := 'MSSQL_Connection';
FDConnection1.Connected := True;
Erstellen einer temporären Verbindungsdefinition
Zur Entwurfszeit
Eine temporäre Verbindungsdefinition kann zur Entwurfszeit mit dem FireDAC-Verbindungseditor erstellt werden. Doppelklicken Sie dazu auf eine TFDConnection-Komponente, um den Editor aufzurufen:
Oder klicken Sie im Design-Modus auf das TFDConnection-Symbol, und wählen Sie im Objektinspektor aus der Eigenschaft DriverName einen Treiber aus. Erweitern Sie danach die Eigenschaft Params, und legen Sie die erforderlichen Eigenschaften fest. Als letzten Schritt setzen Sie die Eigenschaft Connected auf True.
Der FDExplorer kann auch zur Entwurfszeit über das Popup-Menü für die Komponente TFDConnection aufgerufen werden, um den Inhalt einer Datenbank zu durchsuchen und Ad-hoc-Abfragen auszuführen.
Zur Laufzeit
Füllen Sie die Eigenschaft TFDConnection.Params aus, um im Code eine temporäre Verbindung zur Laufzeit zu erstellen. Das ist der einfachste und bequemste Weg, eine Verbindungsdefinition zu erstellen.
FDConnection1.DriverName := 'MSSQL';
FDConnection1.Params.Add('Server=127.0.0.1');
FDConnection1.Params.Add('Database=Northwind');
FDConnection1.Params.Add('User_name=sa');
FDConnection1.Connected := True;
Eine weitere Möglichkeit zum Erstellen einer temporären Verbindungsdefinition zur Laufzeit ist, den Typ der Eigenschaft TFDConnection.Params in eine DBMS-spezifische Klasse umzuwandeln. Dies ist der sicherste Weg für das Erstellen einer Verbindungsdefinition, weil mit Code Insight der IDE und mit der Syntaxprüfung des Compilers die Richtigkeit überprüft werden kann.
uses
FireDAC.Phys.IBDef, FireDAC.Phys.IBWrapper;
......
FDConnection1.DriverName := 'IB';
with FDConnection1.Params as TFDPhysIBConnectionDefParams do begin
Protocol := ipTCPIP;
Server := '127.0.0.1';
Database := 'c:\IB\employee.gdb';
UserName := 'sysdba';
Password := 'masterkey';
end;
FDConnection1.Connected := True;
Eine andere Möglichkeit besteht darin, zur Laufzeit einen Verbindungsstring in der Eigenschaft TFDConnection.ConnectionString anzugeben. Ein Verbindungsstring kann für bestimmte Anwendungstypen eine praktische Möglichkeit zum Festlegen von Verbindungsdefinitionsparametern darstellen. Zum Beispiel:
FDConnection1.ConnectionString := 'DriverID=MSSQL;Server=127.0.0.1;Database=Northwind;User_name=sa';
FDConnection1.Connected := True;
Bearbeiten einer Verbindungsdefinition
Für eine Anwendung kann es erforderlich sein, eine Verbindungsdefinition zur Laufzeit mit dem Standarddialogfeld "FireDAC-Verbindungseditor" zu erstellen und zu bearbeiten. Verwenden Sie den folgenden Code, um eine in TFDConnection gespeicherte Verbindungsdefinition zu bearbeiten:
uses
FireDAC.VCLUI.ConnEdit;
...
if TfrmFDGUIxFormsConnEdit.Execute(FDConnection1, '') then
FDConnection1.Connected := True;
Verwenden Sie den folgenden Code, um eine als FireDAC-Verbindungsstring dargestellte Verbindungsdefinition zu bearbeiten:
uses
FireDAC.VCLUI.ConnEdit;
...
var
sConnStr: String;
...
sConnStr := FDConnection1.ResultConnectionDef.BuildString();
if TfrmFDGUIxFormsConnEdit.Execute(sConnStr, '') then begin
FDConnection1.ResultConnectionDef.ParseString(sConnStr);
FDConnection1.Connected := True;
end;
Siehe auch
- Das Hilfsprogramm FDAdministrator
- Das Hilfsprogramm FDExplorer
- FireDAC-Datenbankkonnektivität
- Multithreading
- Pfadvariablen
Beispiele
- FireDAC Connection Definitions (Beispiel)
- FireDAC Create Connection (Beispiel)
- FireDAC InterBase (Beispiel)
- FireDAC MS Access (Beispiel)
- FireDAC MS SQL (Beispiel)
- FireDAC MySQL (Beispiel)
- FireDAC SQLite (Beispiel)