¿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
Rutina para asegurarse que agrega un registro
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
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
- joseluisysturiz
- Posts: 2024
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Rutina para asegurarse que agrega un registro
REVISA LOS TIPS DE LAS LINEAS: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
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!
Gracias a mi Dios ante todo!
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.
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
Quique
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
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