Hola Lista :
Hector , Jose Maria , muchas gracias por responder , les pego las rutinas que uso para controlar la red .
Me sugieren que no utilize el add_rec(0) o bien que lo use junto con el Rlock() o con Flock() ?
Saludos Mario Mansilla
*-----------------
* FUNCIONES DE RED
*-----------------
* FUNCIONES DE RED
*-----------------
# INCLUDE "COMMON.CH"
# DEFINE NET_SECS 2
# DEFINE NET_WAIT 0.5
# DEFINE NET_WAIT 0.5
*----------------------------------------------------
FUNCTION Net_File(Archivo,Seleccion,Espere,Exclusivo)
*----------------------------------------------------
FUNCTION Net_File(Archivo,Seleccion,Espere,Exclusivo)
*----------------------------------------------------
Local Pantalla
If !Empty(Seleccion)
Select &Seleccion
Endif
Select &Seleccion
Endif
If (File(Archivo))
If Exclusivo
Use (Archivo) Exclusive
Else
Use (Archivo) Shared
Endif
If (!NetErr())
If (Fil_Lock(Espere))
Return .T.
Else
Pantalla := Savescreen(10,20,14,60)
@ 10,20,14,60 Box caj_simple
@ 10,22 Say "[ Mensaje de sistema ]"
@ 12,22 Say Padc("!! Archivo " + Archivo + " en uso exclusivo !!",36)
Inkey(0)
Restscreen(10,20,14,60,Pantalla)
Return .F.
Endif
Endif
Endif
If Exclusivo
Use (Archivo) Exclusive
Else
Use (Archivo) Shared
Endif
If (!NetErr())
If (Fil_Lock(Espere))
Return .T.
Else
Pantalla := Savescreen(10,20,14,60)
@ 10,20,14,60 Box caj_simple
@ 10,22 Say "[ Mensaje de sistema ]"
@ 12,22 Say Padc("!! Archivo " + Archivo + " en uso exclusivo !!",36)
Inkey(0)
Restscreen(10,20,14,60,Pantalla)
Return .F.
Endif
Endif
Endif
Pantalla := Savescreen(10,20,14,60)
@ 10,20,14,60 Box caj_simple
@ 10,22 Say "[ Mensaje de sistema ]"
@ 12,22 Say Padc("!! Archivo " + Archivo + " en uso !!",36)
Inkey(0)
Restscreen(10,20,14,60,Pantalla)
@ 10,20,14,60 Box caj_simple
@ 10,22 Say "[ Mensaje de sistema ]"
@ 12,22 Say Padc("!! Archivo " + Archivo + " en uso !!",36)
Inkey(0)
Restscreen(10,20,14,60,Pantalla)
Return .F.
*------------------------
FUNCTION Fil_Lock(Espero)
*------------------------
Local Forever
Default Espero To NET_SECS
If (Flock())
Return .T.
Endif
Return .T.
Endif
Forever := (Espero = 0)
Do While (Forever .Or. (Espero > 0))
Inkey(0.5)
Espero := Espero - 0.5
If Flock()
Return .T.
Endif
Enddo
Inkey(0.5)
Espero := Espero - 0.5
If Flock()
Return .T.
Endif
Enddo
Return .F.
*------------------------
FUNCTION Rec_Lock(Espero)
*------------------------
Local Pantalla
Local Color
Local Forever
Local Color
Local Forever
Default Espero To NET_SECS
If (Rlock())
Return .T.
Endif
Return .T.
Endif
Forever := (Espero = 0)
Do While (Forever .Or. (Espero > 0))
Pantalla := SaveScreen(16,18,18,62)
Color := Setcolor()
Setcolor(c_mensaje)
@ 16,18,18,62 BOX Caj_Simple
@ 17,21 SAY PADC("Intentando bloquear registro",39)
Inkey(0.5)
Setcolor(Color)
RestScreen(16,18,18,62,Pantalla)
Espero := Espero - 0.5
If Rlock()
Return .T.
Endif
Enddo
Pantalla := SaveScreen(16,18,18,62)
Color := Setcolor()
Setcolor(c_mensaje)
@ 16,18,18,62 BOX Caj_Simple
@ 17,21 SAY PADC("Intentando bloquear registro",39)
Inkey(0.5)
Setcolor(Color)
RestScreen(16,18,18,62,Pantalla)
Espero := Espero - 0.5
If Rlock()
Return .T.
Endif
Enddo
Return .F.
*-------------------------
FUNCTION Add_Rec( Espero )
*-------------------------
LOCAL lForever // Retry forever?
FUNCTION Add_Rec( Espero )
*-------------------------
LOCAL lForever // Retry forever?
DEFAULT Espero TO NET_SECS
APPEND BLANK
IF !NETERR()
RETURN ( .T. )
ENDIF
IF !NETERR()
RETURN ( .T. )
ENDIF
lForever := ( Espero == 0 )
DO WHILE ( lForever .OR. ( Espero > 0 ) )
APPEND BLANK
APPEND BLANK
IF !NETERR()
RETURN ( .T. )
ENDIF
RETURN ( .T. )
ENDIF
INKEY( 0.5 )
nWaitSeconds -= 0.5
nWaitSeconds -= 0.5
ENDDO
RETURN ( .F. )
*------------------------------------------------
FUNCTION NetUse( cDatabase, lOpenMode, nSeconds )
*------------------------------------------------
LOCAL lForever
DEFAULT nSeconds TO NET_SECS
lForever := ( nSeconds == 0 )
DO WHILE ( lForever .OR. ( nSeconds > 0 ) )
IF lOpenMode
USE ( cDatabase ) EXCLUSIVE
ELSE
USE ( cDatabase ) SHARED NEW
ENDIF
IF lOpenMode
USE ( cDatabase ) EXCLUSIVE
ELSE
USE ( cDatabase ) SHARED NEW
ENDIF
IF !NETERR()
RETURN ( .T. ) // NOTE
ENDIF
RETURN ( .T. ) // NOTE
ENDIF
INKEY( NET_WAIT ) // Wait
nSeconds -= NET_WAIT
@ 01,01 Say "Intentado abrir : " + cdatabase
ENDDO
nSeconds -= NET_WAIT
@ 01,01 Say "Intentado abrir : " + cdatabase
ENDDO
RETURN ( .F. )