Clipper On Line • Ver Tópico - Guia Postal dos correios

Guia Postal dos correios

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 12:26

Faço isso normalmente pelo meu aplicativo.
Se o código é atribuído pelo IBGE, é baixar a tabela do IBGE....
Isso é por cidade, colocar em cada endereço é desperdício de espaço.

SEEK cUF + cCidade
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 12:56

Pra quem quiser.
Mesma base dos correios, apenas com a adição de NUMCEP, que é o cep descriptografado.
Backup em MySQL.

http://www.jpatecnologia.com.br/arquivos/cepmysql20161031.zip

Comprada há menos de 48 horas, e já não é atualizada.
Fod.m-se os correios.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor gilbertosilverio » 07 Dez 2016 13:17

Jose,

Onde vc acho a senha... procurei e não achei... kkk

Meu nariz e grande, deve ser por isso que nãoacho... kkkk
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 172
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 0 vez
Mens.Curtidas: 11 vezes

Guia Postal dos correios

Mensagempor alxsts » 07 Dez 2016 13:21

Olá!

O interessante é ter o código do município em cada endereço de cliente (nem precisa ter o nome da cidade e UF) e uma tabela de cidades cuja chave é o código do município. Isto evita problemas nos casos em que as cidades mudam de nome, como relatado no tópico Código do Município IBGE - Relato.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2014
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 13 vezes
Mens.Curtidas: 111 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 13:25

A string pronta pra uso no Harbour, via ADO ou equivalente.

correios.png


Importante: Harbour configurado como PTISO, e o editor de fontes também.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 13:34

Os fontes que usei, postar em partes, mais ou menos na ordem em que fui usando.

A principal de abrir conexão com o mdb:

PROCEDURE Main2

   LOCAL cnAccess, aDbList, cDb

   Set( _SET_CODEPAGE, "PTISO" )
   cnAccess := ConexaoAccess()
   cnAccess:Open()
   aDbList := ListFiles( cnAccess )
   FOR EACH cDb IN aDbList
      ListRecords( cnAccess, cDb )
   NEXT
   ConsultaMeuCep( cnAccess )

   cnAccess:Close()

   RETURN

FUNCTION ConexaoAccess()

   LOCAL cnAccess

   cnAccess   := win_OleCreateObject( "ADODB.Connection" )
   cnAccess:ConnectionString := "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\program files (x86)\correios\Access\dbgpbe.mdb;Mode=Share Deny Write;Persist Security Info=False;Jet OLEDB:Database Password=«¹½¿¥Ð²þÞ¢§³¼»"

   RETURN cnAccess


listar tabelas do mdb (nomes das tabelas)

#define ADSCHEMATABLES 20

FUNCTION ListFiles( cnAccess )

   LOCAL Rs, aDbList := {}, cTb

   Rs := cnAccess:OpenSchema( ADSCHEMATABLES )
   DO WHILE ! Rs:Eof()
      cTb := rs:fields( "TABLE_NAME" ):Value
      IF Left( cTb, 3 ) == "LOG"
         AAdd( aDbList, cTb )
      ENDIF
      Rs:MoveNext()
   ENDDO
   Rs:Close()

   RETURN aDbList


listar o nome dos campos, e o conteúdo do primeiro registro (no access TOP 1 limita ao primeiro registro, o que no MySQL seria LIMIT 1)

FUNCTION ListRecords( cnAccess, cDb )

   LOCAL Rs, nCont

   ? Pad( cDb, 20, "-" )
   Rs := cnAccess:Execute( "SELECT TOP 1 * FROM " + cDb )
   FOR nCont = 0 TO Rs:Fields:Count() - 1
      ? Rs:Fields( nCont ):Name, Rs:Fields( nCont ):Value
   NEXT
   Rs:Close()

   RETURN NIL
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 13:37

A conversão do CEP, ou descriptografia se preferirem.

FUNCTION ConverteCEP( cCodigo )

   LOCAL nCont, cTxt, cNovo := "", cNum

   FOR nCont = 1 TO Len( cCodigo ) STEP 2
      cTxt := Substr( cCodigo, nCont, 2 )
      DO CASE
      CASE cTxt $ "UG,LA,AL,GU" ; cNum := "0"
      CASE cTxt $ "X8,8X,CN,NC" ; cNum := "1"
      CASE cTxt $ "Z0,EP,PE,0Z" ; cNum := "2"
      CASE cTxt $ "GR,B1,1B,RG" ; cNum := "3"
      CASE cTxt $ "3D,DI,D3,ID" ; cNum := "4"
      CASE cTxt $ "SJ,C4,4C,JS" ; cNum := "5"
      CASE cTxt $ "2A,A2,QH,HQ" ; cNum := "6"
      CASE cTxt $ "FO,09,90,OF" ; cNum := "7"
      CASE cTxt $ "7Y,DM,Y7,MD" ; cNum := "8"
      CASE cTxt $ "5V,BK,V5,KB" ; cNum := "9"
      OTHERWISE                 ; cNum := "X"
      ENDCASE
      cNovo += cNum
   NEXT

   IF Len( cCodigo ) != 16 // não é cep, não converte
      cNovo = cCodigo
   ENDIF

   RETURN cNovo


A conversão, mas neste caso já tinha colocado a base no MySql

PROCEDURE Main

   LOCAL cnMySql, cTable, aTable, aConvertList, cSql, Rs, cNumCep, nID, nKey, cCampo, cChave, nCont, nTotal

   Set( _SET_CODEPAGE, "PTISO" )
   cnMySql := ConexaoMySql()
   cnMySql:Open()

   aConvertList := { ;
      { "LOG_UNID_OPER",      "UOP_KEY_DNE", "UOP_NU_SEQUENCIAL" }, ;
      { "LOG_LOGRADOURO",     "LOG_KEY_DNE", "LOG_NU_SEQUENCIAL" }, ;
      { "LOG_LOCALIDADE",     "LOC_KEY_DNE", "LOC_NU_SEQUENCIAL" }, ;
      { "LOG_GRANDE_USUARIO", "GRU_KEY_DNE", "GRU_NU_SEQUENCIAL" }, ;
      { "LOG_CPC",            "CPC_KEY_DNE", "CPC_NU_SEQUENCIAL" } }

   FOR EACH aTable IN aConvertList
      cTable := aTable[ 1 ]
      cCampo := aTable[ 2 ]
      cChave := aTable[ 3 ]
      ? "tabela", cTable, "campo", cCampo, "chave", cChave
      Rs := cnMySql:Execute( "SELECT COUNT(*) AS QTD FROM " + cTable )
      nTotal := Rs:Fields( "QTD" ):Value
      Rs:Close()
      cSql := "SELECT NUMCEP, " + cChave + ", " + cCampo + " FROM " + cTable
      Rs := cnMySql:Execute( cSql )
      nCont := 0
      DO WHILE nKey != K_ESC .AND. ! Rs:Eof()
         nKey := Inkey()
         nCont++
         cNumCep := ConverteCep( Rs:Fields( cCampo ):Value )
         nID     := Rs:Fields( cChave ):Value
         IF Mod( nCont, 1000 ) = 0
            ? cTable, nTotal, nCont, Rs:Fields( cChave ):Value, nID, cNumCep
         ENDIF
         IF Rs:Fields( "NUMCEP" ):Value == NIL .OR. Len( Trim( rs:Fields( "NUMCEP" ):Value ) ) = 0
            cSql := "UPDATE " + cTable + " SET NUMCEP='" + cNumCep + "' WHERE " + cChave + "=" + Ltrim( Str( nID ) )
            cnMySql:Execute( cSql )
         ENDIF
         Rs:MoveNext()
      ENDDO
      Rs:Close()
   NEXT
   cnMySql:Close()

   RETURN
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 13:43

Pra gravar no MySQL deu preguiça, então encontrei o utilitário Bullzip que faz isso.
Ele joga direto do mdb pra MySQL, sem nada de programação.
Apenas criei uma base de dados vazia chamada CEP, por precaução.

Também assim ficou mais fácil visualizar as informações pelo HEIDISQL.

Não quis arriscar a instalar algum Access pirata no W10, ainda mais pra usar uma única vez.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 13:49

Só pra completar:
As pastas não tem muitos arquivos, em último caso, seria abrir um por um no bloco de notas.
Mas eu não sabia disso, acabei mesmo foi encontrando a informação no google... nesse caso procurei o nariz de alguém também... rs

correios1.png


correios2.png
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor gilbertosilverio » 07 Dez 2016 13:56

Ai eu me pergunto!

Pra quer colocar senha, se ela vem junto... kkkk
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 172
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 0 vez
Mens.Curtidas: 11 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 14:03

O interessante é ter o código do município em cada endereço de cliente (nem precisa ter o nome da cidade e UF) e uma tabela de cidades cuja chave é o código do município. Isto evita problemas nos casos em que as cidades mudam de nome, como relatado no tópico Código do Município IBGE - Relato.


Nesse caso vamos precisar de uma tabela não oficial pra consertar as tabelas oficiais.

Por enquanto ainda nem sei sobre como manter a tabela oficial atualizada, e já está querendo colocar algo não oficial nela... problema...
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 14:09

Pra quer colocar senha, se ela vem junto... kkkk


Talvez seja só pra impedir um usuário comum de estragar o conteúdo.
Lembrando que o Access faz parte o Office.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 14:11

Mais um comentário....

Meu download está disponível nos correios por 60 dias.

Durante 60 dias vou poder baixar o arquivo que já virou desatualizado.......
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Guia Postal dos correios

Mensagempor gilbertosilverio » 07 Dez 2016 15:27

Jose,

So por curiosidade, como você montou o ConverteCEP(), como voce descobriu as referencias aos numeros?
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 172
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 0 vez
Mens.Curtidas: 11 vezes

Guia Postal dos correios

Mensagempor JoséQuintas » 07 Dez 2016 15:42

Comecei pelo meu endereço: RUA MAESTRO ALFREDO BEVILACQUA, que só tem uma.
Identifiquei 03676-080

Considerando as 40 combinações diferentes, só a primeira pesquisa já pegou 8, restando 32.

Depois fui fazendo o mesmo com outras ruas únicas, e vendo o que sobrava.
Aproveitava as sobras que tinham mais "X" no cep convertido, pra resolver mais números por vez.

Nota: vi sobre isso numa pesquisa do google, que deu uma tabela que não funcionou.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9208
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 532 vezes

Anterior Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro