Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-10-2010
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Liberar el DataModule

Buenas a todos.
Tengo una duda sobre como liberar el módulo de datos.
Tengo una ventana principal que llama a otra ventana.
La segunda ventana en el evento onCreate crea un datamodule. Cuando a la segunda ventana la libero con el método free, también se libera el datamodule que había creado?
Así creo la segunda ventana.
Código Delphi [-]
procedure TfrmMain.Actualizar1Click(Sender: TObject);
var
  FPuestos:TfrmPuestos;
begin
  // actualizacion de los puestos
  FPuestos:=TfrmPuestos.Create(self);
  try
    FPuestos.ShowModal;
  finally
    FPuestos.Free;
  end;
end;
Así creo el datamodule en el form FPuestos
Código Delphi [-]
procedure TfrmPuestos.FormCreate(Sender: TObject);
begin
  inherited;
  dm:=TdmPuestos.Create(self);
end;

Desde ya muchas gracias a todos por la ayuda.
Responder Con Cita
  #2  
Antiguo 09-10-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Cañones Ver Mensaje
Cuando a la segunda ventana la libero con el método free, también se libera el datamodule que había creado?
Así es Cañones, ya que das a Self (el segundo formulario) como dueño de la instancia de módulo de datos que creas.

Cuando un objeto de clase derivada de TComponent (como lo es un formulario) es destruido, éste se encarga de destruir (liberar) también a todos los otros componentes que adueña.

Sin entrar en detalles de metodologías, estilo o eficiencia, la implementación que haces es correcta. Solamente ten en cuenta que la variable dm seguirá "apuntando" al cadáver del módulo de datos cuando éste sea destruido como parte de la destrucción del segundo formulario.

Si existe de tu parte el permiso para que alguna sección del programa acceda a esa variable sin que necesariamente exista ese segundo formulario, convendría entonces asignarle Nil en algún evento propicio de éste último, como OnDestroy.

Espero haber ayudado.

Al González.
Responder Con Cita
  #3  
Antiguo 09-10-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Corríjeme si me equivoco, Al, pero lo que comentas puede ser suplido con FreeAndNil, no?

Código:
FPuestos:=TfrmPuestos.Create(self);
try
  FPuestos.ShowModal;
finally
  FreeAndNil( FPuestos )
end;
Responder Con Cita
  #4  
Antiguo 09-10-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Corríjeme si me equivoco, Al, pero lo que comentas puede ser suplido con FreeAndNil, no?

Código:
FPuestos:=TfrmPuestos.Create(self);
try
  FPuestos.ShowModal;
finally
  FreeAndNil( FPuestos )
end;
El FreeAndNil que has puesto no pone en blanco la variable dm, solamente la variable FPuestos (un componente no tiene manera de conocer a qué variables se han asignado sus componentes adueñados). El FreeAndNil no está demás con FPuestos, pero si lo hicieras también con dm (en lugar de simplemente asignarle Nil a esa variable en, digamos, el evento OnDestroy de TfrmPuestos), sería un tanto innecesario, puesto que la vida de dm ya está ligada a la vida del formulario FPuestos (y es como se quiere).

En concreto, FreeAndNil es para liberar la instancia a la que apunta una variable y poner esa variable en blanco, y, dado este caso, la variable dm ya tendrá lo primero, pero no lo segundo (lo cual se puede hacer con un simple dm := Nil en el evento apropiado).

Saludos.

Al González.
Responder Con Cita
  #5  
Antiguo 09-10-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tienes razón, los "restos" de DM apuntará a lo que exista en el sitio al que apuntaba. No había comprendido bien la pregunta de Cañones.
Responder Con Cita
  #6  
Antiguo 13-10-2010
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
Si existe de tu parte el permiso para que alguna sección del programa acceda a esa variable sin que necesariamente exista ese segundo formulario, convendría entonces asignarle Nil en algún evento propicio de éste último, como OnDestroy.

Espero haber ayudado.

Al González.
Muchas gracias Al González, voy a hacer esto que me dices para optimizar mi proyecto.
Gracias Casimiro Notevi, por la colaboración.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
datamodule josi Varios 22 11-12-2008 08:07:42
Datamodule Cecilio Lazarus, FreePascal, Kylix, etc. 3 14-09-2008 18:36:35
Datamodule VRO Firebird e Interbase 2 13-07-2004 19:00:45
Visionar el DataModule. kwan Varios 2 13-01-2004 22:43:47
datamodule maruenda Varios 1 31-12-2003 18:24:21


La franja horaria es GMT +2. Ahora son las 04:05:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi