A utilização de índice nos permite pesquisarmos um registro em memória sem precisarmos ir ao banco de dados dando um select, podemos utilizar alguns métodos do ClientDataSet como o FindKey e FindNearest.
FindKey: Ele faz uma busca precisa em memória trazendo o registro que contenha a expressão utilizada pelo usuário, ou seja, se você deseja buscar por nome, você terá que digitar exatamente como está descrito no ClientDataSet, ou seja, se você quer o João Carlos, terá que digitar João Carlos, não basta digitar só João.
Coloque em nosso formulário um Edit e mude a propriedade name para edtLocaliar e no evento OnKeyUP do mesmo coloque o seguinte código:
procedure TfrmPrincipal.edtLocalizarKeyUp(Sender:
TObject; var Key: Word; Shift: TShiftState);
begin
cdsPessoa.IndexFieldNames:='id';
cdsPessoa.FindKey([edtLocalizar.Text]);
end;
Para utilizarmos o método FindKey temos que ter um índice definido, aqui criamos um índice com o campo id e pedimos para o método FindKey localizar nesse índice o registro o qual passamos a instrução no Edit para localizá-lo.
FindNearest: Esse método posicionará o cursor no nome mais próximo ao digitado pelo o usuário ou exatamente como o usuário digitou, um fato importante é que ele assim como o FindKey, posiciona o cursor no registro, eles não nos retorna uma lista aproximada.
procedure TfrmPrincipal.edtLocalizarKeyUp(Sender:
TObject; var Key: Word; Shift: TShiftState);
begin
cdsPessoa.IndexFieldNames:='nome';
cdsPessoa.FindNearest([edtLocalizar.Text]);
end;
Assim como o método FindKey o método FindNearest precisa também de índice para poder varrer esse índice a diferença que ele procura o registro que está mais próximo do que foi digitado no Edit.
Nota
Para utilizar os métodos FindKey e FindNearest não podemos definir mais
de um campo na propriedade indexFieldNames.
Vamos criar um maneira para escolhermos por qual campo desejamos procurar. Adicione em nosso formulário um ComboBox e na propriedade Itens coloque os seguintes itens:
ID
Nome
Cidade
UF
Telefone
Salário
Marque a propriedade ItemIndex como 0 e no evento OnKeyUP do Edit coloque o seguinte código, como demonstra a seguir:
procedure TForm2.Edit1KeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if ComboBox1.ItemIndex = 0 then
begin
cdsPessoa.IndexFieldNames:='id';
cdsPessoa.FindKey([edtLocalizar.Text]);
end;
if ComboBox1.ItemIndex = 1 then
begin
cdsPessoa.IndexFieldNames:='nome';
cdsPessoa.FindNearest([edtLocalizar.Text]);
end;
if ComboBox1.ItemIndex = 2 then
begin
cdsPessoa.IndexFieldNames:='cidade';
cdsPessoa.FindNearest([edtLocalizar.Text]);
end;
if ComboBox1.ItemIndex = 3 then
begin
cdsPessoa.IndexFieldNames:='UF';
cdsPessoa.FindNearest([edtLocalizar.Text]);
end;
if ComboBox1.ItemIndex = 4 then
begin
cdsPessoa.IndexFieldNames:='Telefone';
cdsPessoa.FindNearest([edtLocalizar.Text]);
end;
if ComboBox1.ItemIndex = 5 then
begin
cdsPessoa.IndexFieldNames:='Salario';
cdsPessoa.FindNearest([edtLocalizar.Text]);
end;
end;
Fico por aqui, até o próximo.
Rubens Antunes
Autor do Livro: Delphi – Faça Uma Aplicação Comercial