Ver Mensaje Individual
  #2  
Antiguo 13-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Reputación: 17
rgstuamigo Va por buen camino
Cita:
Empezado por Jose Roman Ver Mensaje
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? 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...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 13-01-2010 a las 19:20:23.
Responder Con Cita