Jump to content

CONFLICTO CON DATASET EN DATAMODULOS COMUNES A VARIAS FORMAS


Kratov

Recommended Posts

Cordial saludo

 

Tenemos un problema al utilizar data Módulos en donde tenemos data set que se utilizan el el aplicativo, ya que al utilizarlos en los diferentes tabs donde abrimos formas, se colocan en en conflicto con otros dataset abiertos y trae la información de los otros data set abiertos.

 

La pregunta es si podemos instanciar o crear los data módulos por cada forma para evitar que esto suceda?   esto recargara mucho la memoria? o se aconsejaría  colocar los data set en cada forma.

 

 

Muchas gracias por su atención.

 

 

 

JAIME ZAMORA

Link to comment
Share on other sites

Hola Jaime

 

El señor Farshad aconseja que los Datasets sean colocados en sus respectivos formularios, de manera que se haga uso solamente de los recursos necesarios. Irte por la via de los DataModules provocaría que por cada sesión abierta se creen los DataModules, y si, te recargaria mucho la memoria del server con un montón de recursos innecesarios.

 

Saludos  y que tengas un buen día.

Link to comment
Share on other sites

Hola Jaime

 

El señor Farshad aconseja que los Datasets sean colocados en sus respectivos formularios, de manera que se haga uso solamente de los recursos necesarios. Irte por la via de los DataModules provocaría que por cada sesión abierta se creen los DataModules, y si, te recargaria mucho la memoria del server con un montón de recursos innecesarios.

 

Saludos  y que tengas un buen día.

Muchas gracias por tu ayuda.

Link to comment
Share on other sites

  • 7 months later...

Hola Jaime

 

El señor Farshad aconseja que los Datasets sean colocados en sus respectivos formularios, de manera que se haga uso solamente de los recursos necesarios. Irte por la via de los DataModules provocaría que por cada sesión abierta se creen los DataModules, y si, te recargaria mucho la memoria del server con un montón de recursos innecesarios.

 

Saludos  y que tengas un buen día.

Hola Mike,

 

No tengo claro el tema, podria en aras de ayudarnos todos:

1. los datamodulos existen en forma nativa para unigui , si no se recomienda su uso porque existen? no deberia cambiarse?

2. si solo se crean una sola vez por sesion la carga inicial podria ser lenta (que es lento) y consumen mucha memoria (cuanto es mucho) y a partir de cuantos usuarios afectaria el sistema 10,100,1000..nn 

 

gracias mike

Link to comment
Share on other sites

Saludos colegas:

 

Primeramente debemos tener presente que UNIGUI es un Framework que traduce de Pascal a EXTJS. Los Datamodules que existen en UNIGUI, desde mi punto de vista son para mantener la compatibilidad con Delphi y como comodidad para aquellos que trabajamos con Delphi y mejor aun para aquellos no saben o no dominan el EXTJS, pero esa estructura no existe en EXTJS. Ahora, lo de los recursos que se crean, igualmente esta es mi opinión, pues no tengo definido como funciona UNIGUI internamente, los objetos en EXTJS para la carga de datos y su manipulación en son los Ext.data.Store, por lo que seguimos supuniendo, al crearse un Datamodule con unos cuantos Datasets, se crearían en el código EXTJS los Stores correspondientes, con sus respectivas definiciones de los campos con sus tipos de datos.

Ahora, la magnitud de lo el señor Farshad se refiere está dada en la cantidad de Datasets que tengas en tus Datamodules, y la complejidad que estos tengan, multiplicado por la cantidad de sesiones que se abran.

El impacto directo en el consumo de memoria se podría ver con el StressTestTool.

 

Espero haber sido de ayuda.

 

Saludos cordiales y que tengan un buen día.

Link to comment
Share on other sites

Creo que hay una confusión en la discusión.

Farshad no recomienda que se creen aplicaciones serias amontonando todo en un formulario. Eso iría contra casi toda recomendación moderna de programación.

Aunque no se estuviera programando con una estricta separación de la interfaz de usuario y la lógica del programa, estaríamos creando algo difícil de mantener al mezclar diferentes tareas en el mismo código.

Una aplicación para el Web, con o sin uniGUI, es inherentemente multi-usuario. A cada usuario o cliente remoto se le asigna una sesión (representada en el código por el MainModule) y todos sus recursos deben depender de ella.

Si se crea un formulario, la función que se encarga de crearlo lo hará en el contexto de su sesión y lo mismo sucederá con los módulos de datos.

Es obvio entonces que la manera segura de crear la aplicación es con formularios y módulos de datos bajo control del framework.

Si se decide crear los módulos de datos On-Demand, opción disponible ahora en uniGUI, cada vez que se abra un formulario que necesite un módulo de datos, la referencia que hará al cargarse el formulario se encargará de activar la creación del módulo de datos. Si se quiere garantizar que ese módulo de datos, privado para ese formulario y sesión, no exista la próxima vez (con datos anteriores) bastará con liberarlo en TUniForm.OnDestroy.

Es bueno recordar también que el Delphi, desde la versión 4, ofrece varios mecanismos para facilitar la separación de la interfaz de usario de la lógica de negocios.

Básicamente, se puede usar controles de datos y acciones (TAction con los eventos Execute y Update).

 

Disculpen la parrafada, pero una herramienta poderosa no garantiza la calidad del producto final. Todo depende de cómo se use.

 

David

Link to comment
Share on other sites

En mi experiencia personal, me ha ido muy bien con TMS Aurelius (Spring4D lo considero muy bueno también), y he podido palpar las grandes ventajas que arroja el usar un ORM en el desarrollo de apps. Me ha sido mucho más fácil el mantenimiento, hacer cambios, añadir nuevas funcionalidades, estas cosas que anteriomente eran un tanto complicadas en dependencia de la magnitud de los cambios, ahora vienen a ser exponencialmente mucho más sencillas. Concuerdo 100% en tu criterio del cómo usar una herramienta.

Link to comment
Share on other sites

  • 2 years later...

Hola, yo estoy creando una aplicación UniGUI, utilizando una sola conexión FiIreDAC a una base de datos PostgreSql, para lo cual utilizo el MainModule con un solo componete de Conexión. Cabe mencionar que la conexión se mantiene cerrada y se abre única y exclusivamente cuando abro algún DataSet, que a su vez, transfiere los datos a ClientDataSets. Haciendo esto todos los datos quedan en la memoria de cada Form, la cual se destruye cuando se cierra. Dicho esto, he notado que me funciona muy bien.

He tenido un problema con los UniDBGrid, ya que no refrescan los datos de los ClientDataSet anidados con Campos de tipo DataSetField. El patrón que he encontrado es que cuando un registro "Padre" tiene la misma cantidad de registros "Hijos" que otro  "Padre", entonces el Grid no refresca los datos. El Patrón es en cuanto a la misma cantidad. Y revisando los datos internamente, el cursor si se está movimiento y refrescando en los ClientDataSet.

 

Si alguien tuviera alguna luz, se los agradecería.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...