PDA

Ver la Versión Completa : Ayuda con consulta...


Jose Roman
13-01-2010, 17:22:33
Hola a todos...

Tengo Delphi 2007, Zeos y Firebird.

Si realizo esta consulta:
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
Hola a todos...

Tengo Delphi 2007, Zeos y Firebird.

Si realizo esta consulta:
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)
select first 30 from CONSIGNACION

En MySQL
select * from CONSIGNACION Limit 30
En PostGree(segun he visto)
select * from CONSIGNACION limit 30 offset 0
En MS SQL Server (segun he visto)
Select Top 30 * from CONSIGNACION
En Oracle (segun he visto)
select * from CONSIGNACION Where ROWNUM<=30
En DB2(segun he visto)
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 (http://delphiallimite.blogspot.com/2007/09/la-potencia-de-los-clientdataset-i.html),parte2 (http://delphiallimite.blogspot.com/2007/09/la-potencia-de-los-clientdataset-ii.html),parte3 (http://delphiallimite.blogspot.com/2007/09/la-potencia-de-los-clientdataset-iii.html),parte4 (http://delphiallimite.blogspot.com/2007/10/la-potencia-de-los-clientdataset-iv.html), parte5 (http://delphiallimite.blogspot.com/2007/10/la-potencia-de-los-clientdataset-y-v.html)). 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
Para Mas Informacion sobre el ClientDataSet(parte1 (http://delphiallimite.blogspot.com/2007/09/la-potencia-de-los-clientdataset-i.html),parte2 (http://delphiallimite.blogspot.com/2007/09/la-potencia-de-los-clientdataset-ii.html),parte3 (http://delphiallimite.blogspot.com/2007/09/la-potencia-de-los-clientdataset-iii.html),parte4 (http://delphiallimite.blogspot.com/2007/10/la-potencia-de-los-clientdataset-iv.html), parte5 (http://delphiallimite.blogspot.com/2007/10/la-potencia-de-los-clientdataset-y-v.html)). 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.