Cita:
Empezado por Jose Roman
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...