Página 1 de 1

LETODB: Conexão perdida

Enviado: 18 Mar 2011 19:49
por MarcosV
Oi Pessoal,

Como Voces tratam quando acontece uma perda de conexão com Letodb ?

Daria para reconectar automaticamente e evitar o erro abaixo ?

Letodb: Erro LETO/1000 Data type error

Obrigado
Nota de Moderação:
por Maligno: O presente tópico foi movido da seção xHarbour, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o [x]Harbour.

Re: LETODB: Conexão perdida

Enviado: 19 Mar 2011 06:17
por sygecom
Não sei se ajuda, mas eu uso assim com SQLRDD.
Coloco no errorsys.prg:

Código: Selecionar todos

   IF oError:genCode == EG_NOALIAS  // NÃO ACHOU O ALIAS ENTÃO VERIFICA A CONEXÃO
      
      Dirchange(CAMINHO_EXE())  // FORÇA A LOCALIZAÇÃO DO EXE
      IF REVISA_CONEXAO()=.F.
         DO WHILE .T.
            IF MY_MSGYESNO("Conexão com o Servidor Inativa, deseja tentar reconectar ?")
               IF ABRE_DADOS(.T.)=.T. // abre a conexão do SQLRDD
                  RETURN .T.
               ELSE
                  LOOP
               ENDIF
            ELSE
               EXIT
            ENDIF
         ENDDO
      ELSE
         IF ConectionOK()=.F.     // VEREFICA SE ESTA ATIVA A CONEXÃO
            DO WHILE .T.
               IF MY_MSGYESNO("Conexão com o Servidor Inativa, deseja tentar reconectar ?")
                  IF Abre_dados(.T.)=.T.  // abre a conexão do SQLRDD
                     RETURN .T.
                  ELSE
                     LOOP
                  ENDIF
               ELSE
                  EXIT
               ENDIF
            ENDDO
         ENDIF
      ENDIF
   ENDIF

Código: Selecionar todos

***********************
FUNCTION REVISA_CONEXAO
***********************
Local lRet:=.T.
HW_Atualiza_Dialogo("Revisando Conexão")  // firula
IF inetestaconectada( pcHOST )=.T. // pcHOST é o IP do servidor. a Função ache facil pelo forum
   HW_Atualiza_Dialogo("Conexão: OK")  // firula
ELSE
   lRet:=.F.
   MSGINFO("NÃO CONECTADO") 
   HW_Atualiza_Dialogo("Conexão: Falhou") // firula
ENDIF
Return(lRet)


********************
FUNCTION CONECTIONOK
********************
Local oSql,cSql,aret :={}
IF eTIPO_SQL="FIREBIRD"
   cSQL := "SELECT MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION"
ELSE
   cSql   := "select version()"
ENDIF
oSql   := SR_GetConnection()                         // Obtem o objeto da conexão ativa
oSql:exec(cSql,.F.,.t.,@aret)
if len(aRet) == 0
   Return(.F.)
else
   Return(.T.)
endif
Return(.F.)

Re: LETODB: Conexão perdida

Enviado: 22 Mar 2011 20:01
por MarcosV
Obrigado Leonardo, vou tentar desta maneira que você postou, ja tentei algo semelhante, só que mais simples, na época não funcionou, eu abria os dbfs e quando retornava com Return(.T.), apresentava o mesmo erro novamente, ficava em loop.

Qualquer novidade vou postar aqui.

Porque é necessario essa função:
Dirchange(CAMINHO_EXE()) // FORÇA A LOCALIZAÇÃO DO EXE

Obrigado

Re: LETODB: Conexão perdida

Enviado: 26 Mar 2011 22:40
por sygecom
Eu uso o dirchange para forçar a localizão atual da pasta, por que as acontece de perder o sinal com a rede e volta em seguida e por algum motivo se perde, e essa função ajuda a restabelecer o local de origem dos dbf