PDA

Ver la Versión Completa : Recuperar todos los registros en consulta


lafirma
03-08-2003, 04:42:55
Uso Delphi 7 con firebird 1.0 a traves de ibx
tengo un problema con el IBQuery, hago una consulta tipo selec * from mitabla, pues esta tabla solo tiene unos cuantos registros, pero resulta que el IBQuery no me trae todos los registros sino que solo uno, y necesito que los traiga todos de la base de datos en forma automatica, actualmente la solucion que hice fue hacer lo siguiente:
query.last;
query.first;

de esta manera ya accedo a todos los registros, pero me incomoda este comportamiento, la cantidad de registros no es mucha, a lo sumo 10.
como puedo hacer para que el componente recupere todos los registros de una vez?

delphi.com.ar
03-08-2003, 06:30:35
Todos los dataset, cuando se los consulta, POR SUERTE paginan los resultados, es decir solo te traen los resultados de la primer página de datos al menos que exigas el resto como lo haces con el mètodo Last. La ventaja de esto es ganar velocidad y recursos ya que en la muchos casos solo necesitamos el resultado de los primeros registros...

Suerte!

roman
03-08-2003, 07:05:27
Posteado originalmente por delphi.com.ar
Todos los dataset, cuando se los consulta, POR SUERTE paginan los resultados

Creo no entender bien esto que dices y me llama mucho la atención. Cuando comencé a trabajar con Delphi y MySql, tanto con Zeos como con DBExpress, un SELECT * se traía todos los datos de un una sólo vez. Lo recuerdo ya que intenté hacerlo con una tabla en el servidor con 70000 registros y pues mis dedos se dirigieron al CTRL-ALT-SUPR antes de que terminara. ¿Será porque MySql no tiene cursores?

// Saludos

__cadetill
03-08-2003, 11:59:41
Si bien es cierto que se traen paginas de registros, como mínimo se traeran los registros necesarios para rellenar las posibles lineas de un TDBGrid (si se visualiza con este). O sea, que por mucho que se trajera por pagina 1 registros (cosa que dudo a no ser que tenga muchos campos o es tos sean muy grandes), si el TDBGrid puede visualizar 20 registros, se traeria 20 paginas, es decir, 20 registros

No se que componente estara utilizando para la visualizacion, yo he explicado el caso del TDBGrid

Tambien podria ser que se haya modificado la propiedad BufferChunks del TIBQuery

__marcsc
03-08-2003, 12:36:54
Buenas,
Posteado originalmente por delphi.com.ar
Todos los dataset, cuando se los consulta, POR SUERTE paginan los resultado

esto no es siempre así, algunos DataSet paginan los resultados y otros no.

Todo lo que digo es en base a lo que escribe Ian Marteens en "La Cara Oculta de Delphi 6"

Los TTable (BDE) trae los registros incrementalmente según los necesitamos. Los TQuery (BDE también) devuelven todos los registros.

En ADO, si utilizamos los cursores estáticos en el cliente (los que recomienda el libro) se traen de golpe todos los registros de la consulta.

En DBExpress no lo recuerdo, pero como en teoría no hay caché supongo que los registros no viajan hasta el cliente a menos que no tengamos un ClientDataSet. Ahora mismo no sé como lo hace el ClientDataSet, pero creo que puede configurarse para que pagine, aunque por defecto no lo hace (repito, no esto seguro)

Imagino que dado que TDataSet es una clase abstracta no define este comportamiento sinó que deja que sus descencientes lo implementen. Es solo una suposición, no he mirado el código fuente (Dios me libre :D)

Saludos!

delphi.com.ar
04-08-2003, 15:52:18
Es verdad, falta información a mi respuesta y esta mal decir Todos los DataSets, por lo que dice marcsc, pero no olviden leer la PD... Mismo no se porqué contesté porque nunca he usado IB.... Y esto no solo depende del dataset sinó de la forma de armar los cursores que tenga el motor de base de datos.
Recordemos que en BDE podemos configurar en el alias el ROWSET SIZE que nos dice Specifies the number of rows to retrieve from the server in a single fetch

Posteado originalmente por roman
Cuando comencé a trabajar con Delphi y MySql, tanto con Zeos como con DBExpress, un SELECT * se traía todos los datos de un una sólo vez.
Me extraña mucho que tecnologías nuevas hagan esto, ¿Tenía un Order By el query?.. ¿Un Filter?... Ejecutabas algún método??...


Tengan en cuenta un detalle: Este hilo lo postee el sábado por la noche desde un boliche/club :D.. ustedes imaginen la situación.. y me sorperde que solo tenga una falta de ortografía!

__marcsc
04-08-2003, 19:45:15
Posteado originalmente por delphi.com.ar
Este hilo lo postee el sábado por la noche desde un boliche/club :D

Dios mio! lo tuyo sí que es devoción!! :eek:

Saludos! ;)

delphi.com.ar
04-08-2003, 21:40:37
:D Fue mas curiosidad que otra cosa... A quien se le ocurre poner una PC con conexión a internet en ese lugar????... Y ¿A que otro sitio puedo entrar?... lo que si, veo que no es productivo, la próxima ves, me voy a contener...

Saludos!

__marcsc
04-08-2003, 23:23:31
No te contengas, así descubriremos poco a poco los secretos oscuros de tu vida privada :p :D

Saludos compañero!

lafirma
07-08-2003, 22:05:33
bueno, en realidad el IBQuery lo uso para que su resultado sea la fuente de unos campos lookup de otro dataset, asi que no lo presente en pantalla directamente...
de todas maneras existe manera de decirle al ibquery que traiga todo?

que hay del BufferChunks? no uso nada de BDE ni ado, solo IBX