uso de try endtry para volver a conectarme a una Base de Datos

87 views
Skip to first unread message

Dario Alberto Becerra Begazo

unread,
Apr 27, 2020, 1:06:02 AM4/27/20
to Comunidad de Visual Foxpro en Español
Hola amigos quisiera una ayuda como realizar un bucle para intentar conectarme con una Base de Datos por medio del try .... entry. Gracias

Dario Alberto Becerra Begazo

unread,
Apr 27, 2020, 1:07:05 AM4/27/20
to Comunidad de Visual Foxpro en Español

mapner

unread,
Apr 27, 2020, 9:05:47 AM4/27/20
to Comunidad de Visual Foxpro en Español
Hola,

En primer termino hay que ver como te conectas con la BD. 
Si por ejemplo usas SQLSTRINGCONNECT esta función retorna un valor positivo con el número de conexión o bien -1 si no pudo conectar
si retorna valor negativo debes apelar a la función AERROR() para obtener el error

cStringConn =...
nCon = SQLSTRINGCONNECT(cStringConn)
IF nCon < 0
      AERROR(aErr)
      MESSAGEBOX(aErr[2]) && muestra el mensaje de error
ENDIF

o sea, los errores por conexiones a BD por ODBC con SQLSTRINGCONNECT no interrumpen la ejecución del programa VFP en curso, sino que lo debemos controlar en forma explicita desde el código por el valor retornado, con lo cual no se puede aplicar TRY/CATCH en forma directa

Una alternativa es hacer una función de conexión genérica por ej MI_UDF_CONN y una función ThrowException para manejar que el error para ser capturado por TRY/CATCH de esta manera 

**********
*
FUNCTION MI_UDF_CONN
LPARAMETERS cStringConn
LOCAL nCon
nCon = SQLSTRINGCONNECT(cStringConn)
IF nCon < 0
      AERROR(aErr)
     ThrowException(aErr[1],aErr[2])
ENDIF
 
RETURN nCon

ENDFUNC 

**********
*
FUNCTION ThrowException
LAPARMETERS nCode, cMessage
LOCAL oErr

TRY
THROW
CATCH TO oErr
oErr.ErrorNo=nCode
oErr.MESSAGE=cMessage
THROW
ENDTRY

ENDFUNC

y el uso sería

TRY
      cStringConn = ...
      MI_UDF_CONN(cStringConn)
CATCH TO oErr
MESSAGEBOX(TRANSF(oErr.ErrorNo)+CRLF+oErr.MESSAGE+CRLF+oErr.PROCEDURE+'('+TRANSF(oErr.LINENO)+')')
ENDTRY

 
* Saludos

Javier Bernal

unread,
Apr 27, 2020, 12:57:30 PM4/27/20
to Comunidad de Visual Foxpro en Español
No te la compliques aprovecha la función AERROR(), como te aconseja MAPNER.
Reply all
Reply to author
Forward
0 new messages