Herstellen von Verbindungen (FireDAC)
Nach oben zu Arbeiten mit Verbindungen (FireDAC)
In diesem Thema wird beschrieben, wie eine Verbindung zu einem DBMS mit FireDAC geöffnet und geschlossen wird. FireDAC enthält die Komponente TFDConnection, mit der eine Verbindung zu einer Datenbank geöffnet werden kann.
Inhaltsverzeichnis
Allgemeine Informationen
Nach dem Erstellen einer Verbindungsdefinition kann die Verbindung zu einer Datenbank hergestellt werden. Im Allgemeinen gibt es dafür zwei Möglichkeiten:
- Explizit durch Setzen von TFDCustomConnection.Connected auf True oder Aufrufen einer Open-Methode.
- Implizit durch Ausführen einer Aktion, für die die Kommunikation mit einem DBMS erforderlich ist. Zum Beispiel durch Setzen der Eigenschaft Active der verknüpften TFDQuery auf True. ResourceOptions.AutoConnect muss True sein, ansonsten wird eine Exception ausgelöst.
FireDAC stellt zusätzlich zur Eigenschaft Connected mehrere TFDCustomConnection.Open-Methoden bereit. Diese Methoden ermöglichen die Verwendung eines FireDAC-Verbindungsstrings. Ein Verbindungsstring hat die Form Parameter=Wert[;...Parameter=Wert]
. Zum Beispiel:
FDConnection1.Open('DriverID=SQLite;Database=c:\test.sdb;Password=12345');
Das Ereignis BeforeConnect wird ausgelöst, bevor die Verbindung geöffnet wird. Nach dem Herstellen der Verbindung wird das Ereignis AfterConnect ausgelöst.
Behandeln von Verbindungsfehlern
Wenn das Herstellen der Verbindung fehlschlägt, dann kann in der Anwendung der Fehler mittels einer der folgenden Vorgehensweisen analysiert werden:
- Verwenden der Ereignisbehandlungsroutine TFDCustomConnection.OnError. Dies eignet sich eher für implizit geöffnete Anwendungen.
- Verwenden der try ... except ... end-Syntax. Dies ist die beste Möglichkeit für explizit hergestellte Verbindungen. Zum Beispiel:
uses
FireDAC.Stan.Consts, FireDAC.Stan.Error;
...
try
FDConnection1.Connected := True;
except
on E: EFDException do
if E.FDCode = er_FD_ClntDbLoginAborted then
; // user pressed Cancel button in Login dialog
on E: EFDDBEngineException do
case E.Kind of
ekUserPwdInvalid: ; // user name or password are incorrect
ekUserPwdExpired: ; // user password is expired
ekServerGone: ; // DBMS is not accessible due to some reason
else // other issues
end;
end;
Hinweis: Das Anmelde-Dialogfeld behandelt den Fehlertyp
ekUserPwdInvalid
automatisch dadurch, dass der Benutzer aufgefordert wird, die Anmeldeinformationen erneut einzugeben. Setzen Sie TFDGUIxLoginDialog.LoginRetries auf -1, um diese Behandlung zu deaktivieren. Der FehlerekUserPwdExpired
wird ebenso automatisch behandelt, indem der Benutzer aufgefordert wird, das Passwort erneut einzugeben.
Wenn die Verbindungswiederherstellung konfiguriert ist, dann versetzt der Fehlertyp ekServerGone
eine Verbindung in den anfänglichen Offline-Status. Alternativ kann mit der TFDCustomConnection.Ping-Methode der Fehler ekServerGone
vermieden und die Verbindung aktiviert werden, wenn ein DBMS verfügbar ist.
Weitere Einzelheiten finden Sie unter Fehlerbehandlung.
Verwenden des Anmelde-Dialogfeldes
In GUI-Anwendungen kann mit der TFDGUIxLoginDialog-Komponente Endbenutzern die Eingabe von Datenbank-Anmeldeinformationen ermöglicht werden. Das Anmelde-Dialogfeld kann auf eine der folgenden Weisen eingebunden werden:
- Legen Sie die
TFDGUIxLoginDialog
-Komponente auf einem Formular ab. Eine weitere Konfiguration ist nicht erforderlich. Dieses Dialogfeld ist für Anwendungen ein Standarddialogfeld für die Anmeldung. - Legen Sie die
TFDGUIxLoginDialog
-Komponente auf einem Formular ab, und setzen Sie TFDCustomConnection.LoginDialog auf dieses Dialogfeld. Das Dialogfeld wird von dieser Verbindung privat verwendet.
Das Anmelde-Dialogfeld wird automatisch von TFDCustomConnection aufgerufen, wenn LoginPrompt = True:
Mit der Eigenschaft TFDGUIxLoginDialog.VisibleItems können Sie festlegen, welche Verbindungsdefinitionsparameter dem Endbenutzer angezeigt werden und wie sie benannt werden sollen. Mit der letzten Option können Sie das Anmelde-Dialogfeld lokalisieren. Beispielsweise könnten deutschsprachige SQL Server-Entwickler Folgendes festlegen:
with FDGUIxLoginDialog1.VisibleItems do begin
Clear;
Add('Server');
Add('User_name=Benutzer');
Add('Password=Kennwort');
Add('OSAuthent');
end;
FDConnection1.LoginDialog := FDGUIxLoginDialog1;
FDConnection1.Connected := True;
Wenn ein DBMS den Ablauf von Passwörtern unterstützt und das Passwort abgelaufen und TFDGUIxLoginDialog.ChangeExpiredPassword True ist, wird der Benutzer zur Eingabe eines neuen Passworts aufgefordert.
Schließen von Verbindungen
Die Verbindung kann auf eine der folgenden Weisen geschlossen werden:
- Explizit durch Setzen von TFDCustomConnection.Connected auf False.
- Implizit, wenn das Verbindungsobjekt über keine weiteren Anweisungen und Datenmengen mehr verfügt und ResourceOptions.KeepConnection False ist.
FireDAC beendet die aktiven Transaktionen, sofern vorhanden, bevor die Verbindung geschlossen wird. Mit TxOptions.DisconnectAction steuern Sie die durchgeführte Aktion.
Vor Beenden der Verbindung wird auch das Ereignis TFDCustomConnection.BeforeDisconnect ausgelöst. Nach dem Schließen der Verbindung wird das Ereignis AfterDisconnect ausgelöst.