PDA

Ver la Versión Completa : dbExpress realmente lo mejor?


hgiacobone
29-05-2003, 22:21:27
En la paleta de componentes, existe en D7 una solapa llamada dbExpress que parece ser son unos componentes para acceder a DB con motores SQL tales como InterBase.

Por lo que he leido, se dice que es FABULOSO trabajar con esta herramienta/componente.

Tambien he leido que permite hacer consultas UNIDIRECCIONALES y que esa era la limitación que ofrecía este tipo de componente.
Al preguntar qué era eso, me respondieron.

-Al consultar la DB, los datos brindados son siempre "en una dirección", en este caso, hacia "adalante" o de avance. Las consultas pueden devolver por ej. el registro 100 y luego browsear hacia el siguiente, digamos 101, 102,102,etc. pero nunca hacia atrás.:confused: 100,99,98,etc.

Entonces dije:

-¿Hay que hacer la famosa animalada SELECT * FROM Clientes, que se trae toda la tabla y mostrarla en un DBGrid para así recorrerla...?


-No. Si trabajás con SQL no te conviene usar cache local como si usaras BDE. Mejor solicitas el rango de datos sobre el registro que querés y lo mostrás. Tarda menos y es más optimizado.

-Ok, ¿pero si yo quisiera recorrer mi lista de Clientes?

-Ah, no, con dbExpress no podés hacerlo, a menos que quieras recorrer solo en modo avance.

-O sea que si veo ALVAREZ y llego hasta LOPEZ ¿que hago si necesito volver hacia ALVAREZ o hacia FULANO?

-Tenés que consultar otra vez desde ALVAREZ.


¿Esto es realmente así...?
Alguien que ejemplifique algo, porque no puedo creer que una herramienta nueva sea más arcáica que el viejo PASCAL.

jachguate
30-05-2003, 02:47:46
No se a que te referis con "arcaico"....

Desde mi punto de vista (nunca he usado dbexplorer) no es necesario que tengas un cursor bidireccional.... Además no cualquier base de datos te provee estos; de hecho la mayoría solamente te proveen cursores unidireccionales.

Lo que se hace normalmente (y supongo que dbExpress también lo hace) es que abris el cursor (en principio unidireccional) y creas un cache en la máquina cliente, donde podes crear la "ilusión" de un cursor bidireccional.

Por supuesto, esto implica un consumo bárbaro de memoria en la máquina cliente, que depende de vos como desarrollador determinar si vale la pena o no....

Por lo general, habrá una propiedad que te permita indicar si queres un cursor bidireccional o unidireccional. La diferencia práctica, es que sobre uno unidireccional, si haces MiCursor.Prev, el motor te mandará a freir papas...

Con los cursores unidireccionales, el consumo de memoria es menor y yo te aconsejaria utilizarlos siempre que sea posible. Digamos para imprimir informes, el cursor lo vas a recorrer únicamente en una dirección, no??

Con el otro punto que habias mencionado:

Un Select * from clientes, podria resultar en un abuso, no solo de la memoria de la máquina cliente, sino del preciado ancho de banda de la red....

Vos, cuando desarrollas una aplicación, no sabes si en algún momento llegará a tener 50,000 clientes. Y que pasa si se te ocurre la grandiosa idea de montar tu aplicación en internet...

Te imaginas cuanto tiempo tomará llevar 50,000 registros a la máquina del cliente solo para permitirle "navegar" comodamente por todos sus clientes....

Es mejor llevar solamente los datos que son necesarios y ya.

Hasta luego.

;)

kinobi
30-05-2003, 03:03:28
Hola,

Posteado originalmente por hgiacobone

¿Esto es realmente así...?
Alguien que ejemplifique algo, porque no puedo creer que una herramienta nueva sea más arcáica que el viejo PASCAL.

No sé si por el cambio de foros se te habrá pasado un hilo (de hace un mes y medio) donde preguntabas más o menos lo mismo ...

http://www.clubdelphi.com/foros/archivo/viewtopic.php?t=19494#58894

y en el mismo hilo Marc Guillot te daba una respuesta excepcional ...

http://www.clubdelphi.com/foros/archivo/viewtopic.php?t=19494#58902

El enlace a la búsqueda en los antiguos foros es ...

http://www.clubdelphi.com/foros/archivo/search.php

Saludos.

hgiacobone
30-05-2003, 15:06:58
Posteado originalmente por kinobi
Hola,
No sé si por el cambio de foros se te habrá pasado un hilo (de hace un mes y medio) donde preguntabas más o menos lo mismo ...


Apareció señores.... UN MODERADOR.
Y está atento a todo, menos a mis reclamos que estoy mandando desde hace un mes al site por la baja "accidental" de mi cuenta. Consejo: No utilicen el link que dice WebMaster..., no lo leen.

Volviendo al tema, gracias por tu respuesta. Es cierto, Marc Guillot fue el que me instruyó en lo que plantee. Ha sido un genio en su explicación. También la recomiendo.

De todas formas no responde mi consulta actual.

Lo que quiero plantear simplemente es esto:
Si con un cursor unidireccional (y parece que todos lo son) yo puedo avanzar, ¿cómo muestro mi consulta en un DBGrid que me permite ir en ambos sentidos?

Si la respuesta es crear un CacheLocal, mejor antes de que pregunte, aclaren qué es eso, cómo se configura y cómo se pone en funcionamiento con un ejemplo, porque sino estamos en un círculo vicioso.
Chau,

__marcsc
30-05-2003, 16:37:29
Hola,

una pequeña réplica a tu sarcasmo, tu baja no fue accidental, se instalaron los nuevos foros porqué se detectó un problema grave con los anteriores, y todos los usuarios que hay dados de alta ahora mismo es porqué se registraron de nuevo. Por otra parte, los moderadores ni sabemos de la existencia de tus reclamos al administrador, ya que nosotros no mantenemos la web. Cada administrador con sus foros y ya está :D

Respecto a tu pregunta, pues lo único que tienes que hacer es colocar un clientDataSet y un TDataSetProvider (evidentemente debes tener tu conjunto de datos DBExpress). En la propiedad DataSet del TDataSetProvider especificas el conjunto de Datos DBExpress. En la propiedad ProviderName del TClientDataSet especificas el Provider que has creado. Ahora ya puedes abrir el TClientDataSet como si de un Query se tratara (pasandole los parámetros si es necesario). Y ya tienes un DataSet preparado para enlazar con controles de datos.

En resumen, se establece un vínculo así:

Conjunto de datos DBEXpress -> Provider -> ClientDataSet

Aquí va un pequeño artículo sobre DBExpress + ClientDataSets, solo lo he mirado por encima, no sé qué tal está, pero a lo mejor te sirve.

http://www.inquiry.com/techtips/delphi_pro/10min/10min0701/10min0701-2.asp

Saludos.

P.D: Si quieres trabajar "en serio" con DBExpress y DataSnap, te recomiendo fuertemente que leas el libro "La Cara Oculta de Delphi 6" de Ian Marteens.

kinobi
30-05-2003, 17:45:38
Hola,

Posteado originalmente por hgiacobone
Apareció señores.... UN MODERADOR.
Los moderadores no aparecen, están siempre ahí. Con echar un vistazo a los usuarios conectados en cada momento te darías cuenta de lo qué estoy diciendo. En este caso tu ironía además de sobrar insinúa algo que no es cierto.

Posteado originalmente por hgiacobone

Y está atento a todo,
No, está atento simplemente a su función, moderar el foro, manteniendo los hilos dentro de tema y moviendo los que no estén al foro correspondiente y, en este caso concreto, recordándote que tu consulta había sido contestada en los antiguos foros (a los que actualmente existe acceso).

Posteado originalmente por hgiacobone
menos a mis reclamos que estoy mandando desde hace un mes al site por la baja "accidental" de mi cuenta.

Es evidente que desconoces que un moderador (dentro de estos foros) no tiene responsabilidad ni capacidad de acción sobre las cuentas de usuarios; ése es trabajo de los administradores.

Por otro lado, como te comentaron anteriormente, debido al cambio de gestor de foros, se hizo necesario un nuevo registro de las cuentas de usuarios, para tí y para todos. Es decir, que no ha sido una baja "accidental" (según tus propias palabras), sino "coyuntural".

Posteado originalmente por hgiacobone
Consejo: No utilicen el link que dice WebMaster..., no lo leen.
Evidentemente es una opinión personal, que no está basada en ningún argumento objetivo.


Posteado originalmente por hgiacobone
Lo que quiero plantear simplemente es esto:
Si con un cursor unidireccional (y parece que todos lo son) yo puedo avanzar, ¿cómo muestro mi consulta en un DBGrid que me permite ir en ambos sentidos?

Si la respuesta es crear un CacheLocal, mejor antes de que pregunte, aclaren qué es eso, cómo se configura y cómo se pone en funcionamiento con un ejemplo, porque sino estamos en un círculo vicioso.
Chau,

En la respuesta de Marc Guillot (insisto, excepcional) lo deja muy claro (cito un párrafo de la respuesta de Marc):

"Por eso, al conectar un Query dbExpress a un componente ClientDataSet (mediante un componente DataSetProvider), pasamos a tener un cursor bidireccional, que permite realizar modificaciones en caché local. En definitiva, tus controles conectados a datos (las grids, los TEdits para modificaciones, etc. ...) los tienes que conectar al ClientDataSet, y cuando se hace un Open en el ClientDataSet, éste abre el Query DbExpress, recorre todos los registros y los copia en la caché local que mantiene en ClientDataSet, de esta forma los controles conectados a datos pueden hacer recorridos bidireccionales sobre los datos en la caché mantenida por el ClientDataSet, y modificar todos los registros que desee. Estas modificaciones se pueden pasar de golpe mediante un ApplyUpdates (el cual lanzará tantas sentencias INSERT o UPDATE como registros se hayan modificado, directamente a la conexión dbExpress)."

Evidentemente los aspectos técnicos más en detalle están expuestos en la documentación Delphi. Existen capítulos completos en la documentación impresa y en la documentación en línea que tratan los temas referidos a ClientDataSets.

Saludos.

roman
30-05-2003, 17:52:40
Posteado originalmente por hgiacobone
De todas formas no responde mi consulta actual.

Lo que quiero plantear simplemente es esto:
Si con un cursor unidireccional (y parece que todos lo son) yo puedo avanzar, ¿cómo muestro mi consulta en un DBGrid que me permite ir en ambos sentidos?

Esto lo responde perfectamente marcguillot en el hilo que te indicaron: usa clientdatasets.

Marc escribió una excelente introducción a estos componentes; te mostró un camino a tomar. Ya es de cada quien seguirlo o no.

// Saludos

hgiacobone
02-06-2003, 15:10:15
Posteado originalmente por kinobi
Evidentemente los aspectos técnicos más en detalle están expuestos en la documentación Delphi. Existen capítulos completos en la documentación impresa y en la documentación en línea que tratan los temas referidos a ClientDataSets.
Saludos.

Gracias por todo mi querido Obi...

kinobi
02-06-2003, 15:34:29
Posteado originalmente por hgiacobone
Gracias por todo mi querido Obi...

Estimado Cobone, no me lo agradezcas a mí. En todo caso agradécelo a los que en el hilo te indicaron el camino y a los redactores de la documentación en Borland.