![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
![]() 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. ![]() 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.
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
#2
|
||||
|
||||
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. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
||||
|
||||
Hola,
Cita:
http://www.clubdelphi.com/foros/arch...?t=19494#58894 y en el mismo hilo Marc Guillot te daba una respuesta excepcional ... http://www.clubdelphi.com/foros/arch...?t=19494#58902 El enlace a la búsqueda en los antiguos foros es ... http://www.clubdelphi.com/foros/archivo/search.php Saludos. |
#4
|
||||
|
||||
![]() Cita:
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,
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
#5
|
||||
|
||||
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á ![]() 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/delp...0min0701-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. Última edición por __marcsc fecha: 30-05-2003 a las 17:57:17. |
#6
|
|||||
|
|||||
Hola,
Cita:
Cita:
Cita:
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". Cita:
Cita:
"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. Última edición por kinobi fecha: 30-05-2003 a las 20:47:15. |
#7
|
||||
|
||||
Cita:
Marc escribió una excelente introducción a estos componentes; te mostró un camino a tomar. Ya es de cada quien seguirlo o no. // Saludos |
#8
|
||||
|
||||
![]() Cita:
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
#9
|
||||
|
||||
Cita:
|
![]() |
|
|
![]() |
|