Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   filtro por caracter (https://www.clubdelphi.com/foros/showthread.php?t=73847)

negrokau 19-05-2011 21:49:20

filtro por caracter
 
hola... necesito filtrar una lista de registro de socio o sea los nombres, por caracteres.. es decir a medida que voy escribiendo en un edit vaya apareciendo las coincidencias en un tdbgrid, muchas gracias por su tiempo....

Caral 19-05-2011 21:50:37

Hola
Query o table ?.
Que BD ?.
Saludos

negrokau 19-05-2011 21:54:06

el motor es interbase, con un query hice la consulta caral....

Caral 19-05-2011 22:01:13

Hola
Tienes que hacer la consulta sql y usar like, algo asi:
Código Delphi [-]
TuQuery.sql.tect:= 'Select Nombre from tuTabla where nombre LIKE '''+ Edit1.Text + '%''';
Saludos

heroe555 19-05-2011 22:02:57

Filtrar en SQL
 
Veo que usas un dbgrid. Lo puedes conectar a un dataset y este a su vez a un query. En el evento del edit (On Change), refresca el query, y dejalo en active = True, cuando salgas del form cambia su active a false. Listo!

Un ejemplo de refrescamiento puede ser:
Código Delphi [-]
 
with Query do
 begin
   Active := False;
   SQL.Clear;
   SQL.Add('Select * From Clientes Where Nombre like =:Param0');
   with Parameters do
     Items[0].Value := QuoteStr('%' + edit.text + '%'); //Busca cualquier   coincidencia
   Active := True;
 end;

Nota: Recuerda que también puedes usar filtros.

negrokau 19-05-2011 23:10:44

voy a probarlo.... ah y como hago que me salga en tdbgrip las coincidencias?

heroe555 19-05-2011 23:48:40

Coincidencias en el dbgrid
 
Las coincidencias salen de forma automatica cada vez que refrescas la consulta, y esta se refresca en el evento OnChange del edit.

Nota: Esto afecta mucho el rendimiento del servidor, más si trabajas en red.
Por tanto, recomiendo que uses una tabla en memoria, como el comopnente virtualtable de devart(gratuito) o bien, el componente que incluye delphi clientdataset.

Neftali [Germán.Estévez] 20-05-2011 10:33:44

Échale un vistazo a este ejemplo a ver si es lo que necesitas.
De todas formas, soy de los que piensan que la búsqueda incremental en los Grid no es adecuada, a no ser que estés convencido de que el Grid va a tener muy pocas filas.
De otra manera estás haciendo muchas más consultas de las estrictamente necesarias.
También debes tener en cuenta el tráfico de red (si es tu caso) que puede generar.

negrokau 20-05-2011 13:54:19

muchas gracias... lo voy a probar... gracias por tu tiempo...

oscarac 20-05-2011 15:48:52

Cita:

Empezado por Neftali (Mensaje 400746)
Échale un vistazo a este ejemplo a ver si es lo que necesitas.
De todas formas, soy de los que piensan que la búsqueda incremental en los Grid no es adecuada, a no ser que estés convencido de que el Grid va a tener muy pocas filas.
.

estoy de acuerdo con esto, yo lo hago de una manera un poquito diferente, no ejecuto el query por cada caracter, lo que hago es buscar el dato en la tabla o el query, asi evito un poco el trafico, algo mas o menos asi

Código Delphi [-]
 
procedure TfrmCatalogoTrabajador.edtSearchChange(Sender: TObject);
var _Position :TBookmarkStr;
begin
  if qryTrabajadores.Locate('KOD', edtSearch.Text, [loPartialKey]) then
    Begin
      _position := qryTrabajadores.Bookmark;
      qryTrabajadores.Sort := 'KOD';
      qryTrabajadores.Bookmark := _position;
      dbgTrabajadores.Show;
    End;
end;


La franja horaria es GMT +2. Ahora son las 18:48:14.

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