FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Rutina para asegurarse que agrega un registro
Posts: 234
Joined: Tue Oct 25, 2005 12:39 AM
Rutina para asegurarse que agrega un registro
Posted: Wed Jun 11, 2008 12:34 AM

驴Qu茅 est谩 mal en este c贸digo?
Me reportan que a veces sale el msgalert y no guarda el registro nuevo con la informaci贸n.

驴Alguien tiene una funci贸n para asegurarse de que se ha agregado o bloqueado para actualizar el registro ?

Gracias.

La llamo de esta manera

Seguro( ( EMPLEADO ), "A" )
..............

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

Do Case
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

Return FALSE

Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Rutina para asegurarse que agrega un registro
Posted: Wed Jun 11, 2008 02:17 AM

Por lo que veo, en caso de tener un problema, se queda en un loop infinito, nunca sale del bucle DO WHILE si hay un NetErr() verdadero y puede que tu cliente cancele el programa creyendo que se colgo el sistema.
El otro problema que podes tener es que envies mal el parametro, que en lugar de enviar "A" envies otra cosa y por eso no entra en el DO CASE y no da ningun mensaje y se va.
Eso es lo unico que veo.
Espero que te sirva

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Rutina para asegurarse que agrega un registro
Posted: Wed Jun 11, 2008 03:34 AM
fleal wrote:驴Qu茅 est谩 mal en este c贸digo?
Me reportan que a veces sale el msgalert y no guarda el registro nuevo con la informaci贸n.


驴Alguien tiene una funci贸n para asegurarse de que se ha agregado o bloqueado para actualizar el registro ?

Gracias.


La llamo de esta manera

Seguro( ( EMPLEADO ), "A" )
..............


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

Do Case
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

Return FALSE


REVISA LOS TIPS DE LAS LINEAS:

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

Do Case
Case cTipo == "A"

( cAlias )->( dbappend() ) // DEBERIAS ABRIR SOLO DENTRO DEL DO WHILE...
If !NetErr() // ACA SI NO CONSIGUE ERROR SE DEVUELVE Y NO ENTRA EN EL DO WHILE...ASI NO ENTRA A GRABAR...
Return TRUE
Endif

Do While TRUE
nSegundos++
Inkey(1)

( cAlias )->( dbappend() )
If !Neterr() // ACA SI NO CONSIGUE ERROR SE DEVUELVE Y NO ENTRA EN EL DO WHILE...ASI NO ENTRA A GRABAR...
Return TRUE
Endif

If nSegundos >= 5 // COMO DICE EL COLEGA, LO ESTAS DEJANDO EN UN CICLO INDEFINIDO POR QUE NO HAY SALIDA EL WHILE
MsgAlert("No se puede actualizar el registro"+Chr(13)+;
"Reintentar nuevamente")
nSegundos := 1
Endif

EndDo

EndCase

Return FALSE

Te recomiendo uses la clase TDATABASE, puedes controlar mejor el grabado de registro...si te interesa te mando un ejemplo a tu privado...cualquier duda no dudes en preguntar, aca nos ayudamos. :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Rutina para asegurarse que agrega un registro
Posted: Wed Jun 11, 2008 03:50 AM

Un comentario que me pas贸 hace a帽os con clipper, no se si (x)harbour tenga el mismo efecto, cuando haces un dbAppend() y no has guardado el registro marca error al querer hacer otro dbAppend()

por ejemplo

append blank
( proceso )
replace ....
commit

Si alguien intenta hacer un un dbAppend() mientras otro usuario est谩 en el bloque de ( proceso ) le marca error.

Saludos

Quique
Posts: 15
Joined: Sat Nov 26, 2005 01:06 AM
Rutina para asegurarse que agrega un registro
Posted: Sat Jun 14, 2008 01:19 AM

A ver si te sirve..

Static Function GuardaXX()
Local nRegistro:=Recno()
IF lGuarda
IF lEsAlta
NewRecord()
ENDIF
IF !recordLock()
XX->XX:=oGets[1]
XX->YY:=oGets[2]
End
dbUnlock()
IniXX()
lGuarda:= .F.
lEsAlta:=.F.
lEsModi:=.F.
dbgoto(nRegistro)
ENDIF

Return .T.

function NewRecord
DBAPPEND()
if NetErr()
MsgInfo("Error: No puede crear un Nuevo registro","Confirma")
return .F.
endif

return .T.

Saludos

Desde la Ciudad de Mexico.

Nazario Salazar



Saludos.

Continue the discussion