[ERLEDIGT]FB2.5 + ZEOS, Db-Server auf Netzwerk, wie reconn.?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

[ERLEDIGT]FB2.5 + ZEOS, Db-Server auf Netzwerk, wie reconn.?

Beitrag von Soner »

Hallo,
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
 


Wie macht ihr das? Wenn eine Verbindung abbricht, wie stellt ihr es wieder her?

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;
 

Antworten