Das nach der Fehlermeldung beim Beenden das Programm nicht geschlossen werden kann, liegt höchstwahrscheinlich daran, dass das Speichern in OnCloseQuery oder OnClose durchgeführt wird (ohne try/except-Block) und nicht in OnDestroy.
Zitat:
Das Problem in OnClose ist, das danach noch weitere Ereignisse ausgelöst werden. Wenn nun in OnClose was schief läuft (
Exception), dann bricht die Ereignisausführung ab, und du stehst wieder "mitten" im Programm. [...] Wenn hingegen im OnDestroy-Ereignis was schief geht, dann wird dein Programm trotzdem beendet.