etspaz Postado Janeiro 22, 2008 Denunciar Share Postado Janeiro 22, 2008 bom dia a todos.bem eu tenho um dbgrid e um edit para filtrar, inicialmente eu tinha um botão e no onclick fazia um select assim: 'select * from tabtal where upper(nome) like upper(' + #39 + '%' + edit_NomeCliente.Text + '%' + #39 + ') order by nome';funciona, mas o que eu quero é não ter que fazer outra pesquisa no banco diminuindo a performance, um colega disse pra eu usar locate.CDS_CONTATO.Locate('NOME',Edit_filtranome_contato.Text,[loCaseInsensitive]);esse código aí não faz nada, pois eu quero que a medida que o usuario vai digitando as letras os nomes vão sendo filtrados no grid.vlw! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Jorge Mantini Postado Janeiro 22, 2008 Denunciar Share Postado Janeiro 22, 2008 // Meu caro esse será meu primeiro post, espero que lhe ajude. // crie esta função. function ProcuraDB(Txt: string): string; begin WITH query DO if TXT <>'' THEN begin DisableControls; First; while not Eof do begin IF (LSTRCMP(PCHAR(COPY(FieldByName('campo').AsString,1,LENGTH(TXT))),PCHAR(TXT))=0) OR (LSTRCMPI(PCHAR(COPY(FieldByName('campo').AsString,1,LENGTH(TXT))),PCHAR(TXT))=0) THEN BEGIN RESULT:=FieldByName('campo').AsString; BREAK; END; next; end; EnableControls; end; end; ========================================================================================================== // declare esta variavel publica - bPAUSA : boolean; // no evento onchange do edit, faça esta procedura procedure Edit1Change(Sender: TObject); var iB: INTEGER; begin if Edit1.Text <> '' then begin IF NOT bPAUSA AND ACTIVE THEN BEGIN IF PROCURADB(Edit1.TEXT) <> '' THEN BEGIN iB:=LENGTH(Edit1.TEXT); Edit1.TEXT:=PROCURADB(Edit1.TEXT); Edit1.SELSTART:=iB; Edit1.SELLENGTH:=LENGTH(PROCURADB(Edit1.TEXT))-iB; end; END; if NOT bPAUSA THEN Begin query.DisableControls; query.first; while not query.Eof DO begin IF query.FieldByName('campo').AsString = Edit1.TEXT THEN BREAK; query.next; end; query.EnableControls; end; end; end; Espero ter ajudado.... Um grande abraço!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 22, 2008 Denunciar Share Postado Janeiro 22, 2008 bem eu tenho um dbgrid e um edit para filtrar, inicialmente eu tinha um botão e no onclick fazia um select assim: 'select * from tabtal where upper(nome) like upper(' + #39 + '%' + edit_NomeCliente.Text + '%' + #39 + ') order by nome';funciona, mas o que eu quero é não ter que fazer outra pesquisa no banco diminuindo a performance, um colega disse pra eu usar locate.Se você só faz a consulta quando o botão é pressionado e ainda passa um sub-string como filtro, eu diria que esta talvez seja a melhor opção. Observe que você vai buscar no banco apenas os registros similares, o que com certeza retorna muito menos registros do que se você trabalhar com todas as linhas de sua tabela.CDS_CONTATO.Locate('NOME',Edit_filtranome_contato.Text,[loCaseInsensitive]);esse código aí não faz nada, pois eu quero que a medida que o usuario vai digitando as letras os nomes vão sendo filtrados no grid.para fazer algo, você terá que o colocar no evento OnChange do Edit_filtranome_contato e a sua SQL de consulta não terá o filtro como acima (ou seja, sem cláusula where).Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 etspaz Postado Janeiro 23, 2008 Autor Denunciar Share Postado Janeiro 23, 2008 (editado) eu consegui resolver, tirei o botão de pesquisa, pois quando o form é carregado já traz todos registro no grid, e no evento onchange do edit coloquei:cds_contato.Filtered := False; cds_contato.Filter := 'nome like ' + #39 + '%' + Edit_filtranome_contato.Text + '%' + #39; cds_contato.Filtered := True;assim quando o usuario vai digitando, o resultado vai sendo filtrado, como no help de alguns programas e não precisa fazer outro select só pra isso.obrigado a todos pela ajuda.abraços. Editado Janeiro 23, 2008 por Micheus Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
etspaz
bom dia a todos.
bem eu tenho um dbgrid e um edit para filtrar, inicialmente eu tinha um botão e no onclick fazia um select assim:
'select * from tabtal where upper(nome) like upper(' + #39 + '%' + edit_NomeCliente.Text + '%' + #39 + ') order by nome';
funciona, mas o que eu quero é não ter que fazer outra pesquisa no banco diminuindo a performance, um colega disse pra eu usar locate.
CDS_CONTATO.Locate('NOME',Edit_filtranome_contato.Text,[loCaseInsensitive]);
esse código aí não faz nada, pois eu quero que a medida que o usuario vai digitando as letras os nomes vão sendo filtrados no grid.
vlw!
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.