![]() |
Buscar siguiente registro con F3 en un DBGrid usando Locate
Necesito que me echen otra mano...
En una base de datos de Access busco con Locate (con la option loPartialKey) en un campo Apellidos un registro que empiece con determinado apellido que es escrito en el edit1.text. El locate me encuentra el primer registro que empieza con, por ejemplo, el apellido Mar, y el puntero en el DBGrid se moverá al primer Mar. Necesito seguir buscando tantos Mar (Martinez, Martin, Maren, Marzan etc) como hayan en la base de datos, y que el puntero se mueva al siguiente o al anterior, pudiera ser programando la tecla F3 o un boton como se hace en Windows y seguir recorriendo la base de datos por cada registro que contenga la cadena del edit1.text. Sería genial poder hacerlo con F3 Es un lío, pero espero que lo entiendan. Gracias |
Busca información sobre OnKeyPress, OnKeyUp y OnKeyDown.
Este es un ejemplo de como poder hacerlo
|
Y.... ¿no quedaría más elegante hacer un select y que solamente quedaran los registros que cumplan la condición?
Saludos |
Cita:
Saludos! |
Ok, muchas gracias.
No es como yo hubiera querido, pero si no hay de otra, lo haré como ustedes me dicen...:( Gracias |
No entiendo en qué estáss atorado, ¿en la funcionalidad en sí de recorrer los registros encontrados o en acceder a dicha funcionalidad mediante la tecla F3?
// Saludos |
Considero que con una instruccion select resolverias lo que quieres
quedaria algo asi como esto: Esto lo colocarias en el evento onChange del Edit1.text asi cada vez que tipeen algo el mostrara el resultado Saludos espero haberte ayudado |
Si, mira, necesito, en un DBGrid (sin filtrar) que el locate me encuentre los registros, el primero y despues con la Tecla F3 seguir buscando los registros que sean igual a la condicion buscada. Pero no filtrar la base por la condicion, sino mostrar todos los registros e ir moviendo el puntero por cada registro que encuentre el locate segun la condicion dada en un Edit.
Vaya, que si Delphi tuviera el LocateNext sería genial! Gracias |
Bueno, yo hice alguna vez algo como lo que tú quieres pero fue hace mucho tiempo y ahora que lo reviso me queda la sensación de que debe haber una forma más sencilla.
Básicamente lo que hice fue ejecutar una consulta auxiliar para la búsqueda, es decir, hay una consulta sin filtrar que es la que se enlaza al DBGrid y una segunda consulta (un Query) correspondiente a la búsqueda del usuario. Cada vez que se aprieta el botón "Siguiente" (o la tecla F3 en tú caso) lo que hago es esto: 1. Ejecuto el método Next de la consulta auxiliar. 2. Leo el valor de la llave primaria del registro actual. 3. Uso ese valor en el método Locate de la consulta principal. De todas maneras, es algo que ya no haría actualmente. Eso de mostrar al usuario todos los (posiblemente miles de) registros para luego ir buscando entre ellos la información deseada, es cosa del pasado. Pero tus razones tendrás, así que lo anterior tómatelo sólo como un consejo. El método que te describo debe funcionarte. // Saludos |
Cita:
No entendía lo que buscabas, pero ahora creo que querés hacer algo similar a una busqueda incremental. Para eso bastaría que usaras un ADOQuery con un DataSource asociado, un DBGrid asociado al anterior y agregues este código al evento OnChange del Edit: Donde los nombres TU_TABLA y TU_CAMPO deberás reemplazarlos por los que utilices en tu caso. Pero como te digo, no sé si te he interpretado bién... :rolleyes: Un saludo. Edito: Se me olvidó agregar ORDER BY. |
Perfecto! Ahora sí funciona!! Tomé los consejos.
Eso es lo que yo quería. Es que yo lo digo, ustedes son genios! Gracias a TODOS por la ayuda una vez mas y un abrazo Manuel |
Te invito a que coloques cual fue la solucion que te ayudo en tu problema, asi por si a otra persona se le presenta el mismo caso sabra que solucion tomar :rolleyes:
|
Usé el consejo de Roman en cuanto a hacer una consulta auxiliar para buscar sin filtrar y utilizar el valor en el locate de la consulta principal. (Roman, es que necesito estar viendo todos los registros para comparar...) Ya he tenido problemas con filter y locate, porque el locate ignora el filtro (en mi Delphi)
Además utilice el método de eficsa que me hizo la búsqueda mas efectiva. Realmente la solución que me dieron dió un producto mejor del que yo había pensado. Gracias! |
La franja horaria es GMT +2. Ahora son las 09:28:27. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi