Como fazer uma pesquisa quot;tipo dbgridquot; prática e ef

02/07/2004

0

Olá amigos, tenho tentado encontrar uma solução com dbgrid a fim de fazer uma pesquisa a um um banco da forma mais simples possivel.

Exemplificando:
O usuario está no cadastro de clientes quando chega ao código da cidade, teclando zero e enter, abre (aqui está o dilema) a lista de cidades e a medida que o usuário digita a cidade desejada o sistema vai filtrando, podendo também navegar com as setas direcionais, quando encontrar a cidade desejada, tecla enter (para usar somente o teclado) e então retorna ao cadastro de clientes com o código da cidade selecionada.

Este é um modelo usado nos sistemas d.o.s., que alia praticidade e eficiência, pois a produtividade em um sistema comercial é bem maior utilizando-se apenas o teclado.

Não quero usar um combo, pois eu quero também habilitar as teclas de função para consultar a lista de produtos, por exemplo, sem precisar estar no campo produto.

Consegui sem problemas usando edit e dbgrid, só que o foco permanece no edit e querendo navegar teria que mudar o foco, mas se o usuário quizesse digitar outro nome, teria que retornar ao edit.

Espero que possam me ajudar ou exemplificar uma outra forma, que prestigia-se a velocidade na execução das tarefas, pois temos usuário, digo de balcão de loja, que não é amigo do mouse.

Obrigado

Mario


Aldus

Aldus

Responder

Posts

02/07/2004

Aldus

Alguém poderia me auxiliar?

Mario


Responder

02/07/2004

D4n13l

olah Aldus!

Eu tive esse mesmo dilema com um cliente que queria a praticidade das aplicações em DOS, só que em Windows.
Bom, o que eu fiz é criar uma tela que pressionando <F2> eu alterno de opção de consulta por ex: nome,cidade,estado....
O problema que vc está enfrentando com o dbgrid eu resolvi assim:
1 - o foco sempre está na grid;
2 - qdo algo é digitado eu envio o caracter para um edit;
3 - faço a consulta no dataset que está relacionado ao dbgrid (dados);
4 - volto o foco para o dbgrid;

A única coisa é que o edit não fica com o cursor piscando (eh claro)...

[]´s
D4N13L


Responder

02/07/2004

Aldus

Olá, essa seria minha alternativa ideal, tenho todas as rotinas prontas.

Mas qual evento usar para capturar a tecla pressionada, já que o dbgrid não possui OnClick?

Se você tiver um fragmento do código agradeceria.

Mario


Responder

02/07/2004

D4n13l

Olá, essa seria minha alternativa ideal, tenho todas as rotinas prontas. Mas qual evento usar para capturar a tecla pressionada, já que o dbgrid não possui OnClick? Se você tiver um fragmento do código agradeceria. Mario


vai lah :

no evento onkeypress do dbgrid vc atribui o que a pessoa está digitando no edit:
...
edit1.text := edit1.text + key;
...

depois vc vai no evento onkeypress do edit e coloca isso:
...
DBGrid1.SetFocus;
DBGrid1.SelectedIndex := 0;
...

a instrucao selectedindex quer dizer para colocar o foco na primeira coluna do dbgrid (coluna 0).....

enjoy !

[]´s
D4N13L


Responder

02/07/2004

Thiago Vidal

Eu sugeriria para fazer o contrário, manter o foco no edit e ao serem pressionadas as setas, avançar ou retroceder os registros no Grid

Segue um Exemplo:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Key in [VK_UP, VK_DOWN]) then
  begin
  if (Key = VK_UP) then
    DBGrid1.DataSource.DataSet.Prior
    else
    DBGrid1.DataSource.DataSet.Next;

    Edit1.SetFocus;
  end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.Locate(´CIDADE´, Edit1.Text, [loCaseInsensitive]);
end;



Assim, cada vez que o Edit for alterado (OnChange) sera efetuada a busca nos registros do grid, se forem pressionadas as teclas para cima ou para baixo, o cursor será deslocado no DataSet do Grid.


Responder

02/07/2004

Aldus

Como intercedo a tecla pressionada:

Exemplo:
if key = ????????
edit1.text := edit1.text + key;


Mario


Responder

02/07/2004

Aldus

Olá Thiago, realmente funciona a movimentação, só que não há foco no grid e não dá pra saber qual registro está selecionado no momento.

Não é possível ter duplo foco?

Outra dúvida, eu uso uma função no form principal pra trocar o enter por tab em toda a aplicação, e com ela ativa não tenho controle sobre o enter e as setas, como posso desativá-la momentaneamente.

Está assim declarada:

procedure TfPrincipal.FormCreate(Sender: TObject);
begin
   Application.OnMessage := ProcessaMsg;
end;



Responder

05/07/2004

Aldus

Ainda não consegui fazer a consulta do jeito que queria pois não há eventos que capturem o que foi pressionado.

Alguém já fez uma consulta assim ou tem outra dica?

Atenciosamente

Mario


Responder

07/07/2004

Aldus

Alguém já fez uma consulta assim ou tem outra dica?

Mario


Responder

07/07/2004

Aldus

Alguém já fez uma consulta assim ou tem outra dica?

Mario


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar