Ver Mensaje Individual
  #3  
Antiguo 19-02-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 21
gluglu Va por buen camino
Gracias Lepe !

En primer lugar, el error es 'Object Reference not set to an Instance of an Object'.

Todo esto viene de haber cambiado ayer totalmente la reestructuración de una parte de mi programa. Se trata de una aplicación MDI para reservas de hoteles. Quiero abrir por supuesto tantas reservas como el usuario desee.

Hasta ayer, error craso, tenía todos los accesos a datos en un DataModule. Al acceder a la siguiente fase de programación y querer crear ya varias reservas, es decir, varios forms MDI, me dí cuenta que con los DataModule y los Forms MDI, es un pequeño engorro programar bajo Delphi.

Estuve consultando todo tipo de información tanto aquí en el foro como en general en Google, e Internet. Varias soluciones se presentaban : crear múltiples instancias del DataModule, una por cada Form MDI, reasignar cada vez los DataSource's a cada variable local del Datamodule creado, y un largo etcétera.

Opté por la solución más intuitiva y creo que menos engorrosa. Trasladar el acceso a datos al form, sacándolos del DataModule.

Mi situación es la siguiente. Una reserva de hotel se compone de un Form Principal y 5 diferentes Frames que sirven para 5 diferentes grupos de opciones. Aparte desde cada frame se pueden abrir muchos Forms en forma Modal, cada uno con su propio acceso a Datos.

Pero TODOS los 5 frames, y todos los Forms que se abren en modo modal, acceden a datos comunes de la reserva (Número, etc. ...). Es por ello que coloqué el IBDataSet principal de la reserva en el formulario principal. Y todos los frames y forms modales accederían en principio a dicho DataSet. Entiendo que estoy 'intentando' al menos guardar una cierta modularidad.

En cada frame tengo bastantes DataSet's 'locales' con sus correspondientes DataSource's. Vamos, todo lo que antes tenía en 4 o 5 DataModule's diferentes y funcionaba hasta entonces bien, sin haber creado todavía más de una reserva simultáneamente.

Es ahora cuando me surgen estos problemas. He indagado y he depurado bastante todo hasta llegar a la conclusión de que el problema que de momento tengo, se debe al orden de creación. Lo dicho anteriormente, coloco un botón y le asigno a ese botón en su evento OnClick toda mi función de inicialización del Frame, y funciona correctamente.

Ya que estoy con el tema. Aprovecho para pedir consejo acerca de las transacciones y preguntar también donde es mejor colocarlas. En este caso, he colocado también la transacción en el Formulario Principal. De tal manera que cada Frame pudiera llamar también a la transacción con su Commit o Rollback segun proceda.

Espero haber expuesto ahora con mayor claridad mi problemática y agradezco cualquier comentario. Sobre todo al tema, creo yo, poco tratado de Formularios MDI y DataModule (aunque hace 1 semana hubo un hilo al respecto que me influyó por cierto en la decisión de situar el acceso de datos en el propio form, en vez del DataModule).

A mi entender teniendo el acceso de datos en el form, al crear múltiples instancias de formularios MDI (en mi caso reservas), cada una se comportará de manera 'modular' sin influir en ninguna de las demás reservas abiertas, y sin mezclar los DataSources para cada reserva.

De nuevo muchas gracias y saludos a todos.

... se me olvidaba. Me podrías aclarar un poco más por favor la función y utilidad de colocar la propiedad en el frame que mencionas arriba, referente al DataSet ?
__________________
Piensa siempre en positivo !

Última edición por gluglu fecha: 19-02-2007 a las 16:59:25.
Responder Con Cita