Page 1 of 1

MySql remoto

Posted: Thu Mar 25, 2021 4:03 pm
by edufloriv
Saludos amigos,

Estoy migrando mi sistema para boticas y farmacias de HMG/DBF a HMG/MySQL. Será una versión multi-sucursal por lo que el MySQL es remoto (alojado en un hosting) y la verdad estoy entusiasmado porque la velocidad de respuesta esta genial (tengo un plan de internet de 60mbps ni siquiera es simétrico). La verdad empecé con temor pero ahora sigo adelante con el proyecto.

Mi duda es la siguiente, este es mi código de conexión a la base de datos remota:

Code: Select all

*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
* FUNCION...: INIMYSQL
* COMENTARIO: CONECTA CON EL SERVIDOR SQL
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROC INIMYSQL

LOCAL aDataConect , cSqlURL , cSqlUSR , cSqlPSW , cSqlDB

   IF ! FILE('Imagen\IPAddress.txt')
      Win_InfoFarma.Release
   ENDIF

   aDataConect := Txt2Array( 'Imagen\IPAddress.txt' )
   cSqlURL := aDataConect[1]
   cSqlUSR := aDataConect[2]
   cSqlPSW := aDataConect[3]
   cSqlDB  := 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
         Win_InfoFarma.StatusBar.Item(1) := 'Conectado.'
      Endif 

	EndIf

RETURN
Todo va bien, pero sucede que, cada cierto tiempo, me lanza este error:
lostconex.png
lostconex.png (13.37 KiB) Viewed 1518 times
Para resolverlo antes de cada query debo llamar al procedimiento INIMYSQL:

Code: Select all


   INIMYSQL()  //<-vuelvo a conectar

   qRead := "SELECT * "+;
            "FROM ventas_cab "+;
            "INNER JOIN ventas_det ON vc_id = vd_id "+;
            "INNER JOIN articulos  ON vd_arti_id = articulo_id "+;
            "LEFT  JOIN clientes   ON vc_clie_id = clie_id "+;
            "LEFT  JOIN ubigeos    ON clie_ubigeo = ubigeo_id "+;
            "WHERE vc_id = "+cNumOpeVta+" "+;
            "ORDER BY vd_item"

   oRead := oServer:Query( qRead )
   IF ! oRead:NetErr()												
      IF oRead:LastRec() > 0
         rRead := oRead:GetRow(1)
	...
      ENDIF
   ELSE
      MsgStop ( oRead:Error() )
   ENDIF
   oRead:Destroy()

Mis dudas:

- Si es un tema de configuración en el MySQL del host (imagino que del tiempo de espera), así suba el tiempo ¿ igual en algún momento me seguiría lanzando ese error ?
- ¿ Deberé hacer reconexión al server antes de cada query obligatoriamente ?
- ¿ Cual sería el esquema para evitar que al cliente le lance ese error - continuo con la solución que le he dado o hay otra forma ?

Agradeceré sus sugerencias al respecto. Como siempre, deseando que Ustedes y sus familiares gocen de salud plena.

Cordiales saludos a todos.

Re: MySql remoto

Posted: Thu Mar 25, 2021 4:34 pm
by martingz
Eduardo en la oficina aumentamos el tiempo de espera y no nos ha pasado otra vez, pero en algunas lecturas no recomiendan mantener abierta la sesion
recomiendan tu segunda opcion


saludos

Re: MySql remoto

Posted: Thu Mar 25, 2021 11:15 pm
by salamandra
Hola @martingz y @ edufloriv,
martingz wrote: Thu Mar 25, 2021 4:34 pm Eduardo en la oficina aumentamos el tiempo de espera y no nos ha pasado otra vez, pero en algunas lecturas no recomiendan mantener abierta la sesion
recomiendan tu segunda opcion


saludos
Realmente no es recomendable mantener la sesión abierta pues de esa manera el servidor consume muchos recursos.
Lo mas aconsejable es que la sesión sea finalizada hasta la próxima consulta.


Saludos,


Salamandra, Brazil

Re: MySql remoto

Posted: Fri Mar 26, 2021 12:54 am
by Claudio Ricardo
Hola Eduardo...
Yo hago un conección cada vez (como tu segunda opción) salvo cuando son consultas consecutivas.
Esta función acepta un cuarto parámetro que es el puerto (normalmente 3306) renegué bastante con
eso hasta descubrirlo.
oServer := TMySQLServer():New( cSqlURL , cSqlUSR , cSqlPSW )
Yo la utilizo asi:
oServer := TMySQLServer ():New (cHostName,cUserName,cPassWord,nHostPort)
y puedo conectar con otro port que no sea el por default.

Re: MySql remoto

Posted: Fri Mar 26, 2021 4:17 am
by Claudio Ricardo
El config queda algo así:
Screenshot_20210326_011227.png
Screenshot_20210326_011227.png (49.27 KiB) Viewed 1447 times
Es de un programa para inmobiliarias que estoy haciendo en ratos libres...