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 05-10-2007
Ubed Ubed is offline
Miembro
 
Registrado: ago 2007
Posts: 71
Poder: 17
Ubed Va por buen camino
Findkey?? o Locate

Buenas tengo un dataset relleno con mas de 10000 registros y quiero visualizarlos para kon un control movermer por ellos el problema es que al posicionarme en uno con el locate se ace muy lento, me an comentado algo de un FindKey o Find Index, que sabeis de esto??
Responder Con Cita
  #2  
Antiguo 05-10-2007
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 Ubed, puedes usar los metodos FindKey (para una busqueda exacta) o FindNearest (para una busqueda aproximada) para ambos casos debes definir el campo que sera tu indice, esto lo haces en la propiedad IndexFieldNames de tu componente Table y lo usas de la siguiente manera:

Código Delphi [-]
 //busqueda aproximada
 Table1.FindNearest([Edit1.Text]);
 
//busqueda exacta
Table1.FindKey([Edit1.Text]);

Con el Locate la busqueda se hace mas rapida si tienes definido un indice, pero si no lo tuvieras hace una busqueda secuencial lo cual seria lento si tienes muchos registros.

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
  #3  
Antiguo 05-10-2007
Ubed Ubed is offline
Miembro
 
Registrado: ago 2007
Posts: 71
Poder: 17
Ubed Va por buen camino
Cita:
Empezado por Caro Ver Mensaje
Hola Ubed, puedes usar los metodos FindKey (para una busqueda exacta) o FindNearest (para una busqueda aproximada) para ambos casos debes definir el campo que sera tu indice, esto lo haces en la propiedad IndexFieldNames de tu componente Table y lo usas de la siguiente manera:

Código Delphi [-] //busqueda aproximada
Table1.FindNearest([Edit1.Text]);

//busqueda exacta
Table1.FindKey([Edit1.Text]);


Con el Locate la busqueda se hace mas rapida si tienes definido un indice, pero si no lo tuvieras hace una busqueda secuencial lo cual seria lento si tienes muchos registros.

Saluditos
esa funcion la puedo usar en un dataset??
Responder Con Cita
  #4  
Antiguo 05-10-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
FindKey no está implementado en todos los tipos de Datasets. Por lo general, aunque esto depende del tipo de dataset que uses, locate usa los índices de la tabla si existen para el campo sobre el que estás haciendo la búsqueda, por lo que no hay diferencia en cuanto a la velocidad.

Locate, además, está definido en todos los datasets.
__________________
Saludos.
Responder Con Cita
  #5  
Antiguo 05-10-2007
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Cita:
Empezado por Ubed Ver Mensaje
tengo un dataset relleno con mas de 10000 registros y quiero visualizarlos para kon un control movermer por ellos
¿Y quieres navegar entre 10.000 registros?

¿El control al que te refieres es un dbgrid?

En principio, y sin conocer más detalles, te recomiendo que te plantees filtrar previamente esa información para navegar entre los registros que realmente necesitas... asi no creo que te haga falta usar ni locate ni findkey.. no se.
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #6  
Antiguo 05-10-2007
jhlsys jhlsys is offline
Miembro
 
Registrado: ago 2004
Posts: 25
Poder: 0
jhlsys Va por buen camino
Sugerencia

Código Delphi [-] //busqueda aproximada
Table1.FindNearest([Edit1.Text]);

//busqueda exacta
Table1.FindKey([Edit1.Text]);
Para este tipo de busqueda se necesita un indice activo, y obviamente la busqueda sera precisa y te ubicara al primer registro coincidente.

Si pretendes buscarlos con el metodo locate, al ser un metodo de busqueda secuencial, sera mas lento, salvo que busques varios regiustro coincidentes, se acelera un poco si lo trabajas con un indice activo, pero si desabilitas los controles de la data, y lo activas despues de haber llegado al registro buscado,

Table1.disablecontrols;
Table1.locate(parametros de busques);
table1.enablecontrols

Pero como sugirienron, si son varios y coinicentes, seria mejor que emplees un filtro.
Responder Con Cita
  #7  
Antiguo 08-10-2007
Ubed Ubed is offline
Miembro
 
Registrado: ago 2007
Posts: 71
Poder: 17
Ubed Va por buen camino
muchas gracias a todos, al final use el locate, pero ahora se me plantea otra pregunta.

Puedo utilizar un unico valor para buscar en varios campos??

kiero decir yo tengo mis registros y kier ver el k tiene el telefono 978834266 pero puede estar en 4 campos, telefono1, telefono2, telefono3, fax

Puede emplear el locate para buscar en los 4 ese valor??
Responder Con Cita
  #8  
Antiguo 08-10-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Puedes usar varios locate, aunque para ese caso creo que sería mejor un filtro o una consulta sql. De todas maneras si quieres usar locate:
Código Delphi [-]
  if not Table.Locate('telefono1', numTelefono, []) then
    if not Table.Locate('telefono2', numTelefono, []) then
      if not Table.Locate('telefono3', numTelefono, []) then
          Table.Locate('telefono4', numTelefono, []);
__________________
Saludos.
Responder Con Cita
  #9  
Antiguo 10-10-2007
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Smile

hola Ubed, también puedes usar esta forma:
Código Delphi [-]
if tutabla.Locate('campo1;campo2', VarArrayOf([edit1.text, edit2.text]), []) then
// lo que quieras hacer...
Puedes colocar todos los campos que quieras
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
problema findkey y gotonearest Ariel03 OOP 2 24-06-2007 15:44:15
Findkey e IBTable Puche Firebird e Interbase 1 10-07-2006 15:47:12
Trabajar con locate y FindKey jmedina Conexión con bases de datos 1 05-10-2004 07:57:49
Findkey trex2000 Tablas planas 15 01-04-2004 21:35:35
Findkey en ADO !!! vpepen Conexión con bases de datos 3 05-12-2003 11:14:18


La franja horaria es GMT +2. Ahora son las 04:08:12.


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