Page 1 of 1

TDOLPHIN Conexion a Servidor MySQL

Posted: Mon Mar 02, 2015 12:30 pm
by rterraz
Hola Amigos...
Me gustaria que alguien que tenga experiencia en el uso de Tdolphin para conectar FWH con MySql me contestara esta pregunta...
Tengo un sistema que recibe consultas para una base MySql en forma permanente a traves de un Socket.
Cuando el sistema recibe cada peticion se conecta a database MySql a traves de TDOLPHIN y al terminar la consulta cierra la conexion con el servidor.
MI PREGUNTA: Es posible establecer la conexion con el servidor MySql al iniciar el programa y MANTENER ABIERTA ESTA CONEXION para ir evacuando las consultas sin tener que abrir y cerrar permanentemente la conexion y cerrarla solamente al terminar la ejecucion del programa ??????
Agradecere cualquier ayuda que puedan brindarme
MUchas gracias

Re: TDOLPHIN Conexion a Servidor MySQL

Posted: Mon Mar 02, 2015 12:49 pm
by pablovidal

Code: Select all

#include "inkey.ch"
#include "setcurs.ch"
#include "hbclass.ch"
#include "set.ch"
#include "box.ch"

Class tPoolSql

 Data aConex   Init {}
 Data nPool    Init 25
 Data nMysql   Init 0
 Data nActivas  Init 0
  
 Data MyServer
 Data MyUser
 Data MyPass
 Data MyPort
 Data MyDBase

 Method New()
 Method Conexion()
 Method Liberar( nPool ) INLINE ( ( ::aConex[ nPool ][ "activa" ] := .F. ), ( ::nActivas -- ) )
 Method KeepAlive()

EndClass

Method New() Class tPoolSql
Local nTT := 1

 
  ::ReadIni() 
  ::aConex := Array( ::nPool )

  For nTT := 1 to ::nPool
   @ 00,00 Say "Conexiones a la Base de datos " + AllTrim( cStr( nTT ) ) + "/" + AllTrim( cStr( ::nPool ) )
   ::aConex[ nTT ] := {=>} 
   ::aConex[ nTT ][ "oMysql" ] := TDolphinSrv():New( ::MyServer, ::MyUser, ::MyPass, ::MyPort, ( 65536 + 131072 ), ::MyDBase )
   ::aConex[ nTT ][ "activa" ] := .F.
   ::aConex[ nTT ][ "nPool"  ] := nTT
  Next nTT

Return Self

Method Conexion Class tPoolSql
Local hPool
Local nTT := 0

 While .T.
  nTT++
  If nTT > ::nPool
   nTT := 1
  EndIf

  If !::aConex[ nTT ][ "activa" ]
   ::aConex[ nTT ][ "activa" ] := .T.   
   ::nActivas ++
  
   BEGIN SEQUENCE  WITH {|| Break() }
     ::aConex[ nTT ][ "oMysql" ]:Ping()
   RECOVER
     ::aConex[ nTT ][ "oMysql" ] := TDolphinSrv():New( ::MyServer, ::MyUser, ::MyPass, ::MyPort, ( 65536 + 131072 ), ::MyDBase )
   END SEQUENCE

    hPool := ::aConex[ nTT ]

   Exit

  EndIf
 
 Enddo

Return( hPool )


Method KeepAlive() Class tPoolSql
Local hPool
Local nTT := 0
 ::lKeepAlive := .T.
 For nTT := 1 to ::nPool
  If !::aConex[ nTT ][ "activa" ]
    ::aConex[ nTT ][ "activa" ] := .T.
   BEGIN SEQUENCE WITH {|| Break() }
    ::aConex[ nTT ][ "oMysql" ]:Query("select 1")
   RECOVER
    ::aConex[ nTT ][ "oMysql" ] := TDolphinSrv():New( ::MyServer, ::MyUser, ::MyPass, ::MyPort, ( 65536 + 131072 ), ::MyDBase )
   END SEQUENCE
    ::aConex[ nTT ][ "activa" ] := .F.
    Inkey(0.01)
  EndIf
 Next nTT
::lKeepAlive := .F.
Return Nil

 

Re: TDOLPHIN Conexion a Servidor MySQL

Posted: Mon Mar 02, 2015 4:29 pm
by MGA
pablo, como usar esta classe?

Re: TDOLPHIN Conexion a Servidor MySQL

Posted: Mon Mar 02, 2015 7:35 pm
by pablovidal
Este es un Pequeño ejemplo,
esto esta diseñado para trabajar con multihilos y es parte
de un servicio para conexiones por sockets.

Code: Select all

Function Main()
Local oPoolSql := tPoolSql():New()
Local hMySql := oPoolSql:Conexion() 
Local oMysql := hMysql["oMysql"]

...

oPoolSql:Liberar( hMysql["nPool"] )

 

Re: TDOLPHIN Conexion a Servidor MySQL

Posted: Mon Mar 02, 2015 7:55 pm
by MGA
Obrigado Pablo.