Fazer pesquisa incremental apenas com DBGrid no Delphi
Problema:
Gostaria de fazer um formulário de pesquisa que, ao digitar
algo sobre o DBGrid, o registro correspondendo fosse
localizado.
Solução:
- Coloque no form: TTable, TDataSource, TDBGrid e TLabel.
- Ajuste as propriedades do Table1:
DatabaseName =
TableName =
Active = true
- Ajuste as propriedades do DataSource1:
DataSet = Table1
- Ajuste as propriedades do DBGrid1:
DataSource = DataSource1
Options -> dgEditing = false
ReadOnly = true
* Pode também ajustar a propriedades Columns para escolher
as colunas que serão exibidas.
- Na seção private da unit declare:
private
FTexto: string;
- No evento OnCreate do form coloque:
FTexto := '';
Label1.Caption := '';
- No evento OnKeyPress do DBGrid1:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in [#8, #32..#255] then begin
if Key = #8 then { BackSpace }
FTexto := Copy(FTexto, 1, Length(FTexto)-1)
else
FTexto := FTexto + Key;
{ Posiciona na coluna Nome }
Table1.FieldByName('Nome').FocusControl;
{ Escolhe o índice e procura }
Table1.IndexFieldNames := 'Nome';
Table1.FindNearest([FTexto]);
{ Mostra o texto procurado }
Label1.Caption := FTexto;
end;
end;
Observações
No nosso exemplo estamos pesquisando através do campo “Nome”. Para esta pesquisa precisamos de um índice com este campo.