Tema: Memoria
Ver Mensaje Individual
  #16  
Antiguo 18-07-2003
Eduardo Eduardo is offline
Miembro
 
Registrado: jul 2003
Posts: 16
Reputación: 0
Eduardo Va por buen camino
Ante todo, gracias a todos los que me habeis ayudado.

Por fin he dado con el problema

Como decia al principio, mi aplicacion se basa en formularios que se crean en tiempo de ejecucion.

Las tablas las tengo puestas en frames, de forma que por ejemplo, la tabla de facturas esta en un frame que tiene la misma tabla, el datasource y las tablas que tienen relacion, en este caso, la de clientes, forma de pago, etc.

Si este frame contenedor de tabla tiene alguna relacion algo mas fuerte con otro frame, por ejemplo, el de facturas con las lineas de facturas, lo que hago es colocar dentro del frame de facturas el frame de lineas de facturas, y dentro de este ultimo el de movimientos de almacen, con lo cual me llevo todas las posibles relaciones ya creadas. Esta filosofia, que a simple vista puede resultar complicada, luego es muy efectiva. Yo he trabajado con datamodules durante varios años y los problemas eran horrorosos. Con frames todo funciona como la seda. Si en un caso especial quiero acudir a la tabla solo sin sus relaciones esenciales, pues la pongo y punto, este es el caso de que quiera consultar unos totales de factura pero en ese caso no me interesen los datos de clientes o forma de pago. De la misma forma, si quiero usar la tabla con todas sus relaciones, pongo el frame en lugar de la tabla y heredo todo.

Los formularios lo que hacen es leerse los frames con las tablas, los campos y las relaciones y crean mantenimientos.

Yo pensaba que se me habia ido destructores en estos formularios, es decir, que creaba los controles y luego no los destruia. Y me he vuelto loco buscandolos.

El problema era mas sencillo de lo que parecia. He cojido el memprof que me habeis aconsejado y lo he ejecutado contra mi aplicacion. Es impresionante, y para mi al mismo tiempo era desconsolador, unos formularios perdian memoria y otros no sin razon aparente. Al final vi una opcion en el memprof que me permitia ver las tablas abiertas, y descubro que si un formulario abre por ejemplo 30 tablas, al cerrarlo solo me cierra 23, cuando otro si lo hace bien. Yendo por este camino descubri que unos de mis frames preferidos le creaba un frame dentro de este en tiempo de ejecucion y con un create(nil) ¡toma ya!. He reconstruido el codigo para que lo creara correctamente y ya funciona todo de maravillas.

Guardare el memprof a buen recaudo. Es una herramienta imprescindible. Por cierto, que ese programa que tanto publican en esta misma web de testeo pero que tiene coste. Esta en ingles y mi ingles es bastante pobre. Alguien me puede orientar o darme alguna direccion web en español donde pueda aprender.

Gracias de nuevo
__________________
Eduardo
Responder Con Cita