Reconexion automática a servidor mysql con foxpro

221 views
Skip to first unread message

SGE CONSULTORA INTERNATIONAL

unread,
Feb 16, 2019, 12:19:09 PM2/16/19
to Comunidad de Visual Foxpro en Español
Buenos días estimado grupo.
Espero estén todos muy bien.

Tengo un sistema en foxpro9 que se conecta a un servidor mysql a través de ODBC trabajando perfectamente en local o remoto.
El inconveniente esta en cuando estoy por remoto o local y pierdo o tengo un salto en la conexión de red o Internet, inmediatamente mi sistema me muestra pantalla de error: desconexion con el servidor mysql, y me obliga a tener que cerrar toda la aplicación por administrador de tareas.
Existe una manera de poner en el sistema un proceso de reconexion donde si hay una desconexion de la red que da al servidor mysql me "bloquee el sistema" hasta que se vuelva a conectar automáticamente. He buscado en todo Internet y hay muy poca info sobre este tema.
Lo que me puedan ayudar se los agradeceré.
Gracias.

Germán Fabricio Valdez

unread,
Feb 16, 2019, 5:25:16 PM2/16/19
to Comunidad de Visual Foxpro en Español
fijate si podes aplicar esta funcion nueva en vfp9

SQLIDLEDISCONNECT(nStatementHandle)

y 

SQLSETPROP(nStatementHandle, "ConnectTimeOut" ,0) &&esto hace que se quede indefinidamente hasta tener conexion

Germán Fabricio Valdez

unread,
Feb 16, 2019, 8:08:09 PM2/16/19
to Comunidad de Visual Foxpro en Español
y tambien esta instruccion

SQLSETPROP(nStatementHandle, "QueryTimeOut" ,0)



El sábado, 16 de febrero de 2019, 14:19:09 (UTC-3), SGE CONSULTORA INTERNATIONAL escribió:

Alfonso Ramirez Diaz

unread,
Feb 17, 2019, 4:19:14 AM2/17/19
to Comunidad de Visual Foxpro en Español
Te recomiendo usar le objeto Timer dentro del _Screen de Foxpro para que cada 60 segundos haga una consulta al servidor SQL, en mi caso la consulta es para traer simplemente la fecha y hora del servidor, pero esto mantiene siempre la conexión activa, y además dentro de este proceso me reconecto si no puedo obtener la fecha y hora.


El sábado, 16 de febrero de 2019, 14:19:09 (UTC-3), SGE CONSULTORA INTERNATIONAL escribió:

Dsan

unread,
Feb 17, 2019, 11:40:32 AM2/17/19
to publice...@googlegroups.com

Hola SGE
Una consulta:  Para que quieres estar conectado en todo momento?
R =

En mi caso simplemente, en todo momento que voy a requerir de datos del Servidor, lo que hago es Consultar la fecha del servidor,  si pasa bien, sigo con el inserto, update o delete, de lo contrario intento reconectarme,  lo otro que te recomiendan seria la otra alternativa   usar un Timer   en el _Screen   tratar de consultar la fecha cada cierto tiempo, pero si no vas usar el servidor para que estar conectado?

Saludes

Dsanchez




Carlos Miguel FARIAS

unread,
Feb 17, 2019, 6:08:18 PM2/17/19
to Grupo Fox
La desconexión del servidor puede deberse a muchos motivos. Sobre todo en servidores remotos. Los servidores muchas veces cuando una conexión no está activa la "mata" para no desperdiciar recursos. A veces la conexión puede ser por perdida del enlace cliente-servidor.
Cuando estás accediendo a una base de datos, la secuencia sería.
Me conecto, traigo-llevo datos, me desconecto. No permanezco conectado mientras la aplicación espera al usuario o una impresión lenta.
En todo caso pido perdón en lugar de permiso.

STORE 0 TO lnErrores, lnEtapa
oConexion = NULL
DO WHILE lnEtapa = 0
   TRY
      IF oConexion = NULL
        * aquí te conectas, si hay error la captura el catch
      ENDIF
      SQLExec() && acá haces la operación SQL si hay error lo captura el catch
      lnEtapa = 1 && usa números positivos para devolver algún dato de interés
   CATCH && acá gestionas los errores, puedes hacerlo específico o genérico
      lnErrores = lnErrores + 1
      IF lnErrores > 3
         lnEtapa = -2  && usa números negativos para indicar que algo anduvo mal
      ENDIF
   ENDTRY
ENDDO
IF lnErrores < 0
* acá tratas el error, por ejemplo le avisas al usuario
ELSE
* acá el proceso funcionó, sigues con lo que sea.
ENDIF

El timer también es una opción, pero si el usuario se fue a almorzar y vuelve en una hora, hubo 60 re-conexiones al GNH.
Además debes prever apagar el timer mientras haces la transacción, para impedir una re-conexión que te interrumpa la transacción en curso, y volver a activarlo al final.
Además, nadie te garantiza que después de una reconexión exitosa con el timer, 30" cuando quieras hacer tu transacción, la conexión se haya caído de nuevo. 
Saludos: Miguel
Reply all
Reply to author
Forward
0 new messages