Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   buscar registro, ADOTable (https://www.clubdelphi.com/foros/showthread.php?t=81959)

Daniel10 08-01-2013 15:44:17

buscar registro, ADOTable
 
Hola a todos, tenog esta dua...

Quiero hacer una busqueda incremental, tengo una base datos, y deseo buscar un campo, apellido, nombre, numero identidad o lo que sea..

* Un dbgrid donde se muestra toda la base datos
* un Edit
* y chekbox o otra cosa, para seleccionar el campo a filtrar/buscar (APELLIDO, NOMBRE, CIUDAD, NUMERO)

quisiera que cuando se va escribiendo el campo a buscar, presiono la primer letra y en el dbgrid se borre todas las demas palabras que no empiecen con esa letra, lugo continuo escribiendo pongo la otra eltra, y se borre todas las palabras que no coincidan conesas dos priemras letras, y asi sucecivamente. A media que voy escribiendo se van borrando lo que no coincidan

Desde hace ratoq eu estoy buscando la manera y nunca encuentro como hacerlo, si las hay de otras maneras pero NO LA MIA.. y aora lei comentario que dicen que con ADOTABLE no se puede...

Mi pegunta es... que em recomiendan... algo sencillo, facil y menos complicado posible..

gracias antemano por centenares de respuestas

:)

Casimiro Notevi 08-01-2013 16:13:37

Mira los enlaces del final de esta misma página.

Neftali [Germán.Estévez] 08-01-2013 16:48:04

Cita:

Empezado por Daniel10 (Mensaje 453057)
Desde hace ratoq eu estoy buscando la manera y nunca encuentro como hacerlo, si las hay de otras maneras pero NO LA MIA.. y aora lei comentario que dicen que con ADOTABLE no se puede...

Se puede hacer, pero de forma manual. Es decir, el componente (ni ese ni ninguno de Base de Datos) hace eso.
Lo que debes hacer es a medida que vas pulsando teclas, generar una nueva consulta para que muestre datos en el Grid.

Por ejemplo, si pulsas J, deberás lanzar una consulta similar a esta:
Código Delphi [-]
   SELECT * From Nombre Like 'J%'

Al pulsar la siguiente, Ju, deberás lanzar la consulta:

Código Delphi [-]
   SELECT * From Nombre Like 'Ju%'

Y así sucesívamente.

El problema es que esta práctica no es muy recomendable, ya que estás generando mucho tráfico innecesario y muchas consultas. Una opción mejor, aunque no tan vistosa, es generar un filtro, y entonces realizar una única consulta.

Este ejemplo tal vez te sirva de guía, para entender cosas.

Daniel10 09-01-2013 02:29:11

gracias,
 
muchas gracias por als respuestas... creo que vere la manera mas conveniente de hacer mi programita, aparentemente usando AdoQuery y sq.

La base datos no es muy grande, pero se ira cargando registros al pasar del tiempo...

gracias por responder a mi duda.

ecfisa 09-01-2013 06:13:19

Hola Daniel10.

Si te decidis por usar un ADOQuery te pongo un ejemplo de búsqueda incremental con ese componente. Al igual que comenta Neftali, aprovecha el evento OnChange de un Edit para lanzar la nueva consulta.
Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var
  cpo: string;
begin
  if RadioGroup1.ItemIndex > -1 then
    with ADOQuery1 do
    begin
      Close;
      case RadioGroup1.ItemIndex of
        0: cpo:= 'APELLIDO';
        1: cpo:= 'NOMBRE';
        2: cpo:= 'CIUDAD';
        //...
      end;
      SQL.Text:= 'SELECT * FROM TU_TABLA WHERE ' + cpo + ' LIKE :PVALOR';
      Parameters.ParamByName('PVALOR').Value:= Edit1.Text + '%';
      Open;
    end
end;
También tomá en cuenta lo mencionado en cuanto a la ineficiencia de esta forma de filtrado.


Saludos. :)


La franja horaria es GMT +2. Ahora son las 20:39:17.

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