TMySQLServer():New()
Posted: Sat Sep 04, 2021 2:20 am
Saludos amigos,
Quisiera saber de los que tienen experiencia con MySQL si crean la conexión UNA SOLA VEZ al inicio de su programa o abren la conexión al servidor cada vez que van a realizar una query (oServer := TMySQLServer():New()). Se los pregunto porque me está pasando que esporadicamente mi conexión al MySQL remoto se pierde y en alguna ocasiones incluso se cierra el programa sin mostrar ningún mensaje de error. En otras ocasiones si me muestra un mensaje de error "server has gone away".
En mi caso estoy conectandome una sola vez al inicio del programa:
Y luego para mis querys uso esta estructura:
Agradeceré me orienten al respecto.
cordiales saludos a todos.
Quisiera saber de los que tienen experiencia con MySQL si crean la conexión UNA SOLA VEZ al inicio de su programa o abren la conexión al servidor cada vez que van a realizar una query (oServer := TMySQLServer():New()). Se los pregunto porque me está pasando que esporadicamente mi conexión al MySQL remoto se pierde y en alguna ocasiones incluso se cierra el programa sin mostrar ningún mensaje de error. En otras ocasiones si me muestra un mensaje de error "server has gone away".
En mi caso estoy conectandome una sola vez al inicio del programa:
Code: Select all
PROC INIMYSQL(lForzar)
LOCAL aDataConect , cSqlURL , cSqlUSR , cSqlPSW , cSqlDB
IF lForzar = NIL
lForzar := .F.
ENDIF
IF ! FILE('Imagen\Conector.txt')
msgexclamation('No se encontró el archivo de conexión a la base de datos.')
Win_InfoFarma.Release
ENDIF
aDataConect := Txt2Array( 'Imagen\Conector.txt' )
cSqlURL := hb_decrypt( aDataConect[1] )
cSqlUSR := hb_decrypt( aDataConect[2] )
cSqlPSW := hb_decrypt( aDataConect[3] )
cSqlDB := hb_decrypt( aDataConect[4] )
// Connect
oServer := TMySQLServer():New( cSqlURL , cSqlUSR , cSqlPSW )
// Check For Error
If oServer:NetErr()
MsgStop('ERROR:'+oServer:Error())
Win_InfoFarma.Release
Else
oServer:SelectDB( cSqlDB )
If oServer:NetErr()
Win_InfoFarma.Release
MsgStop("No se pudo conectar a la BD infofarma: "+oServer:Error() )
else
SYS_MYSQL := TIME()
Win_InfoFarma.StatusBar.Item(1) := 'Conectado.'
Endif
EndIf
RETURN
Code: Select all
PROC HelpMArtiBusca
qMArti := "SELECT * "+;
"FROM articulos "+;
"INNER JOIN marcas ON articulo_marca_id = marca_id "+;
"WHERE articulo_nombre LIKE '"+RTRIM(cBusqueda)+"%' "+;
"ORDER BY articulo_nombre "
oMArti := oServer:Query( qMArti )
IF ! oMArti:NetErr()
FOR q = 1 TO oMArti:LastRec()
oRow := oMArti:GetRow(q)
Win_Ayuda_MArti.GrdMArti.AddItem ( {;
oRow:fieldGet("articulo_id") ,;
oRow:fieldGet("articulo_nombre") ,;
oRow:fieldGet("marca_abrev") } )
NEXT
Win_Ayuda_MArti.GrdMArti.value := 1
Win_Ayuda_MArti.GrdMArti.setfocus
ELSE
cMsgError := oMArti:Error()
IF 'server has gone away' $ cMsgError .OR. 'connection' $ cMsgError //<-tuve q poner esto para intentar reconectar en caso de una desconexion fortuita
INIMYSQL()
HelpMArtiBusca()
ELSE
MsgStop ( oMArti:Error() )
Win_Ayuda_MArti.TxtBuscar.Setfocus
ENDIF
ENDIF
oMArti:Destroy()
RETURN
cordiales saludos a todos.