Ja li sobre pesquisa e dbgrid mas não encontro o tópico
Olá amigos, estou querendo fazer uma consulta com dbgrid em que o foco é no dbgrid, e a medida que se digita vai se posicionando no registro desejado, li num tópico só que não encontro, em que ia digitando e o valor da digitação ia sendo armazenado em um edit oculto, e com seu conteúdo, ia sendo disparada a consulta sql.
Um outro problema que enfrento é o seguinte, inclui uma rotina no menu principal para tratamento da tecla enter em toda aplicação, só que quero num cadastro de bairros, por exemplo, assim que o usuário digitar no campo código e pressionar enter, quero consultar se o bairro já existe, só que com essa rotina, não tenho controle sobre o enter nos forms, pois ele já passa para o outro componente.
Obrigado pela atenção
Mario
Um outro problema que enfrento é o seguinte, inclui uma rotina no menu principal para tratamento da tecla enter em toda aplicação, só que quero num cadastro de bairros, por exemplo, assim que o usuário digitar no campo código e pressionar enter, quero consultar se o bairro já existe, só que com essa rotina, não tenho controle sobre o enter nos forms, pois ele já passa para o outro componente.
Obrigado pela atenção
Mario
Aldus
Curtidas 0
Respostas
Aldus
30/06/2004
Poderiam me ajudar?
GOSTEI 0
Paulo_amorim
30/06/2004
Olá
Não precisa de um edit, mas sim uma variável String (global, claro)
Você pode fazer um Locate na Query para procurar o que o usuário digitou (coloque no OnClick), assim a cada letra ele deverá filtrar mais.
Como vc fez esse tratamento?
Espero que ajude
Até+
e a medida que se digita vai se posicionando no registro desejado, li num tópico só que não encontro, em que ia digitando e o valor da digitação ia sendo armazenado em um edit oculto, e com seu conteúdo, ia sendo disparada a consulta sql.
Não precisa de um edit, mas sim uma variável String (global, claro)
Você pode fazer um Locate na Query para procurar o que o usuário digitou (coloque no OnClick), assim a cada letra ele deverá filtrar mais.
não tenho controle sobre o enter nos forms, pois ele já passa para o outro componente.
Como vc fez esse tratamento?
Espero que ajude
Até+
GOSTEI 0
Aldus
30/06/2004
Olá Paulo, como eu poderia capturar por exemplo o usuário digita:
SAO PAULP (Até aqui vou alimentando minha variável)
variavel := Variavel + LetraDigitada
E quando pressionar BACKSPACE ?
Segue abaixo o código que utilizo no form principal:
***********************
procedure TfPrincipal.ProcessaMsg(var Msg: TMsg; var Handler: Boolean);
begin
if (Msg.message = WM_KEYDOWN) then
if not (Screen.ActiveControl is TCustomMemo) and
not (Screen.ActiveControl is TButtonControl) then begin
if not (Screen.ActiveControl is TCustomControl) then begin
if (Msg.wParam = VK_Down) and
not(Screen.ActiveControl is TListBox) and
not(Screen.ActiveControl is TComboBox) then
Msg.wParam:= VK_Tab;
if (Msg.wParam = VK_UP) and
not(Screen.ActiveControl is TListBox) and
not(Screen.ActiveControl is TComboBox) then begin
Msg.wParam:= VK_CLEAR;
Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0);
end;
if (Msg.wParam = VK_Escape) and
not (Screen.ActiveForm is TfPrincipal) then
Screen.ActiveForm.Close;
end;
if (Msg.wParam = VK_Return) then
Msg.wParam:= VK_Tab;
end;
end;
procedure TfPrincipal.FormCreate(Sender: TObject);
begin
Application.OnMessage := ProcessaMsg;
end;
***********************
Obrigado pela atenção
SAO PAULP (Até aqui vou alimentando minha variável)
variavel := Variavel + LetraDigitada
E quando pressionar BACKSPACE ?
Segue abaixo o código que utilizo no form principal:
***********************
procedure TfPrincipal.ProcessaMsg(var Msg: TMsg; var Handler: Boolean);
begin
if (Msg.message = WM_KEYDOWN) then
if not (Screen.ActiveControl is TCustomMemo) and
not (Screen.ActiveControl is TButtonControl) then begin
if not (Screen.ActiveControl is TCustomControl) then begin
if (Msg.wParam = VK_Down) and
not(Screen.ActiveControl is TListBox) and
not(Screen.ActiveControl is TComboBox) then
Msg.wParam:= VK_Tab;
if (Msg.wParam = VK_UP) and
not(Screen.ActiveControl is TListBox) and
not(Screen.ActiveControl is TComboBox) then begin
Msg.wParam:= VK_CLEAR;
Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0);
end;
if (Msg.wParam = VK_Escape) and
not (Screen.ActiveForm is TfPrincipal) then
Screen.ActiveForm.Close;
end;
if (Msg.wParam = VK_Return) then
Msg.wParam:= VK_Tab;
end;
end;
procedure TfPrincipal.FormCreate(Sender: TObject);
begin
Application.OnMessage := ProcessaMsg;
end;
***********************
Obrigado pela atenção
GOSTEI 0
Rômulo Barros
30/06/2004
procedure Localizar(parClientDataSet: TClientDataSet; parCampo, parValor: String); begin If(Trim(parValor) = ´´)Then Exit; parClientDataSet.Locate(parCampo,parValor,[loCaseInsensitive,loPartialKey]); end;
Agora, basta chamar o método:
Localizar(ClientDatasetUsuarios,´CodigoUser´,edit1.Text);
:P :P
GOSTEI 0
Aldus
30/06/2004
No dbgrid vou utilizar o seguinte código, e não o método locate, até porque não tenho indice para o campo desejado na procura que é o nome do bairro, então a medida que vou digitando vai filtrando todos que iniciam por aquela descrição, em testes feitos digitando num edit funciona perfeitamente, mas eu queria que o usuário digita-se com o foco no dbgrid para assim que localizar o bairro , até mesmo com as setas, já tecla enter e carrega o cadastro:
******************
DM.SQLDataSet_Bairros.Close ;
DM.SQLDataSet_Bairros.CommandText := ´SELECT * FROM bairros WHERE nombai LIKE :NomeBairro ORDER BY nombai´;
DM.SQLDataSet_Bairros.ParamByName(´NomeBairro´).AsString := CampoProcura.Text+´¬´ ;
DM.SQLDataSet_Bairros.ExecSQL;
******************
******************
DM.SQLDataSet_Bairros.Close ;
DM.SQLDataSet_Bairros.CommandText := ´SELECT * FROM bairros WHERE nombai LIKE :NomeBairro ORDER BY nombai´;
DM.SQLDataSet_Bairros.ParamByName(´NomeBairro´).AsString := CampoProcura.Text+´¬´ ;
DM.SQLDataSet_Bairros.ExecSQL;
******************
GOSTEI 0
Paulo_amorim
30/06/2004
Olá
Declarando uma variavel Pesq: String
No OnClick tente
Espero que ajude
Até+
Declarando uma variavel Pesq: String
No OnClick tente
if Key in [0..9,a..z,A..Z] then Pesq := Pesq + Key; //E então vc realiza seu locate... if Key in [VK_DEL, VK_BACKSPACE] then Pesq := ´´; //No caso eu tolimpando, vc faz o que quiser...
Espero que ajude
Até+
GOSTEI 0
Aldus
30/06/2004
Não há evento onclick no dbgrid e no evento keypress dá erro de incompatible types: char e integer
**********
if Key in [0..9,a..z,A..Z] then
**********
Mario
**********
if Key in [0..9,a..z,A..Z] then
**********
Mario
GOSTEI 0
Aldus
30/06/2004
Poderiam me auxiliar?
GOSTEI 0
Sandra
30/06/2004
DM.SQLDataSet_Bairros.Close ;
DM.SQLDataSet_Bairros.CommandText := ´SELECT * FROM bairros WHERE nombai LIKE :NomeBairro ORDER BY nombai´;
DM.SQLDataSet_Bairros.ParamByName(´NomeBairro´).AsString := CampoProcura.Text+´¬´ ;
[b:3afb8dbfa8]DM.SQLDataSet_Bairros.ExecSQL;[/b:3afb8dbfa8]
aldus,
Somente uma correção, da maneira como eu havia respondido em um outro [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=47350&highlight=]tópico[/url], faça a alteração da última linha para:
DM.SQLDataSet_Bairros.ExecSQL;
Lembre-se:
- utilize o Open nos casos de consulta (Select);
- o ExecSQL você utiliza quando for Insert, Delete ou Update.
Não há evento onclick no dbgrid e no evento keypress dá erro de incompatible types: char e integer
**********
if Key in [0..9,a..z,A..Z] then
**********
Mario
Tentou no onEnter do DBGrid?
Teste e verifique se funciona.
GOSTEI 0
Aldus
30/06/2004
Olá Sandra, obrigado pela dica do ExecSQL, mas a procura não funciona no OnEnter pois ele não possui variavel key.
Mario
aldusinfo@terra.com.br
Mario
aldusinfo@terra.com.br
GOSTEI 0