Club Delphi  
    Paypal   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 28-07-2011
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.235
Poder: 24
keys Va por buen camino
Locate Firebird

Hola a todos. Tengo una tabla de clientes con unos 4000 registros. Tengo que mostrar todos los registros en un grid. Esto se hace muy rapido a través de un query (select campos from clientes order by codigo) conectado a un TDbGrid.

El problema viene cuando tengo que posicionarme en un registro en concreto, esto lo hago con un locate, si el registro es de los primeros se hace rápidamente pero si es de los últimos tarda un rato.

El problema viene dado por que el locate se recorre todos los registros hasta encontrar el que busca y si es el de los últimos por eso tarda más.

La pregunta es, hay alguna forma de posicionarse en un registro concreto de una forma más rápida?. Un Saludo y Gracias.
Responder Con Cita
  #2  
Antiguo 28-07-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.676
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Bueno, para empezar, ¿para qué se quiere 4000 registros en la pantalla?, ¿para estar con las teclas arriba y abajo?, si va a buscar uno en particular pues pon un filtro y te traes los que busque únicamente.
Si no queda más remedio que tenerlos todos en la pantalla, entonces usa una tabla en memoria, tipo tkbmemtable, por ejemplo, su sistema de búsqueda con índices es hiperultrasupermegarapidísimo
Responder Con Cita
  #3  
Antiguo 28-07-2011
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.235
Poder: 24
keys Va por buen camino
Tu lo has dicho, tiene que tener 4000 registros para estar con las teclas para arriba y para abajo. O lo que es mejor tener la lista de todos sus clientes y moverse entre ellos rapidamente sin tener hacer filtros.

El usuario no quiere buscar uno en concreto, ya que sino haría un filtro como tu dices, sino posicionarse en uno en concreto para trabajar con el.

GRACIAS
Responder Con Cita
  #4  
Antiguo 28-07-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.676
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por keys Ver Mensaje
Tu lo has dicho, tiene que tener 4000 registros para estar con las teclas para arriba y para abajo. O lo que es mejor tener la lista de todos sus clientes y moverse entre ellos rapidamente sin tener hacer filtros.
El usuario no quiere buscar uno en concreto, ya que sino haría un filtro como tu dices, sino posicionarse en uno en concreto para trabajar con el.
GRACIAS
O sea, para no perder tiempo en poner "GOMEZ" y dar al botón buscar, prefiere darle cuatro mil veces a la tecla del cursor, que es más rápido, vale.
Pues nada, que siga así, cuando tenga mil millones de clientes se hartará de reir
Responder Con Cita
  #5  
Antiguo 28-07-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
También puedes tener una tabla que tenga solo codigo y nombre de cliente y que cuando cambie de registro muestre todos los demás datos en otras tablas.

TClientes (ID, Nombre)
TCliente (ID, Nombre, Direccion, etc.)

Unes las dos tablas por el DataSource. (Haces un maestro/detalle)
TCliente.DataSource := TClientes;

En el grid muestras solo ID y nombre de la tabla TClientes.

Quedaría algo asi:
Código Delphi [-]
TClientes.AfterOpen
begin
   TCliente.Open;
end;

TClientes.BeforeClose
begin
   TCliente.Close;
end;

Locate
begin
  TClientes.DisableControls;
  TClientes.Locate(...);
  TClientes.EnableControls;
end
Responder Con Cita
  #6  
Antiguo 29-07-2011
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 24
PepeLolo Va por buen camino
Pardon, pero eso de mostrar 4000 registros es una ....., no tiene ninguna justificación. De todas formas yo siempre obligo al usuario a filtrar por los campos que muestro en la rejilla.

De que sirve mostrar 4000 registros, si el registro que va a necesitar el 99% de los casos nunca será de los primeros, ni de los que estén a la altura del registro activo. De todas formas yo siempre ejecuto SQL, locate no sirve para bbdd y cargar información en tablas de memoria no veo que sea una solución. Al usuario hay que proporcionarle los medios correctos no los que el considere que son, sobre todo cuando hablamos de acceso a datos.
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
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
locate marcosmendozaa Varios 6 29-05-2014 22:37:07
Locate mauqu Varios 9 06-08-2007 17:27:20
Yo uso LOCATE y tu......... JULIOCTORRESG Varios 1 02-03-2007 01:10:47
Locate sanrp2004 Varios 3 21-06-2006 20:30:37
Uso del Locate jzk Conexión con bases de datos 8 22-04-2005 13:05:03


La franja horaria es GMT +2. Ahora son las 00:17:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi