VPN - Testar conexão

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

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

VPN - Testar conexão

Mensagem por Hasse »

Boa tarde colegas.

Tenho uma conexão a um banco Oracle, via VPN:

Código: Selecionar todos

FUNCTION Abre_Connect()
   oConexao := TOLEAUTO():New("ADODB.Connection")
   oConexao:Open( c_CntStrng )
   MilliSec( 2000 )
   IF ValType( oConexao ) = "O"
      Msg( 'Conexão ATIVA' )
   ENDIF
RETURN( .T. )
O problema é que quando cai a conexão VPN o aplicativo gera erro e aborta, quando em modo janela. Em modo Mini-gui é ainda pior: O aplicativo continua a rodar, gravando log de que tudo está rodando e deletando os arquivos transmitidos.

Podem ver que tenho uma "gambiarra" testando o tipo de da variável oConexao, mas isto não me garante que a VPN está ativa, e nem que a conexão realmente existe e está ativa.

Há uma forma de testar a conexão VPN ? (em modo janela e também em MIniGui...)
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

VPN - Testar conexão

Mensagem por alxsts »

Olá!

Você pode testar o método state do objeto connection:

Código: Selecionar todos

#include "ado.ch"

FUNCTION Abre_Connect( c_CntStrng )
 
   LOCAL oConexao
   LOCAL lRet := .F.

   IF c_CntStrng != NIL
      oConexao := TOLEAUTO():New("ADODB.Connection") 
      oConexao:Open( c_CntStrng )
      
      IF oConexao:state = adStateOpen
         lRet := .T.
      ENDIF  
   ENDIF
   
RETURN lRet
[]´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

VPN - Testar conexão

Mensagem por Hasse »

Funcionou perfeito, Alexandre.
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)
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

VPN - Testar conexão

Mensagem por Hasse »

Acabei de testar o "oConexao:state" em situação de queda da VPN.

Parece que ele arquiva na memória o valor 1 quando da conexão inicial, e não faz o re-teste quando invocado posteriormente.

Durante uma transferência de dados eu fechei a conexão da VPN manualmente e o aplicativo continuou a rodar como se a VPN não tivesse caído.
No código abaixo o processamento não entrou no ELSE:

Código: Selecionar todos

   IF l_Conex = .T. .AND. oConexao:state = adStateOpen
      ...
      transfereValores( c_StrDados )
      ...
   ELSE
      Alert( 'Conexão INATIVA' )
   ENDIF
Há alguma maneira de re-testar a conexão ou dar um refresh no "oConexao:state" ?
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

VPN - Testar conexão

Mensagem por Hasse »

Boa tarde colegas.

Botei os neurônios "Tico-e-Teco" prá funcionar para tentar encontrar uma saída, e pergunto:

Para re-testar a conexão via ADO com o banco Oracle, há algum inconveniente se for enviada novamente a string de conexão ?
Explico melhor num alinha de tempo:
1)-A conexão está ABERTA e transferindo dados;
2)-Em determinado instante em que não há transmissão de dados a VPN cai;
3)-No re-início de uma nova transferência de dados, não sabendo em que status está a VPN, posso enviar novamente a string de conexão, como:

Código: Selecionar todos

   oConexao:Open( c_CntStrng )
Desta forma, se a VPN não estiver ativa fatalmente terei um erro, que poderei tratar.

Caso a VPN estiver ATIVA e a Conexão com o Oracle também, este procedimento pode trazer algum inconveniente ?
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