FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Búsquedas a través de TTable y/o TQuery y resultado en DBGrid
Buenas buenas. Agradecería enormemente si alguien podría darme información al respecto. Resulta que a través de una consulta SQL vierto datos a un DBGrid (vía un TQuery). ¿Existirá alguna forma de que un usuario conforme teclea un nombre en alguna caja de texto, en el DBGrid se vaya seleccionando la fila que vaya coincidiendo con lo que el usuario teclea pero siendo una actualización conforme se pulsa caracter por caracter? Algo así como utilizar Locate en un TTable.
O bien, suponiendo que el caso anterior no tenga solución, ¿es posible que un DBGrid enlazado a un TTable contenga únicamente los registros que satisfagan algún criterio de búsqueda x? De antemano gracias. |
#2
|
|||
|
|||
Seria algo como:
En el evento onkeypress del DBgrid añadi: Código:
letras:=letras+uppercase(key); ADOQuery1.LOCATE(CampoDeLaTabla, letras, [loPartialKey]); Código:
IF (KEY=38) or (key=40) then letras:=''; end; letras:=''; |
#3
|
|||
|
|||
Bueno al problema que tu tienes talvez lo puedas solucionar con un filtrado de datos (o quizas es lo que quieres) a travez de un TTABLE o un TQUERY para comenzar los tienes que tener es:
El TTable o el TQuery debe estar ligado con un TDataSource y este a su vez debe estar ligado a un TDBGrid para poder visualizar los resulados. Al conectar el TTABLE a un tabla y al activar la tabla aparecen todos los datos en el DBGRID, y para filtar datos segun las letras que van poniendo y para poder ir visualizando los resultados tendrias que hacer un filtro mas o menos asi en el evento onchangre de tu Edit, en este caso yo le llame EFiltro a mi Edit: procedure TForm1.EFiltroChange(Sender: TObject); begin if not (EFiltro.text = '') then begin DM.TTable.Filtered := False; DM.TTable.Filter := '' + 'CAMPO' + ' Like ' + QuotedStr(EFiltro.text + '%') DM.TTable.Filtered := True; end else DM.TTable.Filtered := False; end; Esta seria la forma de filtar datos en un TTABLE ojo que si deseas hacer un filtrado con opciones de varios campos para que el usuario elija podrias reemplazar el filtro por: DM.TTable.Filter := '' + CBFiltro.Text + ' Like ' + QuotedStr(EFiltro.text + '%'); donde CBFiltro es un Combobox donde listo los campos de la tabla con las cuales puedo filtrar. En componentes como Zeos me toco que en vez de poner % debi poner * para que realizara el filtrado. Y ahora para realizar el filtrado con un TQUERY segira de la siguiente manera: procedure TForm1.EfiltroChange(Sender: TObject); begin if not (EFiltro.Text = '') then begin TQuery.Close; Tquery.SQL.Clear; TQuery.SQL.Add('Select * from Producto where nombre like ' + '''' + EFiltro.Text + '%' + ''''); TQuery.Open; end else begin TQuery.Close; Tquery.SQL.Clear; TQuery.SQL.Add('Select * from Producto where nombre like ' + '''' + EFiltro.Text + '%' + ''''); TQuery.Open; end; end; y para que puedas realizar un filtrado con opciones de varios campos solo reemplazarias esta linea: TQuery.SQL.Add('Select * from Producto where ' + CBFiltro.Text + ' like ' + '''' + EFiltro.Text + '%' + ''''); Bueno espero que te haya sido de mucha utilidad estos ejemplos que te puse antes de subirlos los probe y estan corriendo. Solo una pequeña cosa mas no soy un experto en esto pero me toco que cuando hize los filtrados con TQuery las respuestas de los datos desplegados al DBGrid fueron mucho mas rapidas que con un TTAble ahora depende de ti con cual desees trabajar. Suerte y espero que te haya podido ayudar. |
#4
|
|||
|
|||
Cita:
Hola, Tengo que hacer un filtrado de lo campo "vicst". Filtrar datos segun los numeros (qualquer dato com 0, 1, 2, ..., o 9). Como hacer? Solo ej., algo como:
Un otro problema son los acentos. El filtro ignora los acentos.
Funciona bien, pero caso los datos del campo vicst comenzam com acentos (ex.: Âxxx, Áxxx, Ãxxx, Àxxx, etc) el filtro no funciona. Como solucionar esto? |
#5
|
|||
|
|||
#6
|
||||
|
||||
|
|
|