Entwickler-Ecke

Datenbanken - FireDAC LoginDialog mit Abbrechen beenden


jackle32 - Fr 14.10.16 20:27
Titel: FireDAC LoginDialog mit Abbrechen beenden
Hallo zusammen,

folgende Situation:
Ich benutze im meinem Projekt die FireDAC Komponenten um auf eine Access-Datenbank zuzugreifen.
Da die Datenbank nicht dauerhaft verbunden sein soll, gebe ich dem Nutzer die Möglichkeit zur Laufzeit die Anmeldung vorzunehmen.
Genau zu diesem Zweck gibt es ja die TFDGUIxLoginDialog Komponente.

In der Hilfe von RAD Studio gibt es folgenden Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
try
   FDConnection1.Connected := True;
 except
   on E: EAbort do
     ; // 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;


Funktioniert auch soweit gut (zusätzlich mit den extra aufgeführten Hinweisen).

Mein Problem ist jetzt nur, dass beim drücken des Abbrechen Buttons im Login-Dialog die Exception-Routine gar nicht aufgerufen wird (bei anderen Fehlern, wie falschem Passwort schon), sondern eine FireDAC Exception Meldung kommt.
Die ist erstens sehr kryptisch und zweites brauche ich keine, da ein Cancel ja ein ganz normaler Vorgang ist.

Hat jemand von euch schon mal mit dieser Komponente gearbeitet bzw. den Fehler auch schon mal umschiffen müssen?
Google ist dabei leider auch nicht wirklich hilfreich.

Gruß,
Jack


Delete - Fr 14.10.16 20:47

- Nachträglich durch die Entwickler-Ecke gelöscht -


jackle32 - Fr 14.10.16 22:09

Hallo,

nein ich habe da nix stehen. Habe mal mit ShowMessage() versucht eine Meldung zu generieren, es passiert aber nix.
Mit einem Test per Haltepunkt setzen, habe ich gesehen, dass ich gar nicht in den Exception Bereich bzw. in keinen den ich bis jetzt abfange rein komme.


Delete - Sa 15.10.16 00:03

- Nachträglich durch die Entwickler-Ecke gelöscht -


jackle32 - Mo 02.01.17 14:40

Hallo zusammen,

habe mich nach längerer Zeit nochmal diesem Thema gewidmet und des Rätsels Lösung gefunden.
Hier die Erklärung falls nochmal jemand darüber stolpern sollte.

Wird der Aufgerufenen Dialog mit Abbrechen beendet wird keine Exception der Klasse "EFDDBEngineException" und auch nicht der Klasse "EAbort" erzeugt.
Erzeugt wird eine Exception der Klasse "EFDException"

Somit kann die Fehlermeldung abgefangen werden indem in den except Block aus meinem ersten Post noch der Abschnitt


Delphi-Quelltext
1:
2:
3:
4:
on E: EFDException do
begin
  //Was getan werden soll
end;


eingefügt wird.

Hoffe es spart dem ein oder anderen etwas Zeit

Gruß,
Jack