Grabar en Red
Publicado por Gabriel Martin (41 intervenciones) el 19/02/2009 16:09:14
Muy buenas a todos:
En un programa en red, tengo la función con el fin de crear una numeración correlativa en el número de asientos contables. Esta funcíon el llamada justo en el momento de grabar el asiento:
FUNCTION ObtenAsiento()
Bloquea("Empresa")
aSient[1]:=Empresa->ASI+1
Empresa->ASI:=aSient[1]
Empresa->(DBUnlock())
RETURN (.T.)
donde Bloquea es:
FUNCTION Bloquea(cDbase)
DO WHILE .t.
IF (cDbase)->(RLOCK())
EXIT
ELSE
MsgAlert("Fichero Bloqueado por otro Usuario")
LOOP
ENDIF
ENDDO
RETURN (NIL)
El caso está en que trabanjando desde un ordenador, no hay problema, la variable aSient[1], se va sumando. No así cuando al mismo tiempo corren la misma aplicación en dos ordenadores diferentes.
Probé un Empresa->(DBCommit()), despues de Empresa->ASI:=aSient[1], pero me deja el fichero bloqueado, obligando a cerrar la aplicacion por completo.
Saludos y muchas gracias
Gabriel Martin. Mataró Spain
En un programa en red, tengo la función con el fin de crear una numeración correlativa en el número de asientos contables. Esta funcíon el llamada justo en el momento de grabar el asiento:
FUNCTION ObtenAsiento()
Bloquea("Empresa")
aSient[1]:=Empresa->ASI+1
Empresa->ASI:=aSient[1]
Empresa->(DBUnlock())
RETURN (.T.)
donde Bloquea es:
FUNCTION Bloquea(cDbase)
DO WHILE .t.
IF (cDbase)->(RLOCK())
EXIT
ELSE
MsgAlert("Fichero Bloqueado por otro Usuario")
LOOP
ENDIF
ENDDO
RETURN (NIL)
El caso está en que trabanjando desde un ordenador, no hay problema, la variable aSient[1], se va sumando. No así cuando al mismo tiempo corren la misma aplicación en dos ordenadores diferentes.
Probé un Empresa->(DBCommit()), despues de Empresa->ASI:=aSient[1], pero me deja el fichero bloqueado, obligando a cerrar la aplicacion por completo.
Saludos y muchas gracias
Gabriel Martin. Mataró Spain
Valora esta pregunta


0