Página 1 de 1

Mysql: Conexão perdida

Publicado: Mar Mar 25, 2014 2:37 pm
por Sommus - Reginaldo
Pessoal,
Qual a melhor forma de tratar a desconexão do banco de dados?
A situação é a mais comum possí­vel, uma aplicação numa máquina acessando o
banco em outra:
Quando a aplicação inicia, o servidor está ok, então a aplicação consegue
conectar o banco. Porém, digamos que o servidor seja reiniciado... Então, se
a aplicação tentar executar algo no sistema dará o erro 2006 (Server has
gone way), pois a propriedade lConnected do datasource está como TRUE, mas,
na verdade, como o servidor foi reiniciado, a conexão se perdeu...
Questíµes:
1) O datasource do xailer não deveria tratar isso?
2) Se o xailer não trata, qual seria a forma "correta" de tratar?
Obrigado pela atenção,
Reginaldo

Mysql: Conexão perdida

Publicado: Jue Mar 27, 2014 11:59 am
por jfgimenez
Reginaldo,
> Qual a melhor forma de tratar a desconexão do banco de dados?
>
> A situação é a mais comum possí­vel, uma aplicação numa máquina
> acessando o banco em outra:
>
> Quando a aplicação inicia, o servidor está ok, então a aplicação
> consegue conectar o banco. Porém, digamos que o servidor seja
> reiniciado... Então, se a aplicação tentar executar algo no sistema
> dará o erro 2006 (Server has gone way), pois a propriedade lConnected
> do datasource está como TRUE, mas, na verdade, como o servidor foi
> reiniciado, a conexão se perdeu...
Prueba a sobrecargar el método Execute() del datasource con algo así­:
METHOD Execute( cQuery, cOperation, aData ) CLASS TMySqlDataSource
LOCAL lOk := .F.
LOCAL lRetry := .T., oError
WHILE lRetry
TRY
lOk := ::Super:Execute( cQuery, cOperation, @aData )
EXIT
CATCH oError
IF oError:SubCode == 2006 .AND. lRetry
::Connect()
lRetry := .F.
ELSE
Eval( ErrorBlock(), oError )
BREAK oError
ENDIF
END
END
RETURN lOk
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info