Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-06-2010
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
Registros en en bloques de 100 o mas...

Hola a todos...

Bueno tengo delphi 2007, Zeos y Firebird 2.1.

Mi pregunta es, como tengo muchos registros y al hacer un select * se bloquea o demora mucho al tratar de hacer post cuando he realizado un insert, mi pregunta es como puedo hacer un select de 100 registros y que si uno le da next en el registro 100 pase al siguiente bloque de registros y no me bloquee esto, en caso contrario de que no se pueda me gustaria entonces saber que sugerencias tienen.

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 23-06-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.107
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Primero de todo, no hagas " select * " !!!
Pon un filtro para traerte sólo los registros que necesites.

Luego puedes usar " select first 100 ... "
Responder Con Cita
  #3  
Antiguo 23-06-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Código SQL [-]
select * from tabla limit 0,100

te trae los 100 primeros registros, después solo modificas el query de acuerdo con la centana que quieras ver:
Código SQL [-]
 select * from tabla limit 101,100

Y así sucesivamente
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 23-06-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola, que yo sepa limit no existe en Firebird, pero se podría usar skip y first:

Código Delphi [-]
  Select First 100 * From (Select Skip 100 * From tuTabla)

donde el 100 del skip la primera ves sería 0 y cada ves que presiones Next aumentas en 100, osea utilizas una variable la cual vas incrementando....

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 23-06-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Que feo, tener que hacer un subquery para algo así. Por cierto el query que tiene el skip le va a salir a razón de lo mismo pues digamos que tienes 10 mil registros y los quieres ver de 100 en 100. En ese query te va a traer 9900 registros inicialmente, lo que casi es lo mismo que traer todos, curiosamente la consulta de los últimos registros será más rápida que la de los primeros pues cada vez iran quedando menos. Aunque funciona, no me parece muy óptimo que digamos.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 23-06-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.107
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Se puede hacer así:

Código SQL [-]
Select First 100 Skip 200 * From tuTabla
Select First 100 Skip 300 * From tuTabla
Select First 100 Skip 400 * From tuTabla

etc...
Responder Con Cita
  #7  
Antiguo 23-06-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por AzidRain Ver Mensaje
Que feo, tener que hacer un subquery para algo así.
Si tienes una mejor solución porque no la pones, como dije Limit no existe en Firebird y por lo menos yo, no he encontrado ninguna función que se asemeje a Limit.

Cita:
Empezado por AzidRain Ver Mensaje
Por cierto el query que tiene el skip le va a salir a razón de lo mismo pues digamos que tienes 10 mil registros y los quieres ver de 100 en 100. En ese query te va a traer 9900 registros inicialmente, lo que casi es lo mismo que traer todos, curiosamente la consulta de los últimos registros será más rápida que la de los primeros pues cada vez iran quedando menos. Aunque funciona, no me parece muy óptimo que digamos.
Si, reconozco que no es optimo lo que puse y sería mucho mejor hacerlo con una sola consulta como lo puso Casimiro.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 23-06-2010
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama


Código SQL [-]
select * from tabla limit 101,200

Código SQL [-]
select First 100 Skip 100 * from tabla

Sería interesante ver el tiempo de respuesta de cada motor......

Saludos
Responder Con Cita
  #9  
Antiguo 23-06-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
No te molestes caro, en todo caso no es culpa tuya sino del motor. Yo comento únicamente lo que pienso respecto a las diferencias entre motores, como se ve cada uno tiene un pie de donde cojear.

La solución de casimiro es la equivalente al "limit" que yo sugerí y como dice Jose Román, al final el ganador es él pues tiene mucha información para continuar con su proyecto.

Egostar apunta algo interesante, desgraciadamente las diferencias en rendimiento no la sve uno mas que en tablas con millones de registros lo que por lo que he visto en el foro solo se da en unos pocos caso, casi siempre se trata aquí de proyectos de unos cuantos miles de registros. Donde algunos milisegundos no hace ninguna diferencia.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo evitar ejecutar bloques en el IDE Eyewitness Varios 9 03-08-2013 12:55:04
Interconexion de bloques astwin OOP 19 15-04-2009 17:50:31
Generar bloques de números Natasha Nortman Varios 8 30-03-2008 15:47:54
Esquemas de bloques david.rguez Gráficos 1 01-09-2007 00:05:01
Bloques De Numeros Consecutivos dany2006 C++ Builder 5 15-11-2006 21:06:16


La franja horaria es GMT +2. Ahora son las 17:43:51.


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
Copyright 1996-2007 Club Delphi