Jump to content
Fórum Script Brasil
  • 0

Função de timeout


Question

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!
 

Edited by tcorrea
Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0
Posted (edited)

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!

Edited by tcorrea
Link to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      149422
    • Total Posts
      645925
×
×
  • Create New...