Hola Jafera
Yo antes usaba un metodo parecido al tuyo para hacer las busquedas, aunque despues me encontre otro mas practico:
Antes usaba este metodo:
1.- un JvDBFindEdit que tiene asociado el datasourse del grid, este compontente que pertence a Jedi Vcl project, hace el trabajo por ti, y tiene 2 modos locate y filter, ademas te permite buscar por fisrtpos o anypos.
2.- un Combo box con los posibles criterios de busqueda (campos)
3.- En el evento OnCloseUp del compo el siguiente codigo:
Código Delphi
[-]
procedure TfrmBuscArt.cbbBuscarPorCloseUp(Sender: TObject);
begin
if cbbBuscarPor.ItemIndex=0 then
begin
JvDBFindEdit1.DataField:='DESCR';
end;
if cbbBuscarPor.ItemIndex=1 then
begin
JvDBFindEdit1.DataField:='CLV_ART';
end;
if cbbBuscarPor.ItemIndex=2 then
begin
JvDBFindEdit1.DataField:='CLV_ALTER';
end;
end;
El metodo que utilizo ahora es el siguiente:
1.- un JvDBFindEdit que tiene asociado el datasourse del grid, este compontente que pertence a Jedi Vcl project, hace el trabajo por ti, y tiene 2 modos locate y filter, ademas te permite buscar por fisrtpos o anypos.
2.- Quite el ComboBox ya que este me limita los criterios de busqueda a los que aparecen en el listado y cambie por hacer un evento que cuando hagas click en el titulo de la columna se cambie de criterio de busqueda o sea el campo de la columna que cliqueaste, para esto debes tener activada la propiedad TitleButtons en True en el grid.
3.- En el evento OnTitleBtnClick del grid el siguiente codigo:
Código Delphi
[-]
procedure TFORM15.JvDBGrid1TitleBtnClick(Sender: TObject; ACol: Integer;
Field: TField);
begin
edtDESCR.DataField:=JvDBGrid1.Columns[Acol].FieldName;
Caption:='Busqueda de Articulos por '+JvDBGrid1.Columns[Acol].Title.Caption;
edtDESCR.Find(edtDESCR.Text);
chkExist.OnClick(Sender);
end;
edtDESCR es el nombre del objeto JvDBFindEdit que utilizo para la busqueda.
Tambien para cambiar el modo de busqueda en cualquier posicion o primera posicion lo hago con un checkbox y el siguiente codigo:
Código Delphi
[-]
procedure TFORM15.CheckBox1Click(Sender: TObject);
begin
if CHECKBOX1.Checked=True then
begin
edtDESCR.FindMode:=fmAnyPos;
edtDESCR.Find(edtDESCR.Text);
end;
if CHECKBOX1.Checked=False then
begin
edtDESCR.FindMode:=fmFirstPos;
edtDESCR.Find(edtDESCR.Text);
end;
end;
Espero te sirvan estas ideas y cualquier duda no mas escribes
Saludos