Ir para conteúdo
Fórum Script Brasil
  • 0

Função de timeout


tcorrea

Pergunta

Boa tarde.

Gostaria de uma ajuda dos ilustres amigos. Tenho um formulário que faz uma consulta de Ceps na web em um endereço na web que por sua vez aponta para uma base de Ceps.mdb. O problema é que quando o provedor está fora do ar (múltiplos acessos), a pool do servidor trava e consequentemente a propriedade do campo (Ao sair) também trava. Quando não tem internet ele acessa o banco de Ceps.mdb local. Segue a condição abaixo, quando tem internet acessa a base da Web, senão acessa a base local. Como posso reescrever o trecho abaixo fazendo com que ele não acesse mais a internet para acessar o primeiro IF sem errar a sintaxe?
Obs: Em ambas as situações ele tem que acessar somente o trecho abaixo:

Call Ver_Cep
             Me.Endereço_Residencial = Mid(End_C, 1, 40)
             Me.Bairro_Residencial = Mid(Bai_C, 1, 20)
             Me.Cidade_Residencial = Mid(Cid_C, 1, 20)
             Me.Estado_Residencial = Mid(Est_C, 1, 2)


Apesar de eu colocar esse trecho nas 2 situações, ele continua buscando primeiramente na internet.

 

Private Sub Cep_Residencial_Exit(Cancel As Integer)
    Dim forma_acesso As String
    Dim strResultado As Long
    Dim VerificaInternet As String
    VerificaInternet = InternetGetConnectedState(strResultado, 0)
    
    If Forms![Seleciona Cliente]![Cliente_Selecionado] = 0 Then
       Cep_C = Me.Cep_Residencial & ""
       If VerificaInternet = 1 Then
          Dim resultado
          Dim Texto As String
          resultado = busca_cep2(Me.Cep_Residencial)
          If cep_status = "S" Then
             Call Ver_Cep
             Me.Endereço_Residencial = Mid(End_C, 1, 40)
             Me.Bairro_Residencial = Mid(Bai_C, 1, 20)
             Me.Cidade_Residencial = Mid(Cid_C, 1, 20)
             Me.Estado_Residencial = Mid(Est_C, 1, 2)
             'Me.Endereço_Residencial = cep_endereco
             'On Error Resume Next
             'Me.Bairro_Residencial = cep_bairro
             'Me.Cidade_Residencial = cep_cidade
             'Me.Estado_Residencial = cep_estado
          Else
             Call Ver_Cep
             Me.Endereço_Residencial = Mid(End_C, 1, 40)
             Me.Bairro_Residencial = Mid(Bai_C, 1, 20)
             Me.Cidade_Residencial = Mid(Cid_C, 1, 20)
             Me.Estado_Residencial = Mid(Est_C, 1, 2)
          End If
       Else
          Call Ver_Cep
          Me.Endereço_Residencial = Mid(End_C, 1, 40)
          Me.Bairro_Residencial = Mid(Bai_C, 1, 20)
          Me.Cidade_Residencial = Mid(Cid_C, 1, 20)
          Me.Estado_Residencial = Mid(Est_C, 1, 2)
       End If
    Else
       If Me.Cep_Residencial <> Cep_Res Then
          Cep_C = Me.Cep_Residencial & ""
          Call Ver_Cep
          Me.Endereço_Residencial = Mid(End_C, 1, 40)
          Me.Bairro_Residencial = Mid(Bai_C, 1, 20)
          Me.Cidade_Residencial = Mid(Cid_C, 1, 20)
          Me.Estado_Residencial = Mid(Est_C, 1, 2)
       End If
    End If
       
       
End Sub

Resumindo, em ambos os casos funcionam (Internet/Local na máquina). O problema é que quando a Pool do provedor trava, o campo Cep fica eternamente tentando consultar a internet e não passa para o Else. Como posso rescrever este código sem não acessar mais a internet?

Obrigado!
 

Editado por tcorrea
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Boa noite.

Na verdade eu reescrevi o código sem os Ifs e resolveu o problema. Entretanto ainda é importante saber a questão do timeout.

 

Neste caso seria verificando se tem internet. Como a pool do servidor IIS travou, ele necessariamente não está sem internet e a condição (IF) fica eternamente checando se tem internet e trava a aplicação entende?

Eu gostaria de definir algo do tipo:

Ex: 

If VerificaInternet = 1 Then
timeout=5 (5 segundos)

Eu sei que não é essa a sintaxe mas eu queria algo do tipo. Se em até 5 segundos a condição (IF) não fosse aceita, o timeout de 5 segundos pararia de verificar e continuaria seguindo a programação.

Obrigado!

Editado por tcorrea
Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite@tcorrea.

Eu uso o seguinte código:

Sub MyMainMacro()
 ' Pausa por 15 segundos.
 Application.OnTime Now + TimeValue("00:00:02"), "MyDelayMacro"
End Sub
Public Sub MyDelayMacro()
 ' Macro executada sob o agendamento.
 MsgBox "Esta macro foi executada após 15 segundos."
End Sub

Eu usava esse mais depois de alguma versões do office parei de usar:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Sleep()
 Sleep 1000   'Faz o código esperar por 1 segundo
End Sub

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...