Fazer uma Busca Inteligente - preciso da ajuda de vocês.
Tenho um executavel de visualização de notas, onde o aluno só pode ver e não pode editar.
Os nomes são mostrados em um dbgrid em ordem alfabetica, a busca que quero fazer é a seguinte:
O aluno deverá digitar a 1º letra do seu nome, no dbgrid mesmo sem ter que abrir qualquer tela, e o sistema deve iniciar a procura o seja.
o aluno digita ´P´
e o sistema mostra os nomes iniciados com a letra ´P´
então ela digita ´a´
e o sistema mostra os nomes Iniciados com ´P´ e na seguencia ´a´
e assim por diante.
Fico muito grato a agueles que responderem ao topico.
Os nomes são mostrados em um dbgrid em ordem alfabetica, a busca que quero fazer é a seguinte:
O aluno deverá digitar a 1º letra do seu nome, no dbgrid mesmo sem ter que abrir qualquer tela, e o sistema deve iniciar a procura o seja.
o aluno digita ´P´
e o sistema mostra os nomes iniciados com a letra ´P´
então ela digita ´a´
e o sistema mostra os nomes Iniciados com ´P´ e na seguencia ´a´
e assim por diante.
Fico muito grato a agueles que responderem ao topico.
Machado
Curtidas 0
Respostas
Pardal2003
15/08/2003
Olá amigo,
Eu fiz uma vez algo parecido da seguinte maneira:
Crie um novo form (frmProcura) com um campo Edit para a consulta (vc pode adicionar também um campo combo com os campos a serem pesquisados). No form principal (do DBGrid) crie uma variável global (FindWord: String) e passe a propriedade KeyPreview para True. No evento OnKeyPress deste form adicione algo assim:
If Key in [´a´..´z´, ´A´..´Z´, ´0´..´9´] Then
Begin
FindWord:=Key;
frmProcura.ShowModal;
end;
No formProcura capture a variável global quando o mesmo for aberto (OnShow) e adicione no campo Edit (edtFind), assim:
edtFind.SetFocus;
If Trim(FindWord)<>´´ Then
Begin
edtFind.Text:=FindWord;
Keybd_Event(VK_END, 0, 0, 0);
edtFind.OnChange(Sender);
end;
No evento OnChange do campo Edit coloque assim:
If edtFind.Text<>´´ Then dmDados.qryClientes.Locate(FindItem, edtFind.Text, [loPartialKey, loCaseInsensitive]);
Espero ter ajudado,
[]´s
Pardal2003
Eu fiz uma vez algo parecido da seguinte maneira:
Crie um novo form (frmProcura) com um campo Edit para a consulta (vc pode adicionar também um campo combo com os campos a serem pesquisados). No form principal (do DBGrid) crie uma variável global (FindWord: String) e passe a propriedade KeyPreview para True. No evento OnKeyPress deste form adicione algo assim:
If Key in [´a´..´z´, ´A´..´Z´, ´0´..´9´] Then
Begin
FindWord:=Key;
frmProcura.ShowModal;
end;
No formProcura capture a variável global quando o mesmo for aberto (OnShow) e adicione no campo Edit (edtFind), assim:
edtFind.SetFocus;
If Trim(FindWord)<>´´ Then
Begin
edtFind.Text:=FindWord;
Keybd_Event(VK_END, 0, 0, 0);
edtFind.OnChange(Sender);
end;
No evento OnChange do campo Edit coloque assim:
If edtFind.Text<>´´ Then dmDados.qryClientes.Locate(FindItem, edtFind.Text, [loPartialKey, loCaseInsensitive]);
Espero ter ajudado,
[]´s
Pardal2003
GOSTEI 0
Machado
15/08/2003
Resolvi o problema, fiz desta maneira:
coloquei um edit sobre o dbgrid e
no envento onchange coloquei a sequinte linha
tb_alunos.FindNearest([edit1.text]);
e funciona perfeitamente.
coloquei um edit sobre o dbgrid e
no envento onchange coloquei a sequinte linha
tb_alunos.FindNearest([edit1.text]);
e funciona perfeitamente.
GOSTEI 0