Problema com pesquisa usando memo

22/03/2013

2

Ola, estou tentando montar um filtro, quando usuario digitira um problema tem que filtrar uma coluna para sabe que o mesmo problema trazido pelo cliente já existe.
O que acontece que ao digitar fica apresendo letrinha por letrinho num intervalo de 30 segundos;
Vai aparecendo lentamente o que esta digitando.

fiz um select e coloquei o mesmo no evento onchange do Memo1.

Estou usando delphi 2007 e win7.

obrigado
"Deus abençoe"
Responder

Posts

22/03/2013

Joel Rodrigues

Você está fazendo esse filtro realizando uma nova consulta ao banco a cada caractere digitado? Se for, é de se esperar a 'lentidão'. Experimente trabalhar com a propriedade Filter do dataset.
Responder

22/03/2013

Bruno Leandro

Qual forma de filtrar voce esta se referindo, mudando o where ou um parametro da query e dando close,open
usando locate, filter ?

se voce tiver usando locate muito provavelmente sera lento,
caso esta usando close/open e o campo tiver um indice correto para essa pesquisa pode nao ficar lento
talvez uma melhor solução seria utilizar o filter ou clientdataset, para nao ficar consultado o banco de dados
Responder

22/03/2013

Wilton Júnior

Joel Rodrigues se souber outra forma para realizar uma pesquisa me fala pois estou horas pesquisando na net eu não acho nada.
O que precisa ser feito é um filtro de informação no momento que o usuário tiver digitando.

Bruno Leando estou fazendo o seguinte:

with MIC010 do
begin
close;
sql.clear;
sql.add('select numjan, datcad, soluca from mic010 where datcad is not null');
if Edit4.text <> '' then
sql.add('and numjan like ' + QuotedStr('%' + Edit4.text + '%'));
if Memo1.text <> '' then
sql.add('and solici like ' + QuotedStr('%' + Memo1.text + '%'));
Open;
end;

Eu nem lembrei da existencia do código locate para te falar a verdade de tão acostumado a fazer esse tipo de codigo de pesquisa.

obrigado a todos
Responder

22/03/2013

Bruno Leandro

da uma testada usando filter conforme exemplo abaixo

var
Filtro: string;
begin
with MIC010 do
begin
Filtro := '';
if (Edit4.text <> '') then
Filtro := 'and numjan like ' + QuotedStr('%' + Edit4.text + '%');

if (Memo1.text <> '') then
Filtro := 'and solici like ' + QuotedStr('%' + Memo1.text + '%');

Filtered := False;
Filter := Filtro;
Filtered := True;
end;
end;
Responder

22/03/2013

Bruno Leandro

pequena correção para nao perder o filtro

var
Filtro: string;
begin
with MIC010 do
begin
Filtro := '';
if (Edit4.text <> '') then
Filtro := Filtro +' and numjan like ' + QuotedStr('%' + Edit4.text + '%');

if (Memo1.text <> '') then
Filtro := Filtro +' and solici like ' + QuotedStr('%' + Memo1.text + '%');

Filtered := False;
Filter := Filtro;
Filtered := True;
end;
end;
Responder

22/03/2013

Wilton Júnior

Nada Bruno Leandro, obrigado pela sua ajuda.
Responder