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
uso
Código Delphi
[-]OpenQuery(MyQuery, 'Select * from tabla where id = :id', [idvar]);