Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error al abrir y cerrar un Form con varias tablas (https://www.clubdelphi.com/foros/showthread.php?t=68468)

Delphitest 15-06-2010 19:27:44

Error al abrir y cerrar un Form con varias tablas
 
Buenas Tardes,

estoy haciendo un programilla con delphi7(mas bien lazarus) y postgres usando Zeolib.

He creado un DataModule en el que meto la conexion a la BD (y la abro) y todos los DS y Tablas que usa el programa. Para no liarme de momento todas las tablas estan activadas aqui.

Por otro lado tengo varios Form.

Dos de ellos son fichas de clientes y trabajadores y uno lo he llamado Obras y en él intervienen dos tablas.

No tengo claro el concepto de abrir y cerrar tablas ni acabo viendo la diferencia entre activar o abrir una tabla.

El caso es que si abro y cierro varias veces el form de clientes todo funciona perfectamente. Sin embargo si abro el form Obras y lo cierro, sin tocar nada en él, resulta que me da un fallo al intentar abrir Clientes.

La unica relacion que veo en esto es que Obras tiene un DBLookUpComboBox que despliga el nombre de la tabla clientes y supongo que eso hace que despues tenga problemas.

Como referencia Abro las tablas con OPen en el evento Create y las cierro en Close (incluso he probado en destroy).

Estoy convencido que hago algo mal a la hora de usar las tablas pero no acabo de dar con el fallo.

No se si me he explicado lo suficientemente bien como para que alguien me eche una mano con esto

Gracias de todos modos por vuestra atención

Neftali [Germán.Estévez] 16-06-2010 09:45:44

Sin ver nada del código que estás utilizando es difícil saber dónde puede estar el error.
El lugar de en el Create, yo utilizaría el OnShow, más que nada, porque dependiendo de cómo cierres los formularios, puede ser que tengas problemas con eso.

Delphitest 16-06-2010 11:33:41

Al final, visto que me estaba liando con crear, abrir, cerrar ... he decidido empezar paso a paso revisando la creacion, apertura y cierre, destruccion de los formularios.

El problema lo he resuelto asignando al evento OnClose del formulario - Action:=caFree

Por lo entiendo al llamar al formulario lo estoy creando, pero luego solo usaba close para cerrarlo sin destruirlo ni liberar memoria.

En Destroy le he metido el cierre de todas las tablas y en Create la apertura, asi toda va correctamente.

Gracias a todos

Neftali [Germán.Estévez] 16-06-2010 13:47:12

Cita:

Empezado por Delphitest (Mensaje 367409)
Por lo entiendo al llamar al formulario lo estoy creando, pero luego solo usaba close para cerrarlo sin destruirlo ni liberar memoria.

Correcto.
Si revisas la ayuda del evento OnClose de la clase TForm (TCustomForm) pone lo siguiente:

------------------------------------------------------------------------
If a form is an MDI child form,... then the default Action is caMinimize ... or the default Action is caNone ...
If a form is an SDI child form, Action defaults to caHide.
To close the form and free it in an OnClose event, set Action to caFree.
------------------------------------------------------------------------


Vamos, que segun el tipo de formulario (y algunas propiedades) se hace una u otra cosa por defecto, pero en ningun caso se destruye. Si quieres asegurarte de que se destrute, debes llamar al:

Código Delphi [-]
Action := caFree


La franja horaria es GMT +2. Ahora son las 04:47:48.

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