Du weißt doch, wie die Fehlermeldung heißt.
Bei den
ADO-Komponenten bekommt man auch einen nummerischen Fehlercode. Geht das bei FireDac auch?
Wenn ja:
Ein Try-Except um die Problemstelle und konkret diese Fehlernummer abfragen (ansonsten halt den Fehlertext parsen, was bei Mehrsprachigkeit nicht mehr so leicht ist) und dann die Verbindung neu aufbauen.
Grob sowas:
Delphi-Quellcode:
AnzahlDerZulaessigenFehler := 5;
// Oder anderer Wert für die Anzahl der Versuche.
FehlerZaehler := 0;
repeat
try
// alles, was in dem Umfeld erforderlich ist ...
Datenbankkomponente.Open;
// ...
break;
except
on e :
Exception do begin
if e.ErrorCode = DerHierGeworfeneFehlerCode
then begin
// Datenbankverbindung schließen und neu aufbauen ...
end else begin
raise;
// oder sonstige, sinnvolle Fehlerbehandlung
end;
end;
end;
FehlerZaehler := FehlerZaehler + 1;
until FehlerZaehler > AnzahlderzulaessigenFehler;
// Fehlerbehandlung, falls der Verbindungsaufbau nicht funktioniert haben sollte ...
if (FehlerZaehler > AnzahlDerZulaessigenFehler)
// Fehlermeldung, das Verbindungsaufbau mehr als AnzahlDerZulaessigenFehler mal gescheitert ist ...
end;
// oder
if not DatenbankKomponenten.Active
then begin
// Fehlermeldung, das Verbindungsaufbau mehr als AnzahlDerZulaessigenFehler mal gescheitert ist ...
end;
Und ja: Vorrangig auf die Windows-Message "Achtung, wir machen gleich zu!" reagieren und das dann irgendwo "vermerken" um beim nächsten "BeforeOpen-Ereignis" ... der Datenbankkomponente ggfls. entsprechend darauf reagieren zu können.
Wenn Windows auch noch 'ne Message "Hallo, alle wieder aufwachen, es geht weiter" schickt, dann dort die Datenbankverbindung wieder herstellen, die letzte(n) Datenbankabfrage(n) wieder öffnen ...