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
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Mysql: Conexão perdida
-
- Mensajes: 44
- Registrado: Jue Nov 28, 2013 1:54 pm
Mysql: Conexão perdida
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
> 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