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??
|
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:
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 |
Cita:
|
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. |
Cita:
¿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. |
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. |
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?? |
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:
|
hola Ubed, también puedes usar esta forma:
Puedes colocar todos los campos que quieras:) |
La franja horaria es GMT +2. Ahora son las 19:58:03. |
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