da hier sehr viele ZEOS-Experten gibt, habe ich mir gedact, ich frage mal hier.
Vorweg:
Zeos 7.2.1-rc, Lazarus 1.6.4 Svn 54278, Fpc 3.0.2, Firebird 2.5, Windows 7/xp alles 32Bit.
Der DB-Server liegt auf einem anderen Computer. Während Programm in Wartezustand läuft, eine TDBGrid zeigt eine Liste, trenne ich Netzwerkverbindung.
Zeos bekommt davon nichts, TZConnection.OnDisconnected wird nicht aufgerufen und das scheint normal zu sein.
TZConnection.Connected liefert true, obwohl noch keine Netzwerkverbindung vorhanden ist und das scheint auch normal zu sein.
Bei Aufruf von TZConnection.PingServer stürzt das Programm.
Ich denke die Funktion TZConnection.Ping ist dafür gemacht und das liefert auch richtigerweise false.
Als Lösung dafür versuche ich über Except-Behandlung zu verbinden :
Code: Alles auswählen
ShowMessage('NIcht verbunden'); //Während das zeigt stelle ich wieder Netzwerkverbindung
if not ZConnection1.Ping then ZConnection1.Connect; //wird nicht verbunden
//alternativ, eine wird ausgeführt/auskommentiert
if not ZConnection1.Ping then ZConnection1.Reconnect; //programm stürzt ab
EDIT:
Wenn ich mir recht überlege ist es TZConnection.PingServer. Er setzt auch Connected auf false und ruft auch AfterDisconnect auf.
Aber TZConnection.PingServer läßt das ganze Programm abstürzen.
EDIT2:
ZConnection1.Connected auf false setzen erzeugt Fehler.(Der Gedanke ist erst false dann true setzen).
EDIT3:
Falls jemand sich nach Jahren hier verirrt, ich habe die Lösung nach lange Internetrecherche gefunden und die Lösung ist sehr delphi- und pascaltypisch:
Code: Alles auswählen
ShowMessage('Datenbankverbindung abgebrochen, starten Sie Ihr Programm neu.');
Halt;