Karinha, gracias por contestar
Lo que me propones es lo mismo que hago yo, pero como en ocasiones se generaban registros vacios le agrege el movimiento del puntero en el area de trabajo y ahora en determinadas ocasiones (no se exactamento cual el la situación) se queda colgado en la orden (dbgoto)
Tengo verirficado que el sistema se queda colgado en esa instrucción. Supongo que desde otro terminal se hizo algo pero no acabo de tener claro es lo que deja mal el otro terminal.
Lo que si hago para que desde otro terminal no se esté agregando registros al mismo ficheroes la de establecer un semaforo con un fichero excluisvo para que dos terminales no puedan estar intentando agregar un registro en el mismo dbf en el mismo momento
Code: Select all
FUNCTION BloquearAltaRegistro(cAlias)
Memvar oEntorno
Local cSmf, nMani, nIntentos
cSmf := cPathDBF + cAlias + "_NWR.SMF"
nIntentos := 5
Do WHILE nIntentos > 0
nMani := FCREATE( cSmf, 0 )
If nMani != -1
RETURN nMani
EndIf
nIntentos--
ENDDO
RETURN nMani
//------------------------------------------------------------------------//
FUNCTION DesBloquearAltaRegistro(nMani, cAlias)
Memvar oEntorno
Local cSmf
fclose(nMani)
cSmf := oEntorno:cPathSmf + cAlias + "_NWR.SMF"
ferase(cSmf)
RETURN NIL
Code: Select all
nSmf := BloquearAltaRegistro(cAlias)
If nSmf == NIL
return .F.
EndIf
lSalida := AgregaRegistro(cAlias, lUnlock, nVeces)
DesBloquearAltaRegistro(nSmf, cAlias)
Un saludo