Não é a linguagem de programação que define o programador, mas sim sua lógica

Consultando CEP utilizando componente ACBrCEP


Vamos fazer uma aplicação simples para consulta de CEP de uma maneira bem simples sem utilizar banco de dados dos correis ultrapassado ou como já vi por ai deixar o banco de dados sobre carregado com todas cidades e bairros cadastrados.
Vamos utilizar o componente AcBrCEP, com esse componente podemos consumir um WebServices disponível na Internet para consultar endereços completos.

Vamos utilizar:
  • 7 - TEdit "para exibirmos o resultado da consulta"
  • 6 - TLabel "para identificar os campos"
  • 1 - TACBrCEP
    Existem várias opções de WebServices de pesquisa para CEP eu normalmente utilizo wsRepublicaVirtual onde automaticamente será preenchida a propriedade URL com o respectivo endereço.
    Agora para fazer a consulta no componente que acabamos de configurar vamos colocar no OnExit do campo do dbedCEP (O TEdit que e preenchido o CEP ) o seguinte código;

    procedure TFCEP.dbedCEPExit(Sender: TObject); begin if Trim(dbedCEP.Text) <> EmptyStr then ACBrCEP.BuscarPorCEP(dbedCEP.Text); end;

    Com isto temos que colocar um código que ira jogar as informações que o TAcBrCEP retorna para nossos TEdit, ou seja quando o WebService retornar o respectivo endereço teremos que capturar esse retorno no evento OnBuscaEfetuada, esse evento é disparado após a resposta do WebService.


    Vamos pegar o retorno do WebService e jogar para nossos TEdit:
    procedure TFCEP.ACBrCEPBuscaEfetuada(Sender: TObject); var li : integer; begin if Trim(dbedCEP.Text) <> EmptyStr then begin for li := 0 to ACBrCEP.Enderecos.Count - 1 do begin dbedbairro.Text := ACBrCEP.Enderecos[li].Bairro; dbedCidade.Text := ACBrCEP.Enderecos[li].Municipio; edUF.Text := ACBrCEP.Enderecos[li].UF; dbedTipo.Text := ACBrCEP.Enderecos[li].Tipo_Logradouro; dbedt_endereco.Text := ACBrCEP.Enderecos[li].Logradouro; dbedt_referencia.Text := ACBrCEP.Enderecos[li].Complemento; end; end; end;

    O resultado é o seguinte

    18 comentários:

    1. Meu muito obrigado, nunca pensei que fosse fácil assim resgatar as informações de Cep. É, tem que conhecer os componentes bem a fundo só assim para se tornar fácil. Obrigado mesmo.

      ResponderExcluir
    2. Ha varias formas de fazer a consulta de CEP alguns programadores mantem um banco de dados com todos os CEPs cadastrados e fazem a pesquisa outros consulto direto do site mas esse com o componente do ACBr acho que é um dos melhores modos de fazer essa consulta e retornar todos os campo corretos.

      ResponderExcluir
      Respostas
      1. Certo, tenho uma Base aqui de Cep, mas é antiga. Pretendo consultar no Banco e caso não encontre o Cep, faço a Busca no Site e aí gravo a informação no Banco.

        Excluir
    3. Opa olha eu denovo kkk.
      Seguindo o exemplo, coloquei um botão para fechar o form, e ai clicar nele dá a mensagem de que o Cep deve ser informado.
      Coloquei ao final do código: ACBrCEP.Free para ver se era isso, mesmo assim continua com a mensagem. Teria alguma dica de como resolver isso? Mais uma vez, meu muito obrigado.

      ResponderExcluir
      Respostas
      1. Será que essa mensagem não esta aparecendo ao sair do campo do CEP? Ao sair da tela não teria o porque fazer a validação se existe o CEP.

        Excluir
    4. Estou fazendo desta forma:

      procedure TForm1.ACBrCEPBuscaEfetuada(Sender: TObject);
      var I: Integer;
      begin
      try
      for I := 0 to ACBrCEP.Enderecos.Count -1 do
      begin
      EdtCep.Text := ACBrCEP.Enderecos[I].CEP;
      EdtTipo.Text := ACBrCEP.Enderecos[I].Tipo_Logradouro;
      EdtLogradouro.Text := ACBrCEP.Enderecos[I].Logradouro;
      EdtBairro.Text := ACBrCEP.Enderecos[I].Bairro;
      EdtCidade.Text := ACBrCEP.Enderecos[I].Municipio;
      EdtUF.Text := ACBrCEP.Enderecos[I].UF;
      EdtNumero.SetFocus;
      end;
      finally
      ACBrCEP.Free;
      end;
      end;

      ResponderExcluir
      Respostas
      1. Boa Noite! O componente "ACBrCEP" esta sendo criado em tempo de execução? Se não tiver tem que ser removido a linha "ACBrCEP.Free" pois senão vai dar erro na segunda tentativa.

        Excluir
    5. Olá bom dia eu de novo estou usando Delphi XE5 e nos meus testes aqui, a consulta funciona perfeitamente.
      Problemas:
      1 - Ao abrir o form e em seguida clicar no botão sair ou tentar mudar de campo ele me dá a mensagem: Cep Deve ser informado. Se clicar no X do form ele fecha normalmente.
      2 - Ao efetuar uma consulta de Cep e logo em seguida tentar consultar outro Cep me dá Access Violation.

      Teria uma dica de como solucionar estes problemas? Desde já obrigado pela atenção.

      ResponderExcluir
      Respostas
      1. Boa Noite! Acredito que o problema esta na linha "ACBrCEP.Free" pois esta finalizando um componente que não esta sendo recriado...

        Excluir
    6. Peço desculpas pela ignorância, eu tinha programado no evendo onexit do componente, Comentei a linha e funcionou, não dá o primeiro erro. Mas o erro 2 ainda persiste, se consultar um cep e logo em seguinda consultar outro sem ter saido do form ele dá access violation.

      ResponderExcluir
      Respostas
      1. O access violation acontece pois você esta dando um free no componente e depois tenta utilizar novamente;
        O free poderia ser utilizada no OnDestroy do formulário (Se bem que não é necessário eliminar o componente pois o formulário que faz isso)

        Excluir
    7. Bom dia, como faço para instalar o componente ACBrCEP, baixei o compomente mais da erro ao abrir CEPTeste1
      erro: Class TACBrCEP not found e TACBrIBGE

      ResponderExcluir
      Respostas
      1. A instalação do ACBrCEP é bem simples esta nesse link
        http://anaprogramadorajunior.blogspot.com.br/2015/08/componente-acbrcep.html

        Excluir
    8. Ficou perfeito amigo que sua luz brilhe cada vez mais

      ResponderExcluir
    9. Boa noite faltando o componente RzDBCmbo para instalar

      ResponderExcluir
      Respostas
      1. Boa tarde! Pode remover das uses, esse componente não esta sendo usado nessa aplicação

        Excluir