Ver Mensaje Individual
  #2  
Antiguo 11-12-2012
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 22
movorack Va camino a la famamovorack Va camino a la fama
Hola darkerbyte

Mira en la documentación de MySQL tratan muy bien el tema y presentan algunas soluciones.

Cita:
Usted está utilizando un cliente windows y el servidor ha cortado la conexión (probablemente porque wait_timeout ha expirado) antes de que el comando fuese ejecutado.

El problema en windows es que en algunos casos MySQL no obtiene un error desde el SO cuando escribe a la conexión TCP/IP desde el servidor, sino que obtiene el error cuando intenta leer la respuesta desde la conexión.

En este caso, aunque el flag reconnect en la estructura MYSQL sea igual a 1, MySQL no reconecta y vuelve a ejecutar la sentencia, ya que no sabe si el servidor recibió la sentencia original o no.

La solución a esto es o hacer un mysql_ping en la conexión si ha pasado mucho tiempo desde la última sentencia (esto es lo que MyODBC hace) o establecer un wait_timeout en el servidor mysqld tan alto que en la práctica, nunca llegue a sobrepasarse.
http://dev.mysql.com/doc/refman/5.0/es/gone-away.html
Otra solución podrías ser que agregaras un manejador global de excepciones y al capturar esta excepción en particular reintentaras la conexión.

Por lo general trato de utilizar una función para abrir o ejecutar todas las consultas del app. así no tengo que cortar pelo por pelo cuando voy a manejar estas excepciones especificas.

Es decir... en lugar de
Código Delphi [-]
MyQuery.Open
uso
Código Delphi [-]
OpenQuery(MyQuery, 'Select * from tabla where id = :id', [idvar]);
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita