FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
aplicacion mdi
Hola a todos,
He creado una aplicación de gestión con delphi 6, componentes IBX e Interbase 6.01. que funciona como mdi. En cada formulario (clientes, proveedores, consultas ...) he incluido el correspondiente IBDatabase, un IBTransaction y los correspondientes IBDataset, de manera que cada formulario maneja sus datos independientemente del resto. El problema es que no se si este enfoque es el correcto para este tipo de aplicaciones, ya que cualquier modificación en la estructura de la base te obliga a peregrinar por los formularios realizando actualizaciones en los componentes IBDataset, y además cada vez que abres un formulario inicias una nueva conexión con la base de datos lo que en los puestos cliente puede demorar hasta 5 o 10 segundos, lo cual a los usuarios (los que trabajan para el jefe, que es el que paga el programa) les parece una eternidad. ¿Es mi enfoque correcto, hay alternativas que mejoren sobre todo el asunto de la velocidad en la apertura del formulario ... ? Saludos. |
#2
|
||||
|
||||
Yo soy partidario de poner todos los componentes de base de datos en un datamodulo y así tenerlos centralizados con lo cual las propiedades que se les den valen para todos los formularios en los que sea preciso utilizarlos, será suficiente con hacer "Use" sobre el Datamodulo.
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
||||
|
||||
Hola.
El problema de este enfoque, Marcos, es que en aplicaciones MDI si tienes abiertos dos formularios del mismo tipo (digamos dos clientes), si utilizan un solo dataset en un datamodule, tendrás los mismos datos en ambos formularios. Necesitas tener un dataset independiente para cada formulario. En MDI, es habitual tener un datamodule general, en el que se ubica la conexión (no sé si podrias poner también un IBTransaction general, puesto que no conozco bien como trabaja IBX), así como los datasets generales que se pueden utilizar en distintos lugares, y que no necessitan mantener un estado (por ejplo. la lista de formas de pago, ....). Finalmente necesitas tener distintos IBDataset para cada formulario, por lo que puedes optar por ponerlos en el formulario (recuerda que usarán la IBDatabase del datamodule general), o bien (más complejo) crear un datamodule para cada formulario, y poner el IBDatabase en ese datamodule asociado al formulario. Ahora en tiempo de ejecución, cuando se crea una instancia del formulario, se debe crear también una instancia de su datamodule, y enlazar los componentes data-aware del formulario, con los componentes en el data-module recien creado. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#4
|
|||
|
|||
Efectivamente, el enfoque de Marcos es el que utilizo para las aplicaciones sdi, pero en mdi se complica un poco y como comenta Marc necesito que cada formulario maneje sus propios datos y transacciones independientemente de lo que este pasando con los otros formularios que puedan estar abiertos. Con Ibx cada IBDatabase tiene que llevar obligatoriamente asociado un IBTransaction con lo cual a la solución que llegué fue a la planteada en mi mensaje inicial. Pero claro, el coste es un mantenimiento mas laborioso y una carga de formularios mucho mas lenta ya que si tienes un datamodulo abres la base una vez, mientras que ahora se abre cada vez que creas un formulario.
Saludos de nuevo. |
|
|
|