[Lazarus-es] forms i querys

alfred en arsistemes.com alfred en arsistemes.com
Mar Jul 9 22:10:09 CEST 2013


Gracias por la respuesta.

Tomo buena nota de todo y creo que es una excelente exposición.
Especialmente interesante el punto 2-C.

El punto 6 tiene ventajas e inconvenientes. Por un lado la claridad, pero
alguna vez en la que utilizo creación-modificación de controles en el form
creo que es especialmente útil poder hacer un bucle para cambiar
determinadas propiedades de todos y para eso es super pràctico tener
Label1, Label2, Label3, Label4...  en lugar de  Nombre, apellido,
direccion, otra cosa, etc... (eso sí, si hay muchos controles se acaba
perdiendo el tiempo en averiguar que es què y sale más a cuenta
identificarlos claramente).

Pero me parece que no voy a ser capaz de quitarme la manía de escribir
código de vez en cuando (de forma impulsiva y aparentemente aleatoria O_o)
para evitar utilizar en algún momento decisivo el DataModule.



> Colegas:
>
> Aunque he llegado tarde al debate deseo expresar mi punto de vista:
>
> 0- Como bien se ha comentado es una buena práctica de programación
>    llevar los objetos de acceso a los datos en un TDataModule.
>    Ejemplo: TZConnection, TZQuery, TZTable, TZStoredProc, TDatasource.
>
> 1- Usted puede añadir tantos TDataModule como estime y/o necesite;
>    esto era posible incluso en Borland Delphi7.
>
> 2- En el caso de Lazarus el MVC podría verse de la siguiente forma:
>    a) Modelo: podrían ser SQLDB, ZEOSDB o similares.
>    b) Vista: podrían ser los DataControls, LazReport o similares.
>    c) Controlador: aquí la cosa se complica algo pues el controlador
>       responde a eventos (usualmente acciones del usuario) e invoca
>       peticiones al 'modelo' por lo que se puede pensar en los
>       siguientes: TDatasource, TSqliteDataset, TSqlite3Dataset, etc.
>    Quizás en la Wiki aparezca algo relacionado con este tema.
>
> 3- Debe incluir en las «uses» de cada TForm el nombre del TDataModule
>    que almacena los Objetos de Acceso a Datos.
>
> 4- Es aconsejable que el/los TDataModules se creen de forma automática,
>    así evitamos que un DataControl intente acceder a datos cuando aún
>    no está activa la conexión a la Base de Datos, incluso en ocasiones
>    debe iniciarse primero que el Form principal; esto depende de como
>    el programador desarrolla su app.
>
> 5- En ocasiones para el manejo de Bases de Datos en Lazarus debemos
>    añadir manualmente en «uses» la unidad «db».Ejemplo cuando deseamos
>    utilizar el procedimiento «Locate» desde un TForm y los Objetos de
>    Acceso a Datos están en un TDataModule.
>
> 6- Algo muy importante que se recomienda como buena práctica de
>    programación y que nos ayuda a seleccionar el objeto adecuado entre
>    los tantos que podamos tener en un TDataModule es «los nombres de las
>    clases/objetos, variables, constantes, funciones y procedimientos;
>    deben tener nombres que de manera intuitiva nos digan para que son o
>    que hacen».
>
> 7- Recuerden que el exceso de modulos (TForm, TDataModule), hace nuestra
>    aplicación más grande y lenta, una alternativa es crear los TForm
>    dinámicos o en tiempo de ejecución.
>
> Este árbol o grafo ilustra como podrían verse los objetos en un
> TDataModule:
>             TZConnection
>                  /\
>                 /  \
>                /    \
>               /      \
>           TZQuery   TZTable
>             /          \
>            /            \
>      TDatasource    TDatasource
>
>
> Saludos
> Maikel
>
>
> El jue, 04-07-2013 a las 20:24 -0300, Martin Gomez escribió:
>> No estoy muy seguro al respecto (tendría que recurrir a la
>> documentación) pero hasta Delphi 7 sólo podía haber 1 datamodule por
>> proyecto... En Lázarus creo que no existe esa limitación.
>>
>>
>> 2013/7/4 Ulises Díaz <udiaz60 en hotmail.com>
>>         Hola
>>
>>
>>         Si, Aprendí en Visual Basic, pero cuando se trata de
>>         aplicaciones Web utilizo MVC, separando los datos  de la
>>         lógica de negocio, se me hace difícil hacerlo acá, sobre todo
>>         por lo confuso que es tener un datamodule con todas las
>>         querys, a menos que por cada sección o formulario del programa
>>         se cree un datamodule, cosa que utilice una vez pero por cada
>>         datamodule necesitaba una conexión, lo que no me gustó.
>>
>>
>>         Voy a volver a intetarlo pero quetal si creamos un datamodule
>>         ("prinicpal") que tenga la conexion y para cada form creamos
>>         otro data module cuyas querys se asignen a la conexion de
>>         datamodule "principal", que opinan? o les parece poco
>>         funcional. Lo que busco es mejor organización.
>>
>>
>>         Gracias por la recomendación.
>>
>>
>>
>>
>>
>>         ______________________________________________________________
>>         Date: Thu, 4 Jul 2013 18:49:31 -0300
>>         From: mmgomez en gmail.com
>>         To: lazarus-es en lists.lazarus.freepascal.org
>>         Subject: Re: [Lazarus-es] forms i querys
>>
>>
>>         Está considerado una "buena practica" el separar el acceso a
>>         datos con un datamodule, al menos esa es la recomendación de
>>         Borland desde el Delphi 1.
>>
>>
>>         Si venías del Visual Basic es una costumbre dificil de
>>         adoptar, pero una vez que te acostumbras empiezan los
>>         beneficios :)
>>
>>
>>         2013/7/4 Ulises Díaz <udiaz60 en hotmail.com>
>>                 Hola
>>
>>
>>                 Me pasaba igual, a veces pienso igual, por un tiempo
>>                 utilicé un Data Module con una conexión, las querys
>>                 (tzquery de Zeos) y el datasource de cada formulario
>>                 juntos, luego empecé a ver algo confuso tantas querys
>>                 que decidí crear un datamodule con una única conexión
>>                 desde la que se conectan las querys que se encuentran
>>                 en cada formulario junto con su datasource, agregó la
>>                 unidad del datamodule en los uses de cada form y
>>                 asigno la propiedad de conexion de las querys a la
>>                 mencionada conexión.
>>
>>
>>                 Muchas veces no utilizo componentes gráficos,
>>                 especificamente en los casos que tengo que cargar
>>                 información a listas, stringGrids, realizar inserts o
>>                 udpates desde stringGrids, entre otros si no que lo
>>                 hago por código en el evento OnCreate de los forms,
>>                 por ejemplo:
>>
>>
>>                 var
>>                   QCargarComboboxs : tzquery; //declaro la query, Zeos
>>                 begin
>>                   QCargarComboboxs : tzquery.create(nil); //Instancio
>>                   QCargarComboboxs.conection :=
>>                 MiDataModule.conexion; //asigno la conexión del
>>                 datamodule.
>>
>>
>>
>>
>>                 QCargarComboboxs .SQL.add('select * from years');
>>                 QCargarComboboxs.execsql;
>>                 //Realizo la consulta
>>
>>
>>                 //Cargo un combo por ejemplo
>>                 While not QCargarCombobox.Eof do
>>                 begin
>>                 Combo1.add(QCargarComboboxs.fielbyname('year').asstring);
>>  //Adiciono el elemento al combo
>>                 QCargarComboboxs.next; //siguiente registro
>>                 end;
>>
>>                 .
>>                 .
>>                 .
>>                  Luego utilizo la misma query para cargar otros
>>                 combos.
>>
>>
>>                 Bueno se puede crear una función que realice esta
>>                 operación pasandole como argumentos el nombre de la
>>                 tabla, los campos, y los combobox a rellenar.
>>
>>
>>                 Para lo demás me gusta utilizar componentes gráficos,
>>                 todo depende de las circunstancias.
>>
>>
>>
>>
>>                 Esperaré otras respuestas tal vez me sirvan para
>>                 mejorar la forma en que programo.
>>
>>
>>
>>
>>                 Espero que sea de utilidad, saludos desde Colombia
>>
>>
>>
>>
>>                 Ulises Díaz
>>                 Ingeniero de Sistemas, UNAD.
>>
>>
>>
>>
>>
>>                 > Date: Thu, 4 Jul 2013 22:51:30 +0200
>>                 > From: alfred en arsistemes.com
>>                 > To: lazarus-es en lists.lazarus.freepascal.org
>>                 > Subject: [Lazarus-es] forms i querys
>>
>>                 >
>>                 > Saludos de nuevo,
>>                 >
>>                 > Estoy incorporando forms para editar registros con
>>                 doble click en un
>>                 > dbgrid lazarus + Zeoslib + postgres
>>                 >
>>                 > Por algún motivo que desconozco siempre acabo
>>                 dudando entre usar el
>>                 > Datamodule... incorporar el query y el Datasource en
>>                 el mismo form o
>>                 > incluso realizarlo todo por código.
>>                 >
>>                 > No acabo de decidirme por uno u otro método y voy
>>                 alternando según va
>>                 > saliendo.
>>                 >
>>                 > ¿Existe algun convenio sobre cuál es el mejor
>>                 método ?
>>                 >
>>                 > Gracias
>>                 >
>>                 > _______________________________________________
>>                 > Lazarus-es mailing list
>>                 > Lazarus-es en lists.lazarus.freepascal.org
>>                 >
>>                 http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>>
>>                 _______________________________________________
>>                 Lazarus-es mailing list
>>                 Lazarus-es en lists.lazarus.freepascal.org
>>                 http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>>
>>
>>
>>
>>         --
>>         Try not to become a man of success but rather to become a man
>>         of value. Albert Einstein
>>
>>         _______________________________________________ Lazarus-es
>>         mailing list Lazarus-es en lists.lazarus.freepascal.org
>>         http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>>         _______________________________________________
>>         Lazarus-es mailing list
>>         Lazarus-es en lists.lazarus.freepascal.org
>>         http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>>
>>
>>
>>
>> --
>> Try not to become a man of success but rather to become a man of
>> value. Albert Einstein
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
>
>
> --
>
> Este mensaje le ha llegado mediante el servicio de correo electronico que
> ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema
> Nacional de Salud. La persona que envia este correo asume el compromiso de
> usar el servicio a tales fines y cumplir con las regulaciones establecidas
>
> Infomed: http://www.sld.cu/
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>






More information about the Lazarus-es mailing list