FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Recuperar error de un alias cerrado
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Recuperar error de un alias cerrado
Posted: Tue Jul 28, 2020 11:41 AM
Hola amigos, estoy tratando de resolver un tema que no sé si tiene solución.
En alguna parte del programa y realizando ciertas combinaciones tengo usuarios que consiguen generar un error al cerrar una tabla en pleno proceso, error que no he conseguido reproducir por lo que entiendo que se deberá a características de los equipos en los que estén instalados (antivirus, cortes de red, etc.)

La pregunta es si es posible "recuperar" la aplicación tras un error de este tipo, como por ejemplo en el que genero en este código cerrando la tabla en medio de un bucle
Code (fw): Select all Collapse
#include "fivewin.ch"

Function Main()
Local nTot:=0

  Use Customer
  while !Customer->(eof())
    nTot++
    Customer->(DbSkip())

    If nTot=5
      Close Customer
    Endif
  Enddo

  ? nTot

Return (nil)


Gracias!
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Recuperar error de un alias cerrado
Posted: Tue Jul 28, 2020 11:57 AM

Hola Ángel,

Intuyo que el problema está en tu programa y no en los equipos.
También creo que el error es debido a que cuando el programa está en un bucle, el usuario hace algo con el ratón, con el teclado, etc... que desvía la ejecución a otra parte del programa. Allí se cierran tablas, incluida la que comentas y de vuelta al bucle sobreviene el crash.

¿ Qué hacer ? Por supuesto, no parchear, buscando soluciones de recuperacion de la aplicacion tras el error, sino ir a la raiz del problema. Y ahi la solucion puede pasar porque en un bucle inhabilites el uso de las ventanas de detrás. Yo tengo algo asi haciendo que los browses no se pinten (evento paint) si una variable publica se esta ejecutando. Se me muestra la pantalla del browse en blanco, pero me ahorro problemas de reposiconamiento y otros.

Espero que te sirva.

Salu2

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Recuperar error de un alias cerrado
Posted: Tue Jul 28, 2020 01:47 PM
Intenta asi:

Code (fw): Select all Collapse
#include "fivewin.ch"

FUNCTION MAIN()

   LOCAL NTOT := 0

   USE CUSTOMER
   GO TOP

   WHILE .NOT. CUSTOMER->( EOF() )

      SYSREFRESH()

      NTOT++

      CUSTOMER->( DBSKIP() )

      IF NTOT == 5

         EXIT

      ENDIF

   ENDDO

   ? NTOT

   IF NTOT = 5

      CLOSE CUSTOMER

      NTOT := 0

   ENDIF

RETURN NIL
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Recuperar error de un alias cerrado
Posted: Wed Jul 29, 2020 10:31 PM
Code (fw): Select all Collapse
#include "fivewin.ch"

Function Main()
Local nTot:=0
local cAlias  // <----

  Use Customer

  cAlias := alias()  // <----

  while select( cAlias ) != 0 .and. !Customer->(eof())  // <----
    nTot++
    Customer->(DbSkip())

    If nTot=5
      Close Customer
    Endif
  Enddo

  ? nTot

Return (nil)
______________________________________________________________________________

Sevilla - Andalucía

Continue the discussion