Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-04-2004
buitrago buitrago is offline
Miembro
 
Registrado: sep 2003
Posts: 156
Poder: 21
buitrago Va por buen camino
Locate lentísimo

Por que puede pasar, uso FireBird 1.5, y cuando hago un Locate se pone lento que casi me bloquea el PC, ya borré la basura, pero sigue en lo mismo.

La tabla posee tres tablas colgadas a través de LookUps y tengo 6516 registros...

Gracias
Responder Con Cita
  #2  
Antiguo 04-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Es que locate es realmente ineficiente. No podes cambiar tu código para que use FindKey?? o bien lanzando SQL's directamente contra la base de datos??

Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 04-04-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si no actúa con rapidez es porque no tienes un índice declarado para la búsqueda que estás efectuando.

Cita:

Locate returns True if it finds a matching record, and makes that record the current one. Otherwise Locate returns False.

Locate uses the fastest possible method to locate matching records. If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search.


Resumiendo para no traducir toda la ayuda al respecto, si los campos por los que se busca están indexados y el índice es compatible con las opciones de búsqueda especificadas, Locate utiliza el índice. En caso contrario crea un filtro para la búsqueda.

En este último caso, no tener un índice apropiado, vuelve la búsqueda muy lenta, la solución sería o bien crear un índice apropiado o sino abstenerse de dicha instrucción y utilizar simplemente SQL como te indica el compañero JachGuate.


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 04-04-2004 a las 11:53:13.
Responder Con Cita
  #4  
Antiguo 04-04-2004
buitrago buitrago is offline
Miembro
 
Registrado: sep 2003
Posts: 156
Poder: 21
buitrago Va por buen camino
sigue lento......

Pero.....es busqueda por la Llave Primaria, y sigue lento......

Locate sé que busca el Indice si la cadena de campos lo posee, een este caso es la llave primaria....

saludos
Responder Con Cita
  #5  
Antiguo 05-04-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
El comando locate solo puede usar indices en motores de bases de datos que no sean cliente/servidor como Paradox/Dbase, etc. Estos tipos de base de datos son navegacionales de modo que se puede leer del servidor un solo registro de una tabla, por ejemplo el ultimo registro, sin necesidad de leer los registros anteriores (utilizando como ayuda un determinado indice).

En los motores c/s no existen tablas a las que se puedan acceder directamente, solo se pueden ejecutar sentencias SQL que devuelven determinados resultados. Y estos resultados no son navegacionales.

Si haces un SELECT * FROM TABLA, el resultado son todos los registros, si a esta sentencia le aplicas un Locate, no hay mas remedio que recorrer uno por uno todos los resultados de la sentencia para localizar los registros que cumplan la condicion, y aunque el resultado de la query este ordenado no puedes ir directamente a la 'Z' sin haber leido anteriormente todos los registros que comiencen por 'A','B', etc,etc.

Si quieres que las busquedas vayan rapidas tendras que ejecutar una sentencia SQL que te devueva solo unos pocos registros, aquellos en los que estes interesado (ajustando adecuadamente las condiciones de la clausula WHERE de la sentencia).

Saludos
Miguel
Responder Con Cita
  #6  
Antiguo 05-04-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
La ayuda a la que me refiero es de las IBX.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
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


La franja horaria es GMT +2. Ahora son las 21:02:33.


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