Recuperar error de un alias cerrado

Recuperar error de un alias cerrado

Postby AngelSalom » 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: Select all  Expand view  RUN
#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
User avatar
AngelSalom
 
Posts: 727
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Recuperar error de un alias cerrado

Postby hmpaquito » 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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Recuperar error de un alias cerrado

Postby karinha » Tue Jul 28, 2020 1:47 pm

Intenta asi:

Code: Select all  Expand view  RUN

#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
User avatar
karinha
 
Posts: 7852
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Recuperar error de un alias cerrado

Postby xmanuel » Wed Jul 29, 2020 10:31 pm

Code: Select all  Expand view  RUN

#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
xmanuel
 
Posts: 763
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 69 guests