Herstellen von Verbindungen (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.

Allgemeine Informationen

Nach dem Erstellen einer Verbindungsdefinition kann die Verbindung zu einer Datenbank hergestellt werden. Im Allgemeinen gibt es dafür zwei Möglichkeiten:

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 Fehler ekUserPwdExpired 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:

FireDACLoginFDDemo.png

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:

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.

Siehe auch