FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Encontrar texto intermedio en un DBGrid
Hola a todos
tengo que encontrar un texto en un dbgrid que no necesariamente se encuentra al principio del campo, es decir, tengo un grid que puede tener 5 campos dentro de los cuales se encuentra el campo "Nombre" y en ese campo puedo tener lo siguiente pedro perez hernandez ana maría ramirez daniel fernandez Estoy utilizando Locate con LoPartialKey en el onchange de un edit1, pero el problema es que solo me encuentra la información si está al principio del registro, es decir, si coloco en el edit: daniel, encuentra el tercer registro inmediatamente, pero si escribo ramirez no busca nada, he buscado en los foros y no he encontrado nada al respecto, solo que puedo usar la instrucción like pero me parece un poco largo que cada vez que vaya a chequear un caracter en el onchange tenga que ejecutar una consulta con el like, entonces por eso quiero hacerlo mejor con Delphi, pero no veo la forma. Gracias por su apoyo
__________________
Oskar |
#2
|
||||
|
||||
Hola
Podrias crear un StringGrid (invisible) que contenga la informacion que saques del dato del campo. Con esta funcion separas la cadena:
despues generas el resultado, en este caso proviene de un edit pero puede probenir de un campo string:
Si quieres probar el ejemplo coloca un stringgrid un boton y un edit, pon en el edit el nombre, apellido1 y apellido2, pon el segundo codigo en el boton. Saludos
__________________
Siempre Novato |
#3
|
|||
|
|||
Hola Caral, muchas gracias por tu pronta respuesta.
Tal vez no me he explicado bien, realmente no quiero sacar texto del grid, lo que quiero es poder encontrar un registro en un grid más rápido que haciéndolo con las flechas de arriba y abajo. imagina una ventana de clientes, donde puedo ver en un dbgrid todos los clientes que se encuentran en el sistema hasta este momento, estos clientes son nombres de empresas. Pero la lista es un poco larga e incomoda para buscar un cliente determinado, sobre todo porque los nombres de empresas comienzan por Inversiones... o Corporación.... Representaciones..... etc. Entonces tengo un edit para colocar el nombre de la empresa a buscar en el evento Onchange del edit, de forma que vaya buscando de una vez a medida que voy colocando caracteres en ese edit, pero el problema es que tal vez el usuario no recuerda como comienza el nombre de la empresa, a lo mejor la empresa se llama "Representaciones Siglo XXI Decoraciones, SRL" lo que necesito es que si coloco XXI por ejemplo, el dbgrid haga focus inmediatamente en el registro que acabo de escribirte, pero actualmente el Locate que uso no lo encuentra porque solo encuentra la primera palabra con la que comienza la descripción, es decir..., "Representaciones". Agradezco tu apoyo
__________________
Oskar |
#4
|
||||
|
||||
Hola Oscar.
Un problema del método Locate, es que si no es aplicado sobre un campo índice, realiza la búsqueda secuencialmente y no te permite como bién lo has mencionado encontrar caracteres en cualquier posición del campo. Particularmente veo mucho más símple utilizar una consulta para lo que deseas hacer: De todos modos las búsquedas incrementales de ninguna manera son eficientes, e incrementan mucho el tráfico en el servidor. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 19-03-2012 a las 04:23:19. |
#5
|
|||
|
|||
Ecfisa, gracias por tu respuesta
Estoy haciendo las pruebas con lo me explicaste pero lo tuve que ajustar un poco porque no me dejaba compilar y lo hice de la siguiente manera with BuscaIntermedio do begin Close; SQL.Clear; SQL.Text:= 'SELECT * FROM dm.clientes WHERE cnombre LIKE=:BUSCADO'; Parameters.paramByName('BUSCADO').Value:= '%'+Edit1.Text+'%'; Open; end; y Ahora si me deja compilar, pero cuando voy a buscar en el edit, apenas voy a colocar el primer caracter me muestra el siguiente error: "BuscaIntermedio Parameter BUSCADO not found" Sabrás a que se debe? gracias
__________________
Oskar |
#6
|
||||
|
||||
Hola Oscar.
Si. En principio estás utilizando en la sentencia SQL una referencia al módulo de datos: SELECT * FROM dm.clientes ..., y lo que corresponde es el nombre de tabla. Es decir que tu código debería quedar más o menos así: Dentro de la sentencia SQL, asumo que CLIENTES es el nombre de la tabla y CNOMBRE el nombre del campo sobre el que realizas la búsqueda. De no ser estos los nombres, cambialos por los que correspondan. Aprovecho también para pedirte que cuando incluyas código en tus mensajes hagas uso de los TAG's. Te pongo una imágen que explica el uso: Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
|||
|
|||
Ecfisa, gracias, no sabía que se mostraba el código de esa manera
He estado tratando con lo que me pasaste, incluso ahora ya no tengo el query en el datamodule (dm) sino en el propio form de clientes, pero aún así todavía me sigue presentando el error "BuscaIntermedio Parameter BUSCADO not found" que extraño todo parece en orden
__________________
Oskar |
#8
|
||||
|
||||
Hola Oscar.
Se me deslizó un error en el código anterior, el signo '=' no corresponde (eso me pasa por hacerlo en el aire... ), así que sería: Para que puedas ver un ejemplo en funcionamiento, te adjunto uno con ADO, me dí cuenta que estás usando esos componentes por Parameters . Crea una carpeta y descomprimelo allí. El ejemplo usa la tabla country de dbdemos.mdb que viene con Delphi (que te incluyo). Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
DBGrid. Al actualizar los datos 'No pude encontrar la fila para su actualizacion' | juliannemiro | Varios | 2 | 02-02-2012 04:30:02 |
Autoajustar Dbgrid al texto | ingabraham | Varios | 1 | 12-02-2010 18:04:07 |
Seleccion de un Texto en un DBGrid | rjsitruiz | Varios | 2 | 31-05-2004 17:58:19 |
texto en un MEMO ...encontrar comparar | sakuragi | OOP | 4 | 27-02-2004 17:24:28 |
TDBCheckBox aparece en estado intermedio marcado y no marcado. | setry2 | OOP | 4 | 09-05-2003 05:55:57 |
|