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.
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.