FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour No salir del programa desde ErrSysW
Posts: 84
Joined: Wed Oct 24, 2007 12:48 PM
No salir del programa desde ErrSysW
Posted: Tue Feb 11, 2020 11:33 AM
Hola, estoy intentando solucionar un problema que se me ha dado en un par de clientes cuando est谩n conectados por ADO a una base de datos MySQL en un servidor virtual.

Se producen desconexiones de la base de datos, cuando no hay actividad, as铆 que he pensado modificar ErrSysW de la siguiente forma para capturar el error e intentar que reconecte a la base de datos.
Code (fw): Select all Collapse
 聽 cMessage 聽 = " 聽 Error description: " + ErrorMessage( e ) + CRLF
聽 聽cErrorLog += cMessage

聽 聽if AT ("WINOLE/1007", cMessage) # 0 .and. AT ("(0x800A0CB3)", cMessage) # 0
聽 聽 M->oAnnos:oADO:CONECTAR ()
聽 聽 nVeces := 1
聽 聽 do while nVeces < 5 .and. M->oAnnos:oADO:oCon = Nil
        nVeces++
聽 聽 聽 聽 M->oAnnos:oADO:CONECTAR ()
聽 聽 enddo
聽 聽 if M->oAnnos:oADO:oCon # Nil
聽 聽 聽 聽 lRet := .t.
聽 聽 聽 聽 return lRet 聽 聽// Necesito que no se salga del programa. Actualmente me genera hb_out.log y se sale.
聽 聽 endif
聽 聽endif

La variable M->oAnnos:oADO es una instancia de una clase que tengo para encapsular la conexi贸n ADO y cuyo m茅todo CONECTAR es el siguiente :
Code (fw): Select all Collapse
method CONECTAR ()聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 class TAdo

聽 聽 ::oCon := FW_OpenAdoConnection( { "MYSQL", ::cServer, ::cDataBase, ::cUser, ::cClave }, .t. )
聽 聽 if ::oCon == Nil
聽 聽 聽 聽 ? 'Falla'
聽 聽 endif
return .t.

Lo que necesito es que cuando he reconectado a la base de datos no se salga del programa, como indico en el comentario de la l铆nea "return lRet"

Uso FWH1601, Harbour 3.2 y Bcc 7.0
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: No salir del programa desde ErrSysW
Posted: Tue Feb 11, 2020 12:46 PM

Click en el boton <Retry> deberia funcionar. Saludos.

Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 84
Joined: Wed Oct 24, 2007 12:48 PM
Re: No salir del programa desde ErrSysW
Posted: Tue Feb 11, 2020 01:54 PM

No quiero que al cliente le aparezca el error, el c贸digo que he puesto en ErrSysW.prg est谩 en la funci贸n ErrorDialog (e) y hago el return lRet antes de que aparezca el di谩logo de error.

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: No salir del programa desde ErrSysW
Posted: Tue Feb 11, 2020 02:34 PM
Se comprendo tu duda:

Code (fw): Select all Collapse
   IF .NOT. lRet  // lRet = .F.  muestra el dialogo de erro...

      DEFINE DIALOG oDlg SIZE nDlgW, nDlgH ;
             TITLE DLG_TITLE COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

      oDlg:lTruePixel := .F.
      oDlg:lHelpIcon  := .F.

      @ 0, 20 SAY oSay PROMPT OemToAnsi( cMessage ) ;
        CENTERED OF oDlg FONT oFont SIZE 400, 20 COLORS CLR_HRED, CLR_WHITE

      ...

   ELSE
      ...

   ENDIF


Saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 346
Joined: Mon Oct 05, 2009 03:35 PM
Re: No salir del programa desde ErrSysW
Posted: Tue Feb 11, 2020 07:48 PM
primero que nada ejecuta esta instrucci贸n para la sesi贸n mysql aumentando el tiempo de espera:

Code (fw): Select all Collapse
oConn:Execute("SET SESSION wait_timeout = 86400;" )



PD: el mismo problema me afectaba, pero yo me conecto a la db por ODBC, tuve que modificar la clase original tOdbc.prg para que capturar el error de perdida de conexi贸n y realizar una nueva conexi贸n a la misma antes que saltase ErrSysW.
SkyPe: armando.lagunas@hotmail.com

Mail: armando.lagunas@gmail.com
Posts: 84
Joined: Wed Oct 24, 2007 12:48 PM
Re: No salir del programa desde ErrSysW
Posted: Tue Feb 11, 2020 07:56 PM
Gracias karinha por contestar, pero no me has entendido.

Quiero que despu茅s de producirse un error por la desconexi贸n a la base de datos a trav茅s de ADO, el programa no termine. Poder recuperar el error para reconectar a la base de datos y continuar la ejecuci贸n del programa.

Creo que lo que necesito no es posible, porque cuando se produce un error de este tipo siempre se termina la ejecuci贸n del programa y no hay forma de continuar.

He buscado en el foro y he encontrado esta entrada http://forums.fivetechsupport.com/viewtopic.php?f=3&t=36268&hilit=ADO+state

Con la funci贸n IsCnActive voy a detectar que se ha producido una desconexi贸n y reconectar茅 con la base de datos, el problema es que tendr茅 que controlarlo en todas las partes del programa que accedan a la base de datos.
Posts: 84
Joined: Wed Oct 24, 2007 12:48 PM
Re: No salir del programa desde ErrSysW
Posted: Tue Feb 11, 2020 08:05 PM
armando.lagunas wrote:primero que nada ejecuta esta instrucci贸n para la sesi贸n mysql aumentando el tiempo de espera:

Code (fw): Select all Collapse
oConn:Execute("SET SESSION wait_timeout = 86400;" )



PD: el mismo problema me afectaba, pero yo me conecto a la db por ODBC, tuve que modificar la clase original tOdbc.prg para que capturar el error de perdida de conexi贸n y realizar una nueva conexi贸n a la misma antes que saltase ErrSysW.

Gracias Armando, intentar茅 aumentar el timeout, pero pensaba que ese valor lo establec铆a el servidor de la base de datos y no la sesi贸n del cliente.
De hecho tengo otros clientes que se conectan al mismo servidor y no se producen desconexiones. Pueden estar varias horas conectados.
Mis sospechas van encaminadas al proveedor de la ADSL, porque al 煤ltimo cliente que le ha empezado a dar problemas ha sido desde que cambi贸 de proveedor.

Continue the discussion