ERRO NA CONSULTA CEP SITE CORREIOS

MILTONSILVA94 10/04/2016 05:15:12
#460812
No meu formulário ao digitar o [ô]CEP[ô] e clicar no botão [ô]Buscar[ô] ele faz a consulta no site dos correios e preenche os campos endereço, bairro, cidade, e uf.
Fiz a validação caso o usuário digite o cep correto ele preenche estes campos, mas caso o valor seja < 9 dígitos ele dá a mensagem de incorreto, porém caso o usuário digite um nº aleatório por exemplo 92222-222 eu precisaria que emitisse também uma mensagem de erro pois atualmente ele emite o erro em anexo... porém como poderia fazer? Abaixo está o código que uso:

Private Sub cmdBuscar_Click()
If Len(txtCep.Text) < 9 Then
MensagemDoSistema [Ô]Campo [ô]Cep[ô] incorreto, verifique antes de fazer a busca![Ô]
txtCep.Text = [Ô][Ô]
txtCep.SetFocus
Exit Sub
End If

MousePointer = 11
Dim xlink As String

Set myXML = New DOMDocument
myXML.resolveExternals = True
myXML.validateOnParse = True
myXML.async = False
xlink = [Ô]http://cep.republicavirtual.com.br/web_cep.php?cep=[Ô] & txtCep & [Ô]&formato=xml[Ô]
myXML.Load (xlink)

For Each X In myXML.documentElement.childNodes
Select Case X.nodeName
Dim xrua As String
Dim xtipo As String
Case Is = [Ô]logradouro[Ô]
xrua = UCase$(X.childNodes(0).Text)
Case Is = [Ô]uf[Ô]
cboUf = UCase$(X.childNodes(0).Text)
Case Is = [Ô]cidade[Ô]
txtCidade = UCase$(X.childNodes(0).Text)
Case Is = [Ô]bairro[Ô]
txtBairro = UCase$(X.childNodes(0).Text)
Case Is = [Ô]tipo_endereco[Ô]
xtipo = UCase$(X.childNodes(0).Text)
End Select
txtEndereco = xtipo & [Ô] [Ô] & xrua
Next
MousePointer = 0
txtNumeroCasa.SetFocus
End Sub


Quando é digitado um cep inválido ele retorna para a linha:
cboUf = UCase$(X.childNodes(0).Text)
MILTONSILVA94 10/04/2016 19:24:28
#460828
Me aprofundando nesta rotina, fiz um verificador de conexão de internet, caso o mesmo não esteja na rede ele já emite mensagem de erro e não prossegue, ficando assim:

Private Declare Function InternetGetConnectedState Lib [Ô]wininet[Ô] (ByRef dwflags As Long, ByVal dwReserved As Long) As Long
Private Const CONNECT_LAN As Long = &H2
Private Const CONNECT_MODEM As Long = &H1
Private Const CONNECT_PROXY As Long = &H4
Private Const CONNECT_OFFLINE As Long = &H20
Private Const CONNECT_CONFIGURED As Long = &H40

Public Function IsWebConnected(Optional ByRef ConnType As String) As Boolean
Dim dwflags As Long
Dim WebTest As Boolean
ConnType = [Ô][Ô]
WebTest = InternetGetConnectedState(dwflags, 0&)
Select Case WebTest
Case dwflags And CONNECT_LAN: ConnType = [Ô]LAN[Ô]
Case dwflags And CONNECT_MODEM: ConnType = [Ô]Modem[Ô]
Case dwflags And CONNECT_PROXY: ConnType = [Ô]Proxy[Ô]
Case dwflags And CONNECT_OFFLINE: ConnType = [Ô]Offline[Ô]
Case dwflags And CONNECT_CONFIGURED: ConnType = [Ô]Configurada[Ô]
End Select
IsWebConnected = WebTest
End Function

e no botão que faz a busca ficou assim:

Private Sub cmdBuscar_Click()
Dim msg As String

If Len(txtCep.Text) < 9 Or (txtCep.Text) = [Ô][Ô] Then
MensagemDoSistema [Ô]Campo [ô]Cep[ô] incorreto, verifique antes de fazer a busca![Ô]
txtCep.Text = [Ô][Ô]
txtCep.SetFocus
Exit Sub
End If

[ô]-----------------------------------------------------------------------------------------------

If IsWebConnected(msg) Then
[ô]MensagemDoSistema [Ô]Você está conectado à Internet via: [Ô] & msg
Else
MensagemDoSistema [Ô]Verifique sua conexão de rede, pois não está conectado à internet! Não será possível fazer a busca do cep![Ô]
txtEndereco.SetFocus
Exit Sub
End If

[ô]-----------------------------------------------------------------------------------------------

MousePointer = 11
Dim xlink As String

Set myXML = New DOMDocument
myXML.resolveExternals = True
myXML.validateOnParse = True
myXML.async = False
xlink = [Ô]http://cep.republicavirtual.com.br/web_cep.php?cep=[Ô] & txtCep & [Ô]&formato=xml[Ô]
myXML.Load (xlink)

For Each X In myXML.documentElement.childNodes
Select Case X.nodeName
Dim xrua As String
Dim xtipo As String
Case Is = [Ô]logradouro[Ô]
xrua = UCase$(X.childNodes(0).Text)
Case Is = [Ô]uf[Ô]
cboUf = UCase$(X.childNodes(0).Text)
Case Is = [Ô]cidade[Ô]
txtCidade = UCase$(X.childNodes(0).Text)
Case Is = [Ô]bairro[Ô]
txtBairro = UCase$(X.childNodes(0).Text)
Case Is = [Ô]tipo_endereco[Ô]
xtipo = UCase$(X.childNodes(0).Text)
End Select
txtEndereco = xtipo & [Ô] [Ô] & xrua
Next
MousePointer = 0
txtNumeroCasa.SetFocus
End Sub

Só falta criar alguma coisa do tipo caso seja um cep inválido, pois o sistema fica pensando e retorna com erro daí..
KERPLUNK 10/04/2016 19:31:57
#460830
Faça a depuração do código e veja em que linha o erro está ocorrendo. Mas tenho quase certeza que será na linha do Load ou na do For Each que tem logo abaixo.
JCM0867 10/04/2016 19:42:15
#460832
Lembre uma vez achei uma API do google que fazia isso
MILTONSILVA94 10/04/2016 20:02:05
#460833
Ele retorna para a linha abaixo:
cboUf = UCase$(X.childNodes(0).Text)
KERPLUNK 10/04/2016 20:36:55
#460834
cboUf é uma combo por acaso?
OMAR2011 10/04/2016 22:01:38
#460835
KERPLUNK, apesar de ter postado no Vbnet mas o código e Vb6.
Fiz uma adaptação no Vbnet e acusa o mesmo.
Quando o cep postado por ele sendo 92222-222 acontece o referido.
Usei o dois Visual.
KERPLUNK 10/04/2016 23:52:26
#460842
Você precisa especificar a propriedade da combo ao qual deseja atribuir o valor. Você não pode atribuir um valor texto à um objeto combo.
OMAR2011 11/04/2016 08:15:17
#460849
Por mim foi usado Textbox e Combobox.
Não faz sentido usar Combobox se vai retornar apenas um registro.
O erro acontece com os dois componentes.
Vb6 e Vbnet.
MILTONSILVA94 11/04/2016 09:58:17
#460857
Citação:

:
cboUf é uma combo por acaso?



Isso...

Citação:

:
Por mim foi usado Textbox e Combobox.
Não faz sentido usar Combobox se vai retornar apenas um registro.
O erro acontece com os dois componentes.
Vb6 e Vbnet.



Não consegui testar ainda, irei fazer isso com um campo [ô]Text[ô] e aviso daqui a pouco...
KURTGU 11/04/2016 10:03:30
#460860
Aqui o codigo do site funcionou normal....


Página 1 de 3 [23 registro(s)]
Tópico encerrado , respostas não são mais permitidas