TimeOut

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

TimeOut

Mensagem 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 ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

TimeOut

Mensagem 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
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

TimeOut

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

TimeOut

Mensagem por Hasse »

Valeu meu caro.
Funcionou perfeito.
Obrigado.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Responder