Búsqueda Progresiva

Delphi 7, base de datos en access
Tengo en un formulario un, DBtable(DBE), DataSource1, dbgrid1, edit1.text
quiero que cuando introduzca una letra en el edit1.text el DbGrid1 debe ir reduciendo los datos y solo dejando lo que coincidan con las letras introducida, solo utilizo el campo nombre para hacer el filtro, debe de funcional en cualquier parte del nombre, por ejemplo
(Nombre)
Claudio si escribo 'io' me deben aparecer todo lo que tenga esa letras
Antonio y así es la cosa, si entro 'nio' solo tendría que aparecerme 2
Felipe Antonio
en events onkeypress del Edit1.text tengo esto
procedure TBuscadorEmp.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 Bus_Empleado.Filtered := False;
 Bus_Empleado.Filter:='nombre ='+QuotedStr(Edit1.TExt);
 Bus_Empleado.Filtered := True;
end;
Pero no resulta lo que quiero

1 respuesta

Respuesta
1
No es posible hacer lo que pides a través de la propiedad "Filter" de la tabla, ya que esta propiedad no admite búsquedas por partes. Tan solo seria posible buscar por el inicio de la palabra, es decir, que filtre todas las que comiencen por "io"...
Bus_Empleado.Filter := 'Nombre=''' + Edit1.TExt + '*''';
Si deseas realizar una búsqueda por "parte" del texto, sea cual sea su posición, deberás utilizar un componente "Query" y realizar una consulta SQL...
Query1.close;
Query1.Sql.Text := 'SELECT * FROM MiTabla.DB WHERE Nombre LIKE ''%io%''';
Query1.Open;
Gracias por contestarme.
Me podías explicar mejor, es que soy nuevo con delphi.
Puse el componente "Query", queda así
dentro del "Edit1.text" en events onkeypress
Query1.close;
Query1.Sql.Text := 'SELECT * FROM Dbase\RecurHumanos.mdb WHERE Nombre LIKE ''%edit1.text%''';
Query1.open;
Pero me da un error, explicame paso a paso.
Mi base de datos estas en access, conectada por "ODBC"
Gracias
Hola de nuevo, si me puedes enviar un ejemplo me seria me mucha ayuda.
mi email es claudio1123 @ hotmail . com
1.- La manera correcta sería:
Query1.Sql.Text := 'SELECT * FROM Nombre_Base_Datos WHERE Nombre LIKE ''%' + edit1.text + '%''';
2.- Disculpa, pero no había leído que era una base de datos Access. Este tipo de base de datos NO son SQL, por lo que no podrás utilizar el método propuesto. Deberías utilizar MySQL, Microsoft SQL, Firebird o similar, o desistir de filtrar de la manera que quieres. Para Access, el único método es el que utilizas de un principio.
Otro apunte sobre lo que quieres hacer. Lo mejor sería que el evento onkeypress del componente Edit1 pusiera en marcha un Timer (Paleta System, pégalo y modifica la propiedad Enabled a False), y que sea el Timer quien ejecutara el filtrado (al pasar 1 segundo por ejemplo). De esa manera se filtraría 1 segundo después de pulsar la última tecla, no cada vez que pulsas una tecla...
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Timer1.Enabled := False;
  Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  // Aqui las órdenes de filtrado
end;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas