[Lazarus-es] error al liberar formulario

Paola Bruccoleri pbruccoleri en adinet.com.uy
Sab Nov 6 00:10:35 CET 2010


El 05/11/2010 08:13 p.m., José Mejuto escribió:
> Hello Paola,
>
> Friday, November 5, 2010, 10:24:42 PM, you wrote:
>
> PB>  en el onclose del form:
> PB>     dbEquipos.Close;
> PB>     FreeAndNil(DMPrincipal);  // es un datamodule
> PB>     CloseAction:=caFree ;
>         ^^^^^^^^^^^^^^^^^^^^^
>
> El formulatio ya se libera al cerrarse (automáticamente debido al
> caFree), no puedes hacerle luego un freeAndNil a esa variable, por que
> la dirección a la que apunta ya ha sido liberada.
si, pero hay algo raro y que no entiendo....

acabo de descubrir que el lío está en el FreeAndNil(DMPrincipal); (es un 
datamodule)
lo comenté y ahora me funciona todo correctamente (por lo menos en las 
pruebas iniciales que hice); incluso, no se me cuelga la aplicación 
luego de cerrar el reporte.
Todas estas pruebas eran en base a mi primer problema, el del reporte...

Les explico:
el DMPrincipal se crea al abrir ese form, y supuestamente se destruye en 
el onclose...

procedure TABMEquipos.FormCreate(Sender: TObject);
begin
   Application.CreateForm(TDMPrincipal,DMPrincipal);
   dbEquipos.Open;
end;

procedure TABMEquipos.FormClose(Sender: TObject; var CloseAction: 
TCloseAction);
begin
   dbEquipos.Close;
   //DMPrincipal.Free;
   CloseAction:=caFree ;
end;

ahora.... el datamodule tiene estos eventos:

procedure TDMPrincipal.DataModuleCreate(Sender: TObject);
var
   cPathWithFileDB : String ;
begin
   cPathWithFileDB := Principal.cPathDB + Principal.cFileDB;
   try
     ServiamConnectionDB.Database  := '';
     ServiamConnectionDB.Database  := cPathWithFileDB;   // alias: 
serviam por si lo uso
     ServiamConnectionDB.Connected := True ;
   except
     MessageDlg('¡¡¡ Atención...!!!','¡¡¡ No se pudo conectar a la base 
de datos...!!! -> ' + #13 +
              cPathWithFileDB,mtWarning,[mbOK],'0');
   end;
End;

procedure TDMPrincipal.DataModuleDestroy(Sender: TObject);
begin
   ServiamConnectionDB.Connected :=False ;
end;


qué tiene que ver que comentando el FreeAndNil(DMPrincipal) ya no me 
cause problemas??

chauuuuuuuu





More information about the Lazarus-es mailing list