Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

maquinavirtual

[Resolvido] mensagem apos pesquisa ibquery

Recommended Posts

Estou usando delphi 7, firebird 2.0 componentes da paleta interbase.

Tenho uma pesquisa implementada com componente ibquery porem quando realizo a pesquisa e ela nao encontra nada, isto e, nenhum registro gostaria que mostrasse uma mensagem do tipo:

 

'A pesquisa nao encontrou registros.'

 

Criei o codigo abaixo:

 

procedure TFormPesquisaCadastro.BTNpesquisacadastroClick(Sender: TObject);
BEGIN
  begin
    if editPesquisaCadastro.Text = '' then
     begin
       messagebeep(16);
       messagebox(FormPesquisaCadastro.Handle,'Digite no campo!'#13'O campo deve ser preenchido.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION);
       editPesquisaCadastro.SetFocus;
     end
    else
     if RadioGroupPesquisaCadastro.ItemIndex = 0 then
      begin
        if (DTM.IBQRYpesqNomeCompleto.RecordCount >=1) then
         begin //pesquisa por nome completo
           DTM.IBQRYpesqNomeCompleto.Close;
           DTM.IBQRYpesqNomeCompleto.ParamByName('PRMnomecompleto').AsString:=''+ EditPesquisaCadastro.Text +'%';
           DTM.IBQRYpesqNomeCompleto.Open;
           editPesquisaCadastro.Clear;
         end
        else
         messagebeep(16);
         messagebox(FormPesquisaCadastro.Handle,'A pesquisa nao'#13'encontrou resultados.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION);
      end;
  end;
END;

Porem este codigo acima mostra a mensagem que nao foi encontrado registros e tambem nao mostra os resultados da pesquisa toda vez que aperto no botao de pesquisa, independentemente da letra digitada.

 

Mas, se o codigo estiver assim:

Observacao: // sao comentarios.

 

procedure TFormPesquisaCadastro.BTNpesquisacadastroClick(Sender: TObject);
BEGIN
  begin
    if editPesquisaCadastro.Text = '' then
     begin
       messagebeep(16);
       messagebox(FormPesquisaCadastro.Handle,'Digite no campo!'#13'O campo deve ser preenchido.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION);
       editPesquisaCadastro.SetFocus;
     end
    else
     if RadioGroupPesquisaCadastro.ItemIndex = 0 then
      begin
        //if (DTM.IBQRYpesqNomeCompleto.RecordCount >=1) then
         //begin //pesquisa por nome completo
           DTM.IBQRYpesqNomeCompleto.Close;
           DTM.IBQRYpesqNomeCompleto.ParamByName('PRMnomecompleto').AsString:=''+ EditPesquisaCadastro.Text +'%';
           DTM.IBQRYpesqNomeCompleto.Open;
           editPesquisaCadastro.Clear;
         //end
        //else
        //messagebeep(16);
        //messagebox(FormPesquisaCadastro.Handle,'A pesquisa nao'#13'encontrou resultados.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION);
      end;
  end;
END;

Este codigo acima realiza a pesquisa mostra os registros corretamente porem quando nao acha registros o dbgrid fica vazio. O que eu estou fazendo de errado no primeiro codigo?

Aguardo resposta. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho. Me parece correto. Você tentou debugar e ver qual o valor que o RecordCount está passando? Acho que esse método tá 'quebrado'.

 

Tente o isEmpty ("está vazio?")

 

if not(DTM.IBQRYpesqNomeCompleto.isEmpty) then

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que acontece é o seguinte: a propriedade RecordCount só terá um valor após você dar o open na sua Query de pesquisa.... então, o seu if DTM.IBQRYpesqNomeCompleto.RecordCount >= 1 faz com que a pesquisa jamais seja executada, pois até aquele momento o RecordCount do seu IBQRYPesqNomeCompleto está zerada (default).

 

Quando você quer testar este tipo de situação, faça o seguinte: execute primeiro a pesquisa e após o open teste o RecordCount... sugiro alterar o seu código para este.

 

procedure TFormPesquisaCadastro.BTNpesquisacadastroClick(Sender: TObject); 
BEGIN 
   if editPesquisaCadastro.Text = '' then 
   begin 
  	messagebeep(16); 
  	messagebox(FormPesquisaCadastro.Handle,'Digite no campo!'#13'O campo deve ser preenchido.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION); 
  	editPesquisaCadastro.SetFocus; 
   exit; //força a sair da procedure atual
   end; 
   if RadioGroupPesquisaCadastro.ItemIndex = 0 then 
   begin 
	DTM.IBQRYpesqNomeCompleto.Close; 
   DTM.IBQRYpesqNomeCompleto.ParamByName('PRMnomecompleto').AsString:=''+ EditPesquisaCadastro.Text +'%'; 
   DTM.IBQRYpesqNomeCompleto.Open; 
   editPesquisaCadastro.Clear; 
   if DTM.IBQRYpesqNomeCompleto.RecordCount = 0 //Ou use o IsEmpty como sugerido anteriormente
   begin
     	messagebeep(16); 
     	messagebox(FormPesquisaCadastro.Handle,'A pesquisa nao'#13'encontrou resultados.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION); 
  	end; 
   end; 
END;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que acontece é o seguinte: a propriedade RecordCount só terá um valor após você dar o open na sua Query de pesquisa.... então, o seu if DTM.IBQRYpesqNomeCompleto.RecordCount >= 1 faz com que a pesquisa jamais seja executada, pois até aquele momento o RecordCount do seu IBQRYPesqNomeCompleto está zerada (default).

 

Quando você quer testar este tipo de situação, faça o seguinte: execute primeiro a pesquisa e após o open teste o RecordCount... sugiro alterar o seu código para este.

 

procedure TFormPesquisaCadastro.BTNpesquisacadastroClick(Sender: TObject); 
BEGIN 
   if editPesquisaCadastro.Text = '' then 
   begin 
  	messagebeep(16); 
  	messagebox(FormPesquisaCadastro.Handle,'Digite no campo!'#13'O campo deve ser preenchido.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION); 
  	editPesquisaCadastro.SetFocus; 
   exit; //força a sair da procedure atual
   end; 
   if RadioGroupPesquisaCadastro.ItemIndex = 0 then 
   begin 
	DTM.IBQRYpesqNomeCompleto.Close; 
   DTM.IBQRYpesqNomeCompleto.ParamByName('PRMnomecompleto').AsString:=''+ EditPesquisaCadastro.Text +'%'; 
   DTM.IBQRYpesqNomeCompleto.Open; 
   editPesquisaCadastro.Clear; 
   if DTM.IBQRYpesqNomeCompleto.RecordCount = 0 //Ou use o IsEmpty como sugerido anteriormente
   begin
     	messagebeep(16); 
     	messagebox(FormPesquisaCadastro.Handle,'A pesquisa nao'#13'encontrou resultados.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION); 
  	end; 
   end; 
END;

[]'s

 

Amigo muito obrigado, com a sua sugestao de codigo consegui ajeitar o codigo

e a gora ele esta funcionando. Veja como o codigo ficou:

 

procedure TFormPesquisaCadastro.BTNpesquisacadastroClick(Sender: TObject);
BEGIN
  begin
    if editPesquisaCadastro.Text = '' then
     begin
       messagebeep(16);
       messagebox(FormPesquisaCadastro.Handle,'Digite no campo!'#13'O campo deve ser preenchido.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION);
       editPesquisaCadastro.SetFocus;
       Abort;
     end;
     if RadioGroupPesquisaCadastro.ItemIndex = 0 then
      begin
        DTM.IBQRYpesqNomeCompleto.Close;
        DTM.IBQRYpesqNomeCompleto.ParamByName('PRMnomecompleto').AsString:=''+ EditPesquisaCadastro.Text +'%';
        DTM.IBQRYpesqNomeCompleto.Open;
        editPesquisaCadastro.Clear;
       if (DTM.IBQRYpesqNomeCompleto.RecordCount >=1) then
      else
       begin
         messagebeep(16);
         messagebox(FormPesquisaCadastro.Handle,'A pesquisa nao'#13'encontrou resultados.','AgenTel - Pesquisar Cadastro',mb_Ok+MB_ICONQUESTION);
       end;
      end;
  end;
END;

Muito obrigado. Resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.