FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ¿Qué le ven de raro a este código?
Posts: 234
Joined: Tue Oct 25, 2005 12:39 AM

¿Qué le ven de raro a este código?

Posted: Wed Oct 17, 2007 12:52 AM

Según yo... nunca, bajo ninguna circunstancia debe de aparecer me msgstop... lo curioso es que a veces me aparece a veces no. Siempre en la misma base de datos.

Esta es una función que uso para asegurarme de puedo agregar o bloquear un registros antes de actualizarlo.

Saludos
Fernando

Function Seguro( cAlias, cTipo) // B - Rlock A - Append Blank
local nSegundos := 1

Do Case
Case cTipo == "B"

   If ( cAlias)->( DbRlock() )
      Return TRUE
   Else
      Do While ( cAlias )->( !DbRlock() )
         nSegundos++
         Inkey(1)

         If ( cAlias )->( DbRlock() )
            Return TRUE
         Endif

         If nSegundos >= 5
            MsgAlert("No se puede actualizar el registro"+Chr(13)+;
                        "Reintentar nuevamente")
            nSegundos := 1
         Endif
      EndDo
   Endif

Case cTipo == "A"

   ( cAlias )->( dbappend() )
   If !NetErr()
      Return TRUE
   Endif

   Do While TRUE
      nSegundos++
      Inkey(1)

      ( cAlias )->( dbappend() )
      If !Neterr()
         Return TRUE
      Endif

      If nSegundos >= 5
         MsgAlert("No se puede actualizar el registro"+Chr(13)+;
                     "Reintentar nuevamente")
         nSegundos := 1
      Endif

   EndDo

EndCase

MsgStop("Código de seguridad. Tipo "+cTipo+" Alias "+( cAlias ) +chr(13)+;
"REPORTELO AL PROGRAMADOR")
Return FALSE

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM

¿Qué le ven de raro a este código?

Posted: Wed Oct 17, 2007 03:50 AM

Fleal, nose si los valores A y B son dados o si son basados en algo, pero si el valor entrado es diferente a alguno de estos 2 A y B, no lo validara el CASE y pasara directo al MSSTOP(), es lo unico que veo de extraño, faltaria saber de donde provienen los valores de la variable cTipo...

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM

¿Qué le ven de raro a este código?

Posted: Wed Oct 17, 2007 11:58 AM
Hola,

1. primero, no puedes bloquear el registro, entoces ingresas en el DO WHILE
2.- en el IF ( cAlias )->( DbRlock() ) sigue sin poder bloquearse
3.- pero justo despues del IF se libera el registro y entonces cuando vuelve a DO WHILE
ya no cumple la condicion y sale del DO WHILE, sale de CASE y va a lo que queda del codigo posterior al CASE

Do While ( cAlias )->( !DbRlock() )
nSegundos++
Inkey(1)

If ( cAlias )->( DbRlock() )
Return TRUE
Endif

If nSegundos >= 5
MsgAlert("No se puede actualizar el registro"+Chr(13)+;
"Reintentar nuevamente")
nSegundos := 1
Endif
EndDo
Posts: 234
Joined: Tue Oct 25, 2005 12:39 AM

Gracias

Posted: Fri Oct 19, 2007 12:08 PM

Gracias a todos por los comentarios.
He notado que de 12 DBFs en las que uso ésta función. Siempre falla en una sola. Entonces, voy a revisar por que solo falla en esa DBF

Fernando.

Continue the discussion