Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Connection Exception nach Ruhezustand / Sleep (https://www.delphipraxis.net/207679-connection-exception-nach-ruhezustand-sleep.html)

fabi17 22. Apr 2021 08:26

Connection Exception nach Ruhezustand / Sleep
 
Hallo zusammen,

ich habe ein relativ großes Programm zum Erfassen von Daten mit mehreren Usern geschrieben. Nun kommt es ab und zu vor, dass ein User das Programm über Nacht offen lässt und am nächsten Morgen, nachdem der PC dann aus dem Standby erwacht, dann eine Exception (ADO) mit Fehler beim Verbinden bekommt sobald er im Programm etwas macht. Was ist hierzu der beste Weg, die Exception abzufangen und die Verbindung wiederherzustellen?

Lg
Fabi

hoika 22. Apr 2021 08:42

AW: Connection Exception nach Ruhezustand / Sleep
 
Hallo,

Delphi-Quellcode:
try
  CheckConnection;
except?
  Reconnect;
end;

TigerLilly 22. Apr 2021 08:56

AW: Connection Exception nach Ruhezustand / Sleep
 
Wenn es nur definierte Stellen gibt, an denen das Programm sich befinden kann, kannst du testen + reconnecten. Sonst müsstest du vor jedem Zugriff (zB DataSet.Next) auf die DB testen + das geht nicht immer, weil damit auch der Context verlorengeht. Vielleicht wäre es eine Option, das Programm bei Inaktivität zu schließen? Oder wenigstens auf einen definierten Punkt zurückzufahren?

fabi17 22. Apr 2021 09:11

AW: Connection Exception nach Ruhezustand / Sleep
 
Hi,

ich hatte mir eine andere (globale) Lösung als try, except erhofft (ggf. mit timer?), da ich sonst in dutzende Prozeduren reinspringen muss...

hoika 22. Apr 2021 09:14

AW: Connection Exception nach Ruhezustand / Sleep
 
Hallo,
vor jeder Methode ein TryConnect machen.

fabi17 22. Apr 2021 09:21

AW: Connection Exception nach Ruhezustand / Sleep
 
Zitat:

Zitat von TigerLilly (Beitrag 1487565)
Wenn es nur definierte Stellen gibt, an denen das Programm sich befinden kann, kannst du testen + reconnecten. Sonst müsstest du vor jedem Zugriff (zB DataSet.Next) auf die DB testen + das geht nicht immer, weil damit auch der Context verlorengeht. Vielleicht wäre es eine Option, das Programm bei Inaktivität zu schließen? Oder wenigstens auf einen definierten Punkt zurückzufahren?

hatte auch überlegt, das Programm nachts einfach zu schließen. Aber wenn der User noch Forms offen hat und ich die exe von außerhalb schließe, wird das Fromclose Event nicht ausgeführt, oder?

fabi17 22. Apr 2021 09:22

AW: Connection Exception nach Ruhezustand / Sleep
 
Zitat:

Zitat von hoika (Beitrag 1487567)
Hallo,
vor jeder Methode ein TryConnect machen.

danke, wenn es keine andere Lösung gibt, muss ich das so machen...

Jasocul 22. Apr 2021 09:50

AW: Connection Exception nach Ruhezustand / Sleep
 
Das Problem kommt mir bekannt vor, wenn auch in anderer Konstellation. Bei uns gibt es eine Anwendung, die im mobilen Arbeiten genutzt wird. Es besteht daher immer das Risiko, dass die Verbindung verloren geht. Also gilt das Prinzip, keine datensensitiven Komponenten zu verwenden. Die DB-Verbindung wird nur genutzt, wenn es erforderlich ist. Sie wird zwar nach Möglichkeit offen gehalten, aber wenn die weg ist, kann halt nicht aktualisiert/gespeichert werden. Im schlimmsten Fall gehen die Arbeiten zwischen 2 Kontrollpunkten im Programm verloren.

1. Du könntest dein Programm ähnlich anpassen, was ziemlich viel Aufwand sein könnte.
2. Du baust an allen wichtigen Stellen eine Connect-Prüfung ein und reagierst mit einem Reconnect. Die datensensitiven Elemente verlieren dann aber auch die Daten. Übrigens muss ein Reconnect auch nicht immer funktionieren.
3. Du machst den Anwendern klar, dass eine Datenbankanwendung ein Time-Out kriegen kann. Die Konsequenzen sind dann eben, dass die zuletzt erfassten Daten futsch sind. Wenn die Daten so dramatisch wichtig sind, sollten die sowieso zu ende erfasst werden. Wenn sie nicht so wichtig sind, dürfte es auch kein Drama sein, diese nochmal zu erfassen.

Im schlimmsten Fall kann es sogar passieren, dass die tägliche Datenbanksicherung blockiert wird, wenn die Anwendung noch aktiv ist. So einen Fall hatten wir vor 2 Jahren auch mal.
Ich würde einen Timer einbauen, der die Verbindung prüft und gegebenenfalls die Anwendung beendet. Man kann dann ja noch eine Warnung ausgeben, dass die Anwendung in x Minuten wegen Inaktivität/Verbindungsfehler geschlossen wird.

Zitat:

Zitat von fabi17 (Beitrag 1487568)
Aber wenn der User noch Forms offen hat und ich die exe von außerhalb schließe, wird das Fromclose Event nicht ausgeführt, oder?

Du kannst ja im Programm durchgehen, welche Forms offen sind und diese dann über ein Close schließen. Das FormClose müsste dann auch ausgeführt werden.

Bernhard Geyer 22. Apr 2021 10:11

AW: Connection Exception nach Ruhezustand / Sleep
 
Wir reagieren auf die Windows-Events und beenden die DB-Verbindung.
Beim wiederaufwachen des REchners wird die Verbindung wieder aufgebaut.

alex517 22. Apr 2021 13:11

AW: Connection Exception nach Ruhezustand / Sleep
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1487574)
Wir reagieren auf die Windows-Events und beenden die DB-Verbindung.
Beim wiederaufwachen des REchners wird die Verbindung wieder aufgebaut.

Auf welche Windows-Events reagiert ihr?

Alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz