Fórum AutoCompletar - Pesquisa #195527

17/11/2003

0

Olá...

eh o seguinte:

:arrow: Como faço para autocomplentar o q o usuário começar a digitar em um EDIT?

Ex.:
O usuário vai cadastra a nota de um aluno, ja cadastrado na tabela CADASTRO DE ALUNOS, qdo ele digitar a letra ´E´ dai no EDIT já aparece
Eduardo Almeida...

Abraços!


Educdc

Educdc

Responder

Posts

17/11/2003

Rafael_gamba

Existem duas maneiras de se fazer isso. Vou te ensinar a mais fácil.
Use os seguintes componentes :

1 edit
1 DBText (que vai mostrar o resultado da busca. O campo do dbtext deve ser o mesmo que vc deseja buscar)
1 Table (que vai representar a tabela de onde vc quer buscar a informação)
1 DataSource

No evento Onchange do edit1 escreva o seguinte :

Table1.Locate(´Campo desejado´,Edit1.Text,[LoPartialKey]);

Você também poderia usar o seguinte :

Table1.Findnearest([Edit1.Text]);

Obs: para usar o findnearest, vc precisará criar um índice secundário para o campo da busca e na propriedade IndexName do table1 vc selecionaria este índice.

Obs2: O Findnearest não diferencia maiúsculas e minúsculas. Já o Locate, diferencia.

Importante:
Para ambos os casos é imprescindível que na cláusula Uses tenha as seguintes bibliotecas :

Db
DbTables

Um abraço!!!


Responder

Gostei + 0

17/11/2003

Educdc

:? Está confuso...

Não existe uma função pra isso?
Quero fazer como o COMBO do Internet Explorer!


Responder

Gostei + 0

17/11/2003

Educdc

Axei este código aki no Forum está funcionando corretamente! Tenho q mudar algo pra usar em um DBCOMBOBOX ??
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(´Select NomFant From tbLancNF´);
Query1.open;

Query1.first;
while not Query1.EOF do
begin
ComboBox1.Items.Add(VarToStr(Query1.Fields[0].value));
Query1.Next;
end;
end;


Responder

Gostei + 0

17/11/2003

Rafael_gamba

Cara.. não há nada de complicado nisso.
Te mostrei 2 funções diferentes que fazem o que vc quer.
O FindNearest e o Locate.
Essa query que vc me mostrou não tem absolutamente nada a ver com o que vc quer. Ela simplesmente seleciona todos os registros de uma tabela e joga em um ComboBox.
Se é realmente isso que vc quer, use um DBLookupComboBox.
Através das propriedades ListSource (tabela a listar), ListField(campo a listar) e KeyField (Campo que a outra tabela vai receber), você vai listar os campos de uma outra tabela para através das ppropriedades Datasource(tabela que vai receber a informação), DataField(Campo que vai receber o que estiver em KeyField).

Resumo :
O DBLookupComboBox lista campos de 1 tabela para que vc possa jogar em outra.

Se for isso. É moleza!!!
Ps: Se quiser 1 exemplo do findnearest ou do locate, envie um e-mail para rafael@superbolao.com e lhe mandarei um exemplo autoexplicativo que passei para meus alunos.

Um abraço!!


Responder

Gostei + 0

17/11/2003

Cps.art

Olá amigo Educdc.
Em [b:f83aa8108c]Aplicativos[/b:f83aa8108c], aqui no ClubeDelphi tem uma rotina para isso.
Pode até ser muito primária ou básica para seu uso, mas serve pra dar uma idéia.
Abraços.


Responder

Gostei + 0

17/11/2003

Denis

Só um pequeno comentário.

Para fazer os procedimentos acima, vc. terá que ter um micro bem rápido e uma rede boa. Imagine que a cada letra que vc. digita, ele tem que fazer uma nova requisição no banco de dados. Isto fica legal para uma tabelinha pequena(1000 registros).
Estou dizendo isso porque já fiz isso para uma empresa, e vc sabe sempre os computadores de empresa são uma mer... Resumindo... tive que tirar o código.
Mas é apenas um alerta....


Responder

Gostei + 0

18/11/2003

Rafael_gamba

Caro Dennis,
pela mensagem acima, vejo que vc, realmente, não entende muito de programação. Vou lhe ajudar :

Quando se usa o findnearest por exemplo e se define o índice (digamos que o índice seja o nome do produto).Quando se define um índice para uma tabela, ela automaticamente fica ordenada pelo índice. Neste caso, já que ela vai estar ordenada, a cada letra digitada ela se movimentará para o registro seguinte. Isso é muito, muito rápido. E não importa se isso se trata de uma ´tabelinha´ com 1000 registros ou 100.000. Te garanto que a cada caractere digitado, a busca leva um tempo muito, muito pequeno. Mais rápido que um piscar de olhos. Faça um teste e saberá. Estou enviando um arquivo exemplo para o autor deste tópico. Se quiser, mando pra vc também. Portanto, Dennis, se vc não tem prática suficiente em Delphi para ajudar o nosso amigo, ao menos não atrapalhe enviando mensagens sobre coisas que não sabe. Foi só um toque pra vc não atrapalhar nosso amigo.

Dúvidas : rafael@superbolao.com

Um abraço!!!


Responder

Gostei + 0

18/11/2003

Einstein

CARO Rafael_Gamba, VC ACHA QUE O DENIS N´AO ENTENDE NADA DE PROGRAMACAO. AH, MAS ELE ESTA CERTO. VC ACHA PQ CONHECE A FUNCINABILIDADE DO FINDNEAREST E DO LOCATE SABE TUDO. NO CURSINHO QUE VC FEZ NAO TE DICERAM QUE OS INDICES SECUNDARIOS ATRAPALHAM O DESEMPENHO DO PROGRAMA. LA NO SEU CURSINHO ELES PODIAM TER ENSIANDO SQL PRA VC.
EM UMA TABELA COM 100.000 OU 1000 REGISTROS LISTADOS EM DBGRID, VC SABE O QUE E ISSO(interrogacao). CARA OS REGISTROS LISTADOS EM UM DBGRID SAO DESENHADOS NO FORM DE ACORCO COM A LARGURA E A ALTURA DO DBGRID. ENTAO TEM 50 REGISTROS, AI VC DIGITA A LETRA V. POCHA DAQUI QUE ELE REORGANIZE O INDICE E LISTE OS QUE COMEÇAM COM V. VAI DEMORAR UM POQUINHO.
sgue um conselho pra vc: procure ser mais humilde, ser arrogante nao leva a nada. leia a nota de falecimento do companheiro 4olho. o cara te 51 e anos de idade e dizia que nao conhecia nada de informatica.


Responder

Gostei + 0

18/11/2003

Rafael_gamba

Caro Einstein,
não sou o sabe tudo. Do contrário, não estaria aqui trocando informações. Acontece que estou falando de algo que já testei, inclusive com 100000 registros. Você não precisa acreditar em mim. Basta fazer um teste. Aliás, quem está falando em DBGrid aqui???? Eu uso apenas um edit e um dbtext. Se eu fosse usar um dbgrid, pra que eu usaria o locate ou o findnearest????Quanto aos índices, se vc define um índice a tabela se ordena por ele. Portanto, não é preciso percorrer toda tabela a cada busca. Leva menos que um piscar de olhos. Isso é um fato. E contra fatos não há argumntos!!! Faça o teste e me diga.Qto ao Dennis, ele se referiu a minha dica de forma pejorativa. Dizendo que só dá certo com uma ´tabelinha´ de 1000 registros e sei que isso não é verdade por isso fiquei ofendido. Não se deve falar sobre o que nao se sabe. Quanto a vc, faça os testes antes, para depois agredir.

Um abraço!!


Responder

Gostei + 0

18/11/2003

Rafael_gamba

Para o Einstein,

se quiser, tenho um exemplo aqui com 90.000 registros envie um e-mail para rafael@superbolao que eu te envio e aí verá que estou certo.
Só pra constar, no ´cursinho´ eu não era aluno, mas sim professor. Mas isso não me faz melhor do que ninguém. Ainda tenho muito a aprender. Tenho experiência com o locate e o findnearest. Mas ainda tenho muito que aprender sobre outras coisas.

Um abraço!!!
Ps: Pense um pouco antes de agredir..


Responder

Gostei + 0

18/11/2003

Denis

Oi gente !
Me desculpa se causei confusão. A intensão nunca foi essa. Quanto ao termo que usei ´tabelinha´ foi apenas uma maneira de expressar. Não queria em hipótese alguma me referir a vc. com falta de respeito. Quanto a saber ou não programar, isto cada um faz uma auto análise e julgue por si próprio.
O que estamos fazendo no fórum é trocar experiências e sanar as nossas dúvidas. E tentando sempre ajudar da melhor maneira possivel.
Mas voltando ao assunto da pesquisa é o seguinte. Quando se faz a pesquisa em um arquivo indexado como vc. disse, realmente é rápido. Mesmo para muitos registros como vc. citou. Eu estou me referindo no caso do Sql, pois a cada solicitação seria feita uma nova pesquisa, ou então fazer uma query ou um clientdataset e usar locate. Neste caso a pesquisa ficaria um pouco mais lenta. Como hoje em dia quase todas as empresas estão migrando para bancos de dados sql (existem muitos bons e grátis como no caso do mysql,firebird,interbase,etc) , acho que quiz ajudar pois seria um código sem problemas para a migração.
Mas não sei os recursos que ele possui. No meu caso os micros da empresa que me referi, não eram lá estas coisas, e em outras que trabalhei tb não eram.
Então estava apenas dando uma dica, e de maneira alguma dizendo que o que vc. estava falando era errado ou não funcionava. Depende muito da estrutura da empresa.

De qualquer forma desculpa mais uma vez.


Responder

Gostei + 0

18/11/2003

Cps.art

Calma rapazes, não briguem.
Aposto que a intenção de todos é colaborar com o Educcdc que abriu o tópico.
Até eu que não sei praticamente nada de Delphi dei uma dica sobre um aplicativo que vi aqui no Clube.
Pelo jeito acho que não vai ajudar o colega Educcdc, mas a intenção foi das melhores, [b:1eb4646cff]ajudar[/b:1eb4646cff].
Acho que deviamos nos classificar aqui no Clube como [b:1eb4646cff]colaboradores[/b:1eb4646cff], pessoas que querem ajudar e serem ajudadas, ninguém sabe tudo.
Abraços.


Responder

Gostei + 0

18/11/2003

Rafael_gamba

Caro Dennis,

se sua intenção não foi menosprezar, me desculpe pela minha ´grosseria´. Não sou nenhum bam bam bam em delphi, mas sei algumas coisas, assim como vc. Em se tratando do locate, realmente fica lento. Talvez, se antes de usar o locate, ordenarmos a query pelo campo que queiramos buscar, funcione como se estivesse indexada. Mas isso eu ainda não testei. Só sei que no caso do findnearest, funciona. Quanto a sql vc tem razão fica mais difícil. Também estou aqui para colaborar e aprender. Me desculpe se fui grosseiro. Foi um mal entendido. Vou fazer um teste organizando a query antes de usar o locate e digo. O findnearest eu já testei e funciona bem. Mais uma vez peço desculpas a todos e espero que minha ´dica´ possa ajudar o educc.

Um abraço!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar