[Lazarus-es] forms i querys
Maikel Enrique Pernia Matos
corba en grannet.grm.sld.cu
Lun Jul 8 16:07:24 CEST 2013
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/
More information about the Lazarus-es
mailing list