Consultas incrementais, como melhorei as minhas...
Crie um Timer, ele será responsável por executar suas consultas.
Propriedades do Timer
Interval = 300 // aqui vc configura a sensibilidade da coisa...
Enabled = false
procedure TF_PDV.Edit_ProdutoChange(Sender: TObject);
begin
Timer.enabled := false; // reset do timer a cada teclagem
Timer.enabled := true;
if empty(Edit_Produto.Text) then
begin
Timer.enabled := false; // campo vazio.... Timer desligado
Query_Produtos.Close; // Consulta de produtos é fechada (necessário no meu caso)
end;
end;
procedure TF_PDV.TimerTimer(Sender: TObject);
begin
Timer.enabled := false; // Timer atingiu o tempo, se desliga e dispara a consulta.
Filtra_Produtos(Edit_Produto.Text); // Função que dispara a consulta do produtos
end;
Funcionamento
Quando o campo que vc utiliza receberem uma informação (onChange por exemplo)
esse evento irá resetar o timer e assim não desperdiçará uma ou mais consultas
com as teclagens iniciais, até o usuário terminar ou fazer uma pausa em sua digitação.
No meu caso 300 milisegundos deram conta do recado...
ou seja, quando o usuário está teclando, sem saber a cada tecla na verdade
ele está postergado o disparo da consulta, assim que ele faz uma pausa
o timer inicia a contagem do tempo, e se atingir o liminar que você definiu
pronto, a consulta ocorre, se antes disso o distinto usuário pressionar
outra tecla, o timer é interrompido e ninguém perde tempo com
disparados desnecessários das consultas;
se o campo estiver vazio o timer é desligado.
Fica minha contribuição.
Abel F. de Angelis
AFA - Assessoria e Informática Ltda