FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Inactividad Mysql+ADO - (Solucionado)
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
Inactividad Mysql+ADO - (Solucionado)
Posted: Fri Jul 12, 2013 02:41 AM
Amigos del foro tengan buenas noches...

Pues como dice el encabezado, tengo problemas de inactividad en mi sistema, trabajo con mysql y ado. En el localhost no hay ning煤n problema, todo corre a las mil maravillas. Pero resulta y pasa que monte el sistema en un WINDOWS SERVER 2003. y despu茅s de un minuto se cae la conexi贸n con la base de datos.

Opte por colocar un timer para que hiciera una consulta cada 20 segundos, pero de esto me genero dos problemas. 1- Se ponen un poco lentas las dem谩s consultas. y 2- Cuando cierro el dialogo de captura y quiero abrir otro dialogo me sale el error MsgStop( "No se ha podido ejecutar el comando !", "Error de Datos" ).

Code (fw): Select all Collapse
oVar:="SELECT s_indice,s_permis,s_llaves,s_nmenus,s_autori,s_verifi,s_usuari,s_proced,s_madres from " + oLamcla:tPerm +" WHERE s_indice='"+alltrim(oLamcla:vColl)+nMenu+"'"
TRY
聽 oTMe := CreateObject("ADODB.Recordset")
CATCH oError
聽 MsgStop(oLamcla:mErnt,oLamcla:mErco)
聽 RETURN(.F.)
END
oTMe:CursorLocation 聽:= adUseClient //adUseServer
oTMe:LockType 聽 聽 聽 聽:= adLockOptimistic
oTMe:CursorType 聽 聽 聽:= adOpenKeyset
oTMe:Source 聽 聽 聽 聽 聽:= oVar
oTMe:ActiveConnection( oLamcla:oConPer )
TRY
聽 oTMe:Open()
CATCH oError
聽 MsgStop(oLamcla:mComa,oLamcla:mDato)
END
nRegistros := oTMe:RecordCount() //esta es la linea donde me marca el error.
IF nRegistros > 0

..........


Luego me saca del sistema y me arroja el siguiente error.

Code (fw): Select all Collapse
Descripci贸n de la Applicaci贸n:
___________________________________________________

Ubicaci贸n y Nombre: C:\DlymAdo.1\Contable.Exe (32 BITS)
Desde la Estaci贸n de Trabajo: CASA
Usuario en Sesi贸n: 001
Privilegio del Usuario: 001
Tama帽o: 1,343,488 bytes
Hora de Inicio: 聽 Jueves 11 de Julio del 2013, 聽9:44:14 PM
Hora del Error: 聽 Jueves 11 de Julio del 2013, 聽9:44:14 PM
Tiempo de Sesi贸n: 0 hours 15 mins 38 secs 


Descripci贸n del Error: 
___________________________________________________

Error ADODB.Recordset/6 聽
DISP_E_UNKNOWNNAME: RECORDCOUNT
聽 聽Args:


Llamadas al Stack:
___________________________________________________

Llamado desde TOLEAUTO:RECORDCOUNT(0)
Llamado desde TLYMA:AUTORIZA(1072)
Llamado desde (b)MAIN(374)
Llamado desde TRBTN:CLICK(676)
Llamado desde TRBTN:LBUTTONUP(854)
Llamado desde TCONTROL:HANDLEEVENT(1690)
Llamado desde TRBTN:HANDLEEVENT(1520)
Llamado desde _FWH(3153)
Llamado desde WINRUN(0)
Llamado desde TWINDOW:ACTIVATE(980)
Llamado desde MAIN(454)
Llamado desde R32_MENU(138)


Alguien tiene alguna idea de como solucionar este problema de inactividad. O si tiene alguna sugerencia.

Saludos
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 158
Joined: Tue Oct 11, 2005 03:10 PM
Re: Inactividad Mysql+ADO
Posted: Fri Jul 12, 2013 05:51 PM
Yo hago esto

En el ON INIT de mi ventana principal

ON INIT .......
oTimerMata := TTimer():New( 60000, { || MataProcesos(oTimerMata) } ),; //60,000 milisegundos = 60 segundos
oTimerMata:Activate(),;
.........

Y la Funcion

Code (fw): Select all Collapse
FUNCTION MataProcesos(oTimerx)
LOCAL oRsData, oErr, lOn:=.F.

聽 聽 聽 oTimerx:deactivate()

聽 聽 聽 IF oSys:cMotor = "MYSQL" .OR. oSys:cMotor = "MARIADB"
聽 聽 聽 聽 聽 oRsData:=NIL
聽 聽 聽 聽 TRY
聽 聽 聽 聽 聽 聽 聽oRsData:=TOleAuto():New( "ADODB.RecordSet" )
聽 聽 聽 聽 聽 聽 聽oRsData:CursorLocation 聽 := adUseClient
聽 聽 聽 聽 聽 聽 聽oRsData:CursorType 聽 聽 聽 := adOpenKeyset
聽 聽 聽 聽 聽 聽 聽oRsData:ActiveConnection := oTerminal:cStrConn
聽 聽 聽 聽 聽 聽 聽oRsData:Source 聽 聽 聽 聽 聽 := "show full processlist"
聽 聽 聽 聽 聽 聽 聽oRsData:Open()
聽 聽 聽 聽 聽 聽 聽oRsData:Sort := "time DESC" 聽 //Lo organizo por la columan TIEMPO en forma DESCENDENTE
聽 聽 聽 聽 Catch oErr
聽 聽 聽 聽 聽 聽 聽oTimerx:activate()
聽 聽 聽 聽 聽 聽RETURN NIL
聽 聽 聽 聽 END

聽 聽 聽 聽 WHILE !oRsData:Eof()
聽 聽 聽 聽 聽 聽 聽 聽IF UPPER(oRsData:Fields("command"):value) = "SLEEP"
聽 聽 聽 聽 聽 聽 聽 聽 聽IF oRsData:Fields("time"):value >= 50 聽 聽 聽 聽 聽 //Los que tengan mas de 50 segundos estan "dormidos" (ya no se estan utilizando)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 TRY
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oTerminal:oConn:Execute( "kill "+LTrim(Str(Int(oRsData:Fields("id"):value))) )
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CATCH
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 END
聽 聽 聽 聽 聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽 聽 聽oRsData:MoveNext()
聽 聽 聽 聽 END
聽 聽 聽 ENDIF
聽 聽 聽 oRsData:Close()
聽 聽 聽 oTimerx:activate()

RETURN Nil


Espero te ayude.
Saludos
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
Re: Inactividad Mysql+ADO
Posted: Fri Jul 12, 2013 10:44 PM
Amigos del foro tengan buena tarde...


Ricardo amigo muchas gracias por la ayuda... Inicialmente tu funci贸n no me soluciono el problema, pero me dio la luz que necesitaba y encontr茅 la respuesta al problema.
Resulta que tenia una conexi贸n que se usa 煤nicamente al inicio del programa, pero que nunca la cerraba, entonces estaban quedando dos conexiones activas con el
mismo nombre y con el mismo id.

El timer que coloque 煤nicamente actualizaba una de las dos conexiones, la otra no, pero al ejecutar otro comando el sistemas confund铆a la que estaba
activa con la inactiva y por esto se reventaba el programa.

De todas formas tu funci贸n me fue de mucha utilidad. Pero dicen que cada persona tiene su forma de matar las pulgas as铆 que la modifique y quedo de la siguiente manera:
hace lo mismo pero con otras palabras

Code (fw): Select all Collapse
FUNCTION MataProcesos( )
LOCAL oVar

oVar:="SELECT * FROM information_schema.PROCESSLIST order by time DESC;"
TRY
聽 oConsTA := CreateObject("ADODB.Recordset")
CATCH oError
聽 MsgStop( "No se ha podido crear el RECORDSET !","Error de Datos" )
聽 RETURN(.F.)
END
oConsTA:CursorLocation 聽:= adUseClient //adUseServer
oConsTA:LockType 聽 聽 聽 聽:= adLockOptimistic
oConsTA:CursorType 聽 聽 聽:= adOpenKeyset
oConsTA:Source 聽 聽 聽 聽 聽:= oVar
oConsTA:ActiveConnection( oLamcla:oServer )
TRY
聽 oEmpr:Open()
CATCH oError
聽 MsgStop( "No se ha podido ejecutar el comando !", "Error de Datos" )
聽 RETURN(.F.)
END
nRegistros := oEmpr:RecordCount()

Do While !oConsTA:Eof()
聽 vTCom:=oConsTA:Fields( "command" ):Value
聽 vTIde:=oConsTA:Fields( "id" ):Value
聽 vTTie:=oConsTA:Fields( "time" ):Value

聽 *******************************************
聽 if vTCom="sleep" .and. vTTie>60
聽 聽 vConsCB:="kill "+LTrim(Str(Int(oConsTA:Fields("id"):value)))
聽 聽 TRY
聽 聽 聽 oLamcla:oServer:Execute(vConsCB)
聽 聽 CATCH oError
聽 聽 聽 MsgInfo(oLamcla:mRegi,oLamcla:mDato)
聽 聽 END
聽 endif

聽 oConsTA:MoveNext()
EndDo
oConsTA:close()


Ricardo nuevamente gracias.
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 158
Joined: Tue Oct 11, 2005 03:10 PM
Re: Inactividad Mysql+ADO
Posted: Fri Jul 12, 2013 11:26 PM

Me alegra que hays encontrado la soluci贸n.

Saludos desde M茅xico.

Continue the discussion