Hallo Leute,
ich habe jetzt eine Lösung für mein Problem gefunden.
Leider weiß ich zwar nicht wie man in meinem Fall einen Verbindungsausfall richtig erkennt, aber das Problem habe ich ein wenig umgangen. Das "SELECT 1" oder auch eine etwas tiefergehende Abfrage (bspw. nach dem ersten oder letzten Element einer bestimmten Tabelle) wie es mir von Iwo Asnet vorgeschlagen wurde, hat leider nicht funktioniert.
Hier mein Lösungsweg:
1. Ich gehe davon aus, dass die Verbindung zu meiner Datenbank immer besteht.
2. Über eine AppException fange ich alle Fehler meines Programms ab.
3. Entsteht der Fehler bei einer Datenbankabfrage versuche ich automatisch die Verbindung neu aufzubauen. Dazu trenne ich die Verbindung und starte anschließend einen TTimer.
4. Bei jedem Start des Timerevents versuche ich nun die Verbindung wieder aufzubauen.
Hier ein Teil des Quellcodes:
Delphi-Quellcode:
//im AppException-Event des Programms...
ADOC_CNC.Connected:=false;
Timer1.Enabled:=true;
//nun das Timer-Event...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Verbindung neu aufbauen
try
ADOC_CNC.Connected:=true;
if ADOC_CNC.Connected
then
Timer1.Enabled:=false;
except
//Verbindungsaufbau gescheitert -> neuer Versuch im nächsten Event
end;
end;
Damit ist zwar nicht alles geklärt, aber ich kann damit zumindest erst mal weiter.
Danke euch allen!