Dein Vorgehen ist insgesamt leicht fehleranfällig, wenn auch nicht unüblich.
Um derartige Probleme zu verhindern, gehe ich her und packe 'nen Timer aufs Formular.
Die letzte Zeile im FormCreate aktiviert den Timer.
In die Timerroutine kommt dann alles, was mit dem Aufbau der Datenbankverbindung, Login, ... zusammenhängt.
Wird dort z. B. das Login abgebrochen, wird das Programm mit 'nem regulären Close des Mainforms wieder beendet.
Dadurch ist keine zusätzliche Logik in der
dpr erforderlich oder ein bedingtes Application.Run.
Das Timerinterval wähle ich so, dass es für eine vollständige Initialisierung des gesamten Programmes ausreicht. Muss man halt ein bisserl probieren, in der Regel reicht eine Sekunde aber locker aus.
Der Bugreport sieht für mich so aus, als würde da 'ne Datenbankverbindung beendet, bzw. ein Dataset geschlossen, bevor es überhaupt erst richtig geöffnet und alle zugehörigen "Teile" initialisiert wurden.
Gibt es Situationen, in denen das Programm im FormCreate wieder beendet wird?
Wenn ja, ist dort sichergestellt, dass die Datenbankverbindung und alle Datasets vorher geschlossen werden?
Ist ebenfalls sichergestellt, dass nur bei erfolgreichem Datenbanklogin und Aufbau der Datenbankverbindung, DataSets geöffnet werden und/oder ein Zugriff auf sie erfolgt?
Wie verhält sich Dein Programm, wenn das Anmelden im Loginfenster nicht erfolgreich war?
Wie verhält es sich, wenn beim Laden der Variabeln aus der
DB, etwas nicht funktioniert?
In dem Umfeld dürfte der Fehler zu finden sein. Irgendwas bei der Initialisierung der Datenbankverbindung, der DataSets scheint da gehörig schief zu laufen.