Re: RES: [delphi-br] Usar serviço do correio para conseguir CEP através da aplic
Legal amigo! Vou atualizar o CF então pra refletir as alterações que vc fez. Grato, Ricardo. robersonfox [EMAIL PROTECTED] escreveu: Sim, manualmente, a unit está funcionando basicamente do mesmo modo, você digita um CEP o programa busca isso no serviço on-line e em seguida retorna para os componentes que trabalham com texto, mas antes, quando se digitava um CEP incompleto os campos eram preenchidos incorretamente, se você ainda não colocou minha alteração faça um teste com 32400-000, ele receberá Cidade e Unidade Federativa, porém por ocuparem um espaço menor que cidade, logradouro, e UF, o código colocava-os em ordens diferentes. Quando um CEP não for encontrado o usuário terá que informá-lo ao banco de dados manualmente. --- Em delphi-br@yahoogrupos.com.br, Ricardo César Cardoso [EMAIL PROTECTED] escreveu MAs com essa alteração que vc está fazendo vc vai completar o BD? Se um CEP não estiver lá, ele será inserido? robersonfox [EMAIL PROTECTED] escreveu: Depois de baixar o arquivo, notei que alguns CEP's não estão completamente inseridos no BD do correio, um exemplo é o 32400-000, para solucionar o problema reescrevi uma parte do código principal, vou colocar a unit por completo aqui, é só copiar e colar: unit Unit1; interface ... __ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ [As partes desta mensagem que não continham texto foram removidas]
Re: RES: [delphi-br] Usar serviço do correio para conseguir CEP através da aplic
MAs com essa alteração que vc está fazendo vc vai completar o BD? Se um CEP não estiver lá, ele será inserido? robersonfox [EMAIL PROTECTED] escreveu: Depois de baixar o arquivo, notei que alguns CEP's não estão completamente inseridos no BD do correio, um exemplo é o 32400-000, para solucionar o problema reescrevi uma parte do código principal, vou colocar a unit por completo aqui, é só copiar e colar: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, StdCtrls, Mask, ComCtrls, ExtCtrls, DB, DBClient, Grids, DBGrids; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; Label1: TLabel; edtBuscaLogradouro: TMaskEdit; btnBuscaLogradouro: TButton; EdtBuscaLogradouroCidade: TEdit; Label2: TLabel; Bevel1: TBevel; Button1: TButton; Label4: TLabel; EdtBuscaLogradouroLogradouro: TEdit; memoBuscaLogradouroSource: TMemo; Label6: TLabel; Label7: TLabel; EdtBuscaCEPCidade: TEdit; cbbBuscaCEPUF: TComboBox; Label8: TLabel; cbbBuscaCEPTipoLogradouro: TComboBox; Label9: TLabel; Label10: TLabel; EdtBuscaCEPLogradouro: TEdit; btnBuscaCEPs: TButton; Button5: TButton; Bevel2: TBevel; DBGrid1: TDBGrid; memoBuscaCEPSource: TMemo; cdsCEPs: TClientDataSet; DataSource1: TDataSource; EdtBuscaLogradouroBairro: TEdit; Label11: TLabel; cbbBuscaLogradouroUF: TComboBox; Label3: TLabel; EdtBuscaCEPNumero: TEdit; Label5: TLabel; cdsCEPsCIDADE: TStringField; cdsCEPsLOGRADOURO: TStringField; cdsCEPsBAIRRO: TStringField; cdsCEPsCEP: TStringField; cdsCEPsUF: TStringField; procedure Button5Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure btnBuscaCEPsClick(Sender: TObject); procedure btnBuscaLogradouroClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Query; {$R *.dfm} function GeraXMLQuery(Cep: String): String; begin Result := '?xml version=1.0 encoding=utf-8?'+#13#10; Result := Result + 'QueryPacket xmlns=urn:Microsoft.Search.Query'+#13#10; Result := Result + ' Query'+#13#10; Result := Result + 'Context'+#13#10; Result := Result + ' Context'+#13#10; Result := Result + 'QueryText'+Cep+'/QueryText'+#13#10; Result := Result + ' /Context'+#13#10; Result := Result + ' OfficeContext xmlns=urn:Microsoft.Search.Query.Office.Context'+#13#10; Result := Result + 'ApplicationContext'+#13#10; Result := Result + ' NameMicrosoft Office/Name'+#13#10; Result := Result + ' Version(11.0.6568)/Version'+#13#10; Result := Result + '/ApplicationContext'+#13#10; Result := Result + ' /OfficeContext'+#13#10; Result := Result + '/Context'+#13#10; Result := Result + ' /Query'+#13#10; Result := Result + '/QueryPacket'; end; function GeraXMLQueryAvancada(UF, Cidade, TipoLogradouro, Logradouro, Numero: String): String; begin Result := ''; if Trim(UF) = '' then Abort; if Trim(Cidade) = '' then Abort; if Trim(TipoLogradouro) = '' then Abort; if Trim(Logradouro) = '' then Abort; if Trim(Numero) = '' then Abort; // Result := '?xml version=1.0 encoding=utf-8?'+#13#10; Result := Result + 'QueryPacket xmlns=urn:Microsoft.Search.Query'+#13#10; Result := Result + ' Query'+#13#10; Result := Result + 'Context'+#13#10; Result := Result + ' QueryTextLogradouro/QueryText'+#13#10; Result := Result + ' Requery'+#13#10; Result := Result + 'ServiceParameters xmlns=urn:Microsoft.Search.Office.ServiceParameters'+#13#10; Result := Result + ' Parameters'+#13#10; Result := Result + ' AdvancedSearchEditUF'+UF+'/AdvancedSearchEditUF'+#13#10; Result := Result + ' AdvancedSearchEditLocalidade'+Cidade+'/AdvancedSearchEditLocalidade'+#13#10; Result := Result + ' AdvancedSearchEditTipoLogradouro'+TipoLogradouro+'/AdvancedSearchEditTipoLogradouro'+#13#10; Result := Result + ' AdvancedSearchEditLogradouro'+Logradouro+'/AdvancedSearchEditLogradouro'+#13#10; Result := Result + ' AdvancedSearchEditNumero'+Numero+'/AdvancedSearchEditNumero'+#13#10; Result := Result + ' /Parameters'+#13#10; Result := Result + '/ServiceParameters'+#13#10; Result := Result + ' /Requery'+#13#10; Result := Result + '/Context'+#13#10; Result := Result + 'OfficeContext xmlns=urn:Microsoft.Search.Query.Office.Context'+#13#10; Result := Result + ' ApplicationContext'+#13#10; Result := Result + '
Re: RES: [delphi-br] Usar serviço do correio para conseguir CEP através da aplic
Sim, manualmente, a unit está funcionando basicamente do mesmo modo, você digita um CEP o programa busca isso no serviço on-line e em seguida retorna para os componentes que trabalham com texto, mas antes, quando se digitava um CEP incompleto os campos eram preenchidos incorretamente, se você ainda não colocou minha alteração faça um teste com 32400-000, ele receberá Cidade e Unidade Federativa, porém por ocuparem um espaço menor que cidade, logradouro, e UF, o código colocava-os em ordens diferentes. Quando um CEP não for encontrado o usuário terá que informá-lo ao banco de dados manualmente. --- Em delphi-br@yahoogrupos.com.br, Ricardo César Cardoso [EMAIL PROTECTED] escreveu MAs com essa alteração que vc está fazendo vc vai completar o BD? Se um CEP não estiver lá, ele será inserido? robersonfox [EMAIL PROTECTED] escreveu: Depois de baixar o arquivo, notei que alguns CEP's não estão completamente inseridos no BD do correio, um exemplo é o 32400-000, para solucionar o problema reescrevi uma parte do código principal, vou colocar a unit por completo aqui, é só copiar e colar: unit Unit1; interface ...
Re: Re: RES: [delphi-br] Usar serviço do correio para conseguir CEP através da aplic ação
Obrigado pelo link, Douglas! A aplicação que fiz segue o que foi demonstrada aqui e também é iguarl ao demonstrado no artigo. Vou até trocar o WS que tinha sido divulgado no começo desta thread pelo que está na matéria. []'s Ricardo. Douglas Uesato - Depto. de Informática [EMAIL PROTECTED] escreveu: Galera, No dia 22/01 foi incluído um tutorial para utilizar o webservice do próprio correio no site da ClubeDelphi, inclusive tem uma aplicação de exemplo mostrando como usar o serviço. A matéria pode ser conferida no link abaixo: http://www.devmedia.com.br/articles/viewcomp.asp?comp=4327 Eu realizei algumas consultas aqui e está tudo perfeito e como o webservice é do próprio correio, acredito que a base disponibilizada por eles deve estar atualizada. Atenciosamente, Douglas Uesato De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Ricardo César Cardoso Enviada em: quinta-feira, 25 de janeiro de 2007 10:53 Para: delphi-br@yahoogrupos.com.br Assunto: [SPAM] Re: RES: [delphi-br] Usar serviço do correio para conseguir CEP através da aplicação Bom dia! Também notei essa defasagem, mas apenas quando o CEP digitado é de uma empresa. Nesse caso, adaptei no meu sistema que o usuário entre com as informações do endereço não encontrado e assim eu crio a minha própria base. []'s Ricardo. Jader Ricardo [EMAIL PROTECTED] escreveu: Boa tarde amigos !!! Criei a pequena aplicação aqui e funcionou corretamente, porém estou com algumas dúvidas. Como um amigo da lista até mencionou tem determinados CEPs que não encontramos, ou seja, não estão na base. Então, que base é essa ? É a do correios ? É a mais recente ? E se não for a do correios, alguém aqui já teve experiência em licenciar a base do correios ? Atenciosamente, Jader Ricardo _ De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Emerson Cassio Enviada em: sábado, 6 de janeiro de 2007 01:17 Para: delphi-br@yahoogrupos.com.br Assunto: Re: [delphi-br] Usar serviço do correio para conseguir CEP através da aplicação Crie um novo Projeto (Delphi 7 em diante) Salve o projeto e a unit. Clique File..New...Other Selecione a Aba WebServices WSDL Importer...Ok em Location of WSDLFileor URL digite: http://www.byjg. http://www.byjg.com.br/xmlnuke-php/webservice.php/ws/cep?wsdl com.br/xmlnuke-php/webservice.php/ws/cep?wsdl Clique Next...Finish Salve a unit criada com o nome CEP Selecione o Form Principal do Projeto Clique File...Use Unit...Selecione CEP e clique OK. Adicione no Form o componente HTTPRIO da aba WebServices Propriedade WSDLLocation coloque http://www.byjg. http://www.byjg.com.br/xmlnuke-php/webservice.php/ws/cep?wsdl com.br/xmlnuke-php/webservice.php/ws/cep?wsdl Propriedade Service coloque CEPService Propriedade Port coloque CEPServicePort Adicione no Form um Componente Edit e um Botão De dois Clique no Botão e adicione o seguinte código: procedure TForm1.Button1Click(Sender: TObject); var ObjSoap : CEPServicePort; Num : string; begin ObjSoap:=HTTPRIO1 as CEPServicePort; Num:=Edit1.text; memo1.Lines.Add(ObjSoap.obterLogradouro(Num)); end; Pronto rode o projeto, digite o cep no Edit tanto faz o formato 7800 ou 78000-000 clique o botão e no memo aparecerá o respectivo endereço, bastando usar a criatividade para usar da forma que melhor convir. Codigo completo da Unit Principal unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, InvokeRegistry, StdCtrls, Rio, SOAPHTTPClient; type TForm1 = class(TForm) HTTPRIO1: THTTPRIO; Button1: TButton; Edit1: TEdit; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses cep; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var ObjSoap : CEPServicePort; Num : string; begin ObjSoap:=HTTPRIO1 as CEPServicePort; Num:=Edit1.text; memo1.Lines.Add(ObjSoap.obterLogradouro(Num)); end; end. Codigo Completo da Unit CEP // // // The types declared in this file were generated from data read from the // WSDL File described below: // WSDL : http://www.byjg. http://www.byjg.com.br/xmlnuke-php/webservice.php/ws/cep?wsdl com.br/xmlnuke-php/webservice.php/ws/cep?wsdl // Encoding : utf-8 // Version : 1.0 // (06-01-07 00:54:32 - 1.33.2.5) // // unit cep; interface uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; type // // // The
Re: RES: [delphi-br] Usar serviço do correio para conseguir CEP através da aplic
Depois de baixar o arquivo, notei que alguns CEP's não estão completamente inseridos no BD do correio, um exemplo é o 32400-000, para solucionar o problema reescrevi uma parte do código principal, vou colocar a unit por completo aqui, é só copiar e colar: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, StdCtrls, Mask, ComCtrls, ExtCtrls, DB, DBClient, Grids, DBGrids; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; Label1: TLabel; edtBuscaLogradouro: TMaskEdit; btnBuscaLogradouro: TButton; EdtBuscaLogradouroCidade: TEdit; Label2: TLabel; Bevel1: TBevel; Button1: TButton; Label4: TLabel; EdtBuscaLogradouroLogradouro: TEdit; memoBuscaLogradouroSource: TMemo; Label6: TLabel; Label7: TLabel; EdtBuscaCEPCidade: TEdit; cbbBuscaCEPUF: TComboBox; Label8: TLabel; cbbBuscaCEPTipoLogradouro: TComboBox; Label9: TLabel; Label10: TLabel; EdtBuscaCEPLogradouro: TEdit; btnBuscaCEPs: TButton; Button5: TButton; Bevel2: TBevel; DBGrid1: TDBGrid; memoBuscaCEPSource: TMemo; cdsCEPs: TClientDataSet; DataSource1: TDataSource; EdtBuscaLogradouroBairro: TEdit; Label11: TLabel; cbbBuscaLogradouroUF: TComboBox; Label3: TLabel; EdtBuscaCEPNumero: TEdit; Label5: TLabel; cdsCEPsCIDADE: TStringField; cdsCEPsLOGRADOURO: TStringField; cdsCEPsBAIRRO: TStringField; cdsCEPsCEP: TStringField; cdsCEPsUF: TStringField; procedure Button5Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure btnBuscaCEPsClick(Sender: TObject); procedure btnBuscaLogradouroClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Query; {$R *.dfm} function GeraXMLQuery(Cep: String): String; begin Result := '?xml version=1.0 encoding=utf-8?'+#13#10; Result := Result + 'QueryPacket xmlns=urn:Microsoft.Search.Query'+#13#10; Result := Result + ' Query'+#13#10; Result := Result + 'Context'+#13#10; Result := Result + ' Context'+#13#10; Result := Result + 'QueryText'+Cep+'/QueryText'+#13#10; Result := Result + ' /Context'+#13#10; Result := Result + ' OfficeContext xmlns=urn:Microsoft.Search.Query.Office.Context'+#13#10; Result := Result + 'ApplicationContext'+#13#10; Result := Result + ' NameMicrosoft Office/Name'+#13#10; Result := Result + ' Version(11.0.6568)/Version'+#13#10; Result := Result + '/ApplicationContext'+#13#10; Result := Result + ' /OfficeContext'+#13#10; Result := Result + '/Context'+#13#10; Result := Result + ' /Query'+#13#10; Result := Result + '/QueryPacket'; end; function GeraXMLQueryAvancada(UF, Cidade, TipoLogradouro, Logradouro, Numero: String): String; begin Result := ''; if Trim(UF) = '' then Abort; if Trim(Cidade) = '' then Abort; if Trim(TipoLogradouro) = '' then Abort; if Trim(Logradouro) = '' then Abort; if Trim(Numero) = '' then Abort; // Result := '?xml version=1.0 encoding=utf-8?'+#13#10; Result := Result + 'QueryPacket xmlns=urn:Microsoft.Search.Query'+#13#10; Result := Result + ' Query'+#13#10; Result := Result + 'Context'+#13#10; Result := Result + ' QueryTextLogradouro/QueryText'+#13#10; Result := Result + ' Requery'+#13#10; Result := Result + 'ServiceParameters xmlns=urn:Microsoft.Search.Office.ServiceParameters'+#13#10; Result := Result + ' Parameters'+#13#10; Result := Result + ' AdvancedSearchEditUF'+UF+'/AdvancedSearchEditUF'+#13#10; Result := Result + ' AdvancedSearchEditLocalidade'+Cidade+'/AdvancedSearchEditLocalidade'+#13#10; Result := Result + ' AdvancedSearchEditTipoLogradouro'+TipoLogradouro+'/AdvancedSearchEditTipoLogradouro'+#13#10; Result := Result + ' AdvancedSearchEditLogradouro'+Logradouro+'/AdvancedSearchEditLogradouro'+#13#10; Result := Result + ' AdvancedSearchEditNumero'+Numero+'/AdvancedSearchEditNumero'+#13#10; Result := Result + ' /Parameters'+#13#10; Result := Result + '/ServiceParameters'+#13#10; Result := Result + ' /Requery'+#13#10; Result := Result + '/Context'+#13#10; Result := Result + 'OfficeContext xmlns=urn:Microsoft.Search.Query.Office.Context'+#13#10; Result := Result + ' ApplicationContext'+#13#10; Result := Result + 'NameMicrosoft Office/Name'+#13#10; Result := Result + 'Version(11.0.6568)/Version'+#13#10; Result := Result + ' /ApplicationContext'+#13#10; Result := Result + '/OfficeContext'+#13#10; Result := Result + ' /Query'+#13#10; Result := Result + '/QueryPacket'; end; procedure
Re: RES: [delphi-br] Usar serviço do correio para conseguir CEP através da aplic
Parabéns pela grande contribuição