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.
Editado pela última vez por Maligno em 18 Mar 2011 19:53, em um total de 1 vez.
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
***********************
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.)
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
Marcos Villela
x[H]arbour.org (CVS) | GtWvW+HwGui (CVS) | HbMake | Dbf | Rdd DbfCdx | LeToDb (CVS) (Implantando)
===============================================================
“Quem nunca dormiu à noite e acordou de repente, suando frio e chorando, chorando e
chorando? Se isso lhe aconteceu, então você foi apanhado pelo blues.” (Robert Johnson)
Sweet Home Chicago (Versão Blind Bulldog Blues): www.youtube.com/watch?v=J-V61vQTSZs
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