Página 1 de 1

TimeOut

Enviado: 06 Jun 2015 12:45
por Hasse
Boa tarde colegas.

Aplicativo em MinGui.
Ele faz conexão com um Banco de Dados do Oracle com a sintaxe abaixo:

Código: Selecionar todos

oConexao    := TOLEAUTO():New("ADODB.Connection") 
oRecSet     := TOLEAUTO():New("ADODB.RecordSet")
oGravarData := TOLEAUTO():New("ADODB.Command")
oConexao:Open( c_CntStrng )
Quando a Rede está indisponível o aplicativo fica "pendurado" nesta última linha, tentando eternamente conectar.

Há alguma forma de introduzir e usar um TimeOut ?

O que se pode fazer ?

TimeOut

Enviado: 06 Jun 2015 14:44
por Hasse
Boa tarde.

Problema detectado, mas NÃO resolvido.

Vejamos o código da Função de entrada do ErrorLog:

Código: Selecionar todos

FUNCTION MyErrorFunc( MyObjError )
   *
   LOCAL cErrorMsg, HtmArch, cText, nn1 := 2
   c_LogFile := ""
   c_ErrMsg  := c_ScrnMsg := ""
   *
   oErrAntes := ERRORBLOCK( { | objErr | BREAK( objErr ) } )
   *
   BEGIN SEQUENCE
      *
      cErrorMsg := MyErrorMessage( MyObjError )
      *
   RECOVER USING oErr
      *
      IF oErr <> NIL
         lMyError  := .T.                  // Especifica que realmente ocurreu um erro.
         c_MsgErr  := "Passou pelo RECOVER USING"
         cErrorMsg := MyErrorMessage( MyObjError, c_MsgErr )
      ENDIF
      *
   END
   *
   HtmArch := Html_ErrorLog()
   Html_LineText( HtmArch, CRLF + CRLF + '<p class="updated">Date: ' + Dtoc(Date()) + "  " + "Time: " + Time() )
   Html_LineText( HtmArch, c_ErrMsg + CRLF + "Fim da mensagem de erro.========================== </p>" )
   *
   cErrorMsg += CRLF + CRLF
   *
   WHILE ! Empty( ProcName( nn1 ) )
      cText := "Called from " + ProcName( nn1 ) + "(" + AllTrim( Str( ProcLine( nn1++ ) ) ) + ")" + CRLF
      cErrorMsg += cText
   ENDDO
   *
   Err_Log_Prt( MyObjError )                                                        && Impressão em A4 de Falha Grave.
   *
   MsgStop( HB_AnsiToOem( c_ScrnMsg ), 'ErrorLog:  ' + c_LogFile )
   *
   Release Window All
   *
RETURN .T.
O problema é que a Função grava o erro ocorrido mas a linha abaixo NÃO apresenta a mensagem na tela:

Código: Selecionar todos

MsgStop( HB_AnsiToOem( c_ScrnMsg ), 'ErrorLog:  ' + c_LogFile )
A linha abaixo deveria fechar a janela como faz com os outros erros, mas NÃO fecha:

Código: Selecionar todos

Release Window All
A mensagem de erro "ErrorLog.htm" gravada é:
<p class="updated">Date: 06/06/2015 Time: 14:25:26<BR>
Número do ErrorLog_MG_nnn.txt..: D:\Dev\FATXML\HSJ\BxReq\ERRORLOG_MG_012.txt
Tipo do erro ..................: Erro
Tipo de mensagem ..............: WINOLE
Número do Erro ................: 1007
Descrição do erro .............: ORA-12170: TNS:Ocorreu timeout da conexÒo
(0x80004005)
Nome do arquivo ..............: : Microsoft OLE DB Provider for Oracle
Objeto do Erro ................: OPEN
Área - Select() ...............: 9

TimeOut

Enviado: 07 Jun 2015 07:30
por alxsts
Olá!

Ajuste o timeout desejado:

Código: Selecionar todos

oConexao    := TOLEAUTO():New("ADODB.Connection")
oRecSet     := TOLEAUTO():New("ADODB.RecordSet")
oGravarData := TOLEAUTO():New("ADODB.Command")

oConexao:ConnectionTimeout := 30 // tempo em segundos

oConexao:Open( c_CntStrng )
Na W3Schools encontrará bastante informação sobre ADO, entre outros assuntos.

TimeOut

Enviado: 07 Jun 2015 12:28
por Hasse
Valeu meu caro.
Funcionou perfeito.
Obrigado.