Código Delphi
[-]procedure TFmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IBD1.Connected := false;
Action := cafree;
end;
Para cada ventana que se cierra, delphi comprueba si se trata del MainForm, si lo es, despues de ejecutar varios eventos, llamará a Terminate.
Tal como dice la ayuda, terminate es asincrono, por eso tarda un poquito en cerrar todo.
Una cosa es que la ventana principal desaparezca de tu vista y otra que haya terminado completamente de cerrarse todos los recursos apropiados. Puedes verlo en la Unidad Forms:
Código Delphi
[-]
procedure TCustomForm.Close;
var
CloseAction: TCloseAction;
begin
if fsModal in FFormState then
ModalResult := mrCancel
else
if CloseQuery then
begin
if FormStyle = fsMDIChild then
if biMinimize in BorderIcons then
CloseAction := caMinimize else
CloseAction := caNone
else
CloseAction := caHide;
DoClose(CloseAction);
if CloseAction <> caNone then
if Application.MainForm = Self then Application.Terminate
else if CloseAction = caHide then Hide
else if CloseAction = caMinimize then WindowState := wsMinimized
else Release;
end;
end;
procedure TCustomForm.DoClose(var Action: TCloseAction);
begin
if Assigned(FOnClose) then FOnClose(Self, Action);
ahora se pone tu base de datos en false
end;
Como ves, el evento OnClose tiene más "cosas que hacer" además de tu código. Al abrir rapidamente el programa, puede que aún no haya cerrado la base de datos, y por eso te dé el fallo.
Un saludo