Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con consulta... (https://www.clubdelphi.com/foros/showthread.php?t=65795)

Jose Roman 13-01-2010 17:22:33

Ayuda con consulta...
 
Hola a todos...

Tengo Delphi 2007, Zeos y Firebird.

Si realizo esta consulta:
Código SQL [-]
select * from CONSIGNACION

Se demora mucho debido a la gran cantidad de registros, hay alguna manera de que pueda traer solo los 30 primeros registros y si el usuario llega a la consulta del registro 30 (por medio del DBNavigator) cargue los proximos 30 registros??

Gracias de antemano

rgstuamigo 13-01-2010 18:14:55

Cita:

Empezado por Jose Roman (Mensaje 350651)
Hola a todos...

Tengo Delphi 2007, Zeos y Firebird.

Si realizo esta consulta:
Código SQL [-]
select * from CONSIGNACION
Se demora mucho debido a la gran cantidad de registros, hay alguna manera de que pueda traer solo los 30 primeros registros y si el usuario llega a la consulta del registro 30 (por medio del DBNavigator) cargue los proximos 30 registros??

Gracias de antemano

Bueno segun veo puedes hacer esta consulta para traer los primeros 30 registros(En MySQL es muy facil usando la clausula Limit).
En firebird solo conosco la forma limitar o traer los n primeros registros, mientras que en Mysql puedes traer los registro desde una "x" posicion hasta una "y" posiscion.

En Firebird(segun he visto)
Código SQL [-]
select first 30 from CONSIGNACION
En MySQL
Código SQL [-]
select * from CONSIGNACION Limit 30
En PostGree(segun he visto)
Código SQL [-]
select * from CONSIGNACION limit 30 offset 0
En MS SQL Server (segun he visto)
Código SQL [-]
Select Top 30 * from CONSIGNACION
En Oracle (segun he visto)
Código SQL [-]
select * from CONSIGNACION Where  ROWNUM<=30
En DB2(segun he visto)
Código SQL [-]
select * from CONSIGNACION FETCH FIRST 30 ROWS ONLY

Lo que veo mas conveniente hacer en tu caso es utilizar un ClientDataset que este enganchado a tu Dataset(ZQuery, ZTable) atraves de un TDataSetProvider.;)
¿Pero que ventajas obtengo con eso?:confused: Diras tú.
Bueno...lo que pasa es que el clientDataset es tan potente y buen componente que tiene una infinidad de propiedades y metodos; en este caso deberias configurar la propiedad PacketRecords del ClientDataSet para limitar la cantidad de registros a traer. De esa manera solo se traerá la cantidad de registro especificado en dicha propiedad, y he aqui viene lo mas bueno del clientdadtaset; cuando el usuario, que esta navegando por los registros,sobrepasa el ultimo registro traido, el clientDataset es tan bueno que se conecta nuevamente y va y trae los otros registros siguiente(en tu caso 30 siguientes) y luego se desconecta nuevamente para no saturar la red ni el servidor.
Esto es óptimo para cuando se tiene miles o millones de registros.;)
Para Mas Informacion sobre el ClientDataSet(parte1,parte2,parte3,parte4, parte5). En la Parte3 se habla de la propiedad PacketRecords.;)
Espero haberte podido ayudar en algo.;)
Saludos...

Jose Roman 13-01-2010 18:53:47

Gracias por tu pronta respuesta, a simple vista parece que esta es la solucion.

Cañones 15-01-2010 20:37:32

Cita:

Para Mas Informacion sobre el ClientDataSet(parte1,parte2,parte3,parte4, parte5). En la Parte3 se habla de la propiedad PacketRecords.;)
Espero haberte podido ayudar en algo.;)
Saludos...
A mi si.

Gracias por compartir tu trabajo.

Saludos a todos.


La franja horaria es GMT +2. Ahora son las 09:02:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi