Definieren von Verbindungen (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.

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.

Hinweis: Wenn Sie mit dem FDExplorer oder FDAdministrator eine neue persistente Verbindungsdefinition hinzufügen, während die RAD Studio-IDE ausgeführt wird, ist die Verbindungsdefinition für den FireDAC-Entwurfszeitcode nicht sichtbar. Um die persistente Verbindungsdefinitionsliste zu aktualisieren, müssen Sie FDManager erneut aktivieren oder die RAD Studio-IDE neu starten.

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.
Hinweis: Zur Entwurfszeit ignoriert FireDAC den Wert von FDManager.ConnectionDefFileName und sucht nach einer Datei in einem "Bin"-Ordner von RAD Studio oder in einem in der Registrierung angegebenen Ordner. Wird die Datei nicht gefunden, wird eine Exception ausgelöst.

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:

Defining.png

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.

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

Beispiele