[Lazarus-es] forms i querys

alfred en arsistemes.com alfred en arsistemes.com
Dom Jul 14 23:29:51 CEST 2013


Saludos,

Sí, viene a ser lo que hago a veces en el mismo form (procedure o función)
y a veces en una unit (procedures o funciones) usada por el form pero lo
que planteas es bastante más organizado y metódico (me gusta).

Posiblemente incluyendo todo en una o varias Unit según el tamaño de la
aplicación me parece interesantemente organizado. A la vez, la Unit se
utiliza como si de un objeto más se tratara. Alguna vez me había pasado
por la cabeza pero por mandrilla al cambio no lo intenté.

Veo que parece muy Buena idea. Ventajas de los objetos. Probaré.

Gracias.

> Hola, por aportar otro punto de vista
>
>
> Una unit ( denominada por ejemplo Global ) con
> - Uses a los datamodules, Zeos, db, etc
> - Declaración de una clase del modo TMyDataSet = class(TZQuery)
> - Initialization (Crea el / los datamodulos que necesites) así como clases
> adicionales comunes a toda la aplicación
> - finalization (Destruye o libera el / los datamodulos) así como clases
> adicionales creadas en initialization
> - Funciones generales a la aplicación entre las que se encuentran
> funciones como GetQry, DeleteRecords, etc ... que te devuelven una query
> tipo TMyDataSet o realiza operaciones de SQL
>
>
> De esta manera en cualquier parte o unit del programa sólo debemos hacer
> use de Global. Si queremos una query pues llamamos Global.GetQry ya
> configurada y conectada con nuestra conexión en el datamódulo, si sabemos
> el sql a ejecutar pues usamos una de las funciones de Global que
> directamente ejecutan la SQL y devuelven el resultado. Cuando quiero
> cambiar el tipo de conexión simplemente cambio el datamodulo a crear, si
> deseo cambiar de Zeos a otro componente pues cambias la unit Global y el
> resto de aplicación queda sin tocar.
>
>
> Espero haber aportado otra manera que pueda ser útil ...
>
>
> Un saludo.
>
> ----- Mensaje original -----
>
> De: alfred en arsistemes.com
> Para: "Spanish version of Lazarus List"
> <lazarus-es en lists.lazarus.freepascal.org>
> CC: "Spanish version of Lazarus List"
> <lazarus-es en lists.lazarus.freepascal.org>
> Enviados: Martes, 9 de Julio 2013 22:10:09
> Asunto: Re: [Lazarus-es] forms i querys
>
> 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
>>
>
>
>
> _______________________________________________
> 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
>






More information about the Lazarus-es mailing list