• Sábado 21 de Diciembre de 2024, 11:47

Autor Tema:  comandos exclusivo usados en modo compartido  (Leído 1488 veces)

andres24hs

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
comandos exclusivo usados en modo compartido
« en: Martes 7 de Julio de 2009, 21:38 »
0
Hola:
tengo un sistema de gestion comercial que trabaja en red. El problema que tengo es cuando quiero utilizar comandos que requieren uso exlusivo de la tabla (ej Zap, Pack, etc) Yo cierro la tabla y la abro con set exclusive on, pero si otro usuario la abrio de modo shared me da error. Como hago saber si otro usuario abrio el archivo en modo no exclusivo.
Gracias

xodrf

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: comandos exclusivo usados en modo compartido
« Respuesta #1 en: Viernes 17 de Julio de 2009, 15:17 »
0
bueno yo te cuento como yo lo hago, yo no utilizo el entorno de datos de los formularios y/o reportes en cambio utilizo un objeto que he creado para la apertura de las tablas que es este:

*//////////////////////////////////////////////////////////////////////////////
*//      DEFINICION DE CLASE P/ERRORES DE RED
*//////////////////////////////////////////////////////////////////////////////
DEFINE CLASS _XioNet AS CUSTOM
   _Tloop=.F.         &&TRY LOOP OR FAIL
   _Tsuccess=.F.      &&SUCCESS OR FAILED
   *//////////////////////////////////////////////////////////
   FUNCTION XOPEN( _Xname, _Xalias, _Xarea, _Xaccess, _Xloop )
   *//////////////////////////////////////////////////////////
      IF PARAMETERS()!=5
         MESSAGEBOX( [WPARAMETERS], 16, [ERROR] )
         THIS._Tsuccess=.F.
         RETURN (THIS._Tsuccess)
      ENDIF
      WITH THIS
         ._Tloop=_Xloop
         ._Tsuccess=.T.
      ENDWITH
      DO CASE
         CASE _Xaccess=="1"
            USE (_Xname) IN (_Xarea) ALIAS (_Xalias) EXCLUSIVE
         CASE _Xaccess=="2"
            USE (_Xname) IN (_Xarea) ALIAS (_Xalias) SHARED
         CASE _Xaccess=="3"
            USE (_Xname) IN (_Xarea) ALIAS (_Xalias) SHARED NOUPDATE
      ENDCASE
      RETURN (THIS._Tsuccess)
   ENDFUNC   
   *///////////////////////////////////////
   FUNCTION ERROR( nError, cMethod, nLine )
   *///////////////////////////////////////
      IF THIS._Tloop
         MESSAGEBOX( [ACCESO DENEGADO], 16, [WARNING] )
         RETRY
      ENDIF
      THIS._Tsuccess=.F.
   ENDFUNC
   */////////////////
   FUNCTION _R_LOCK()
   */////////////////
   DO WHILE !RLOCK()
      MESSAGEBOX( [FALLO DE BLOQUEO], 16, [WARNING] )
   ENDDO
   RETURN .T.
   ENDFUNC
   */////////////////
   FUNCTION _F_LOCK()
   */////////////////
   DO WHILE !FLOCK()
      MESSAGEBOX( [FALLO DE BLOQUEO], 16, [WARNING] )
   ENDDO
   RETURN .T.
   ENDFUNC   
ENDDEFINE




esta clase debes crearlo e instanciarlo en tu programa principal con atributo publico
ej:
PUBLIC _xopen
_xopen=CreateObject( "_XioNet" )

una vez hecho esto para abrir tus tablas en tu formulario por ejemplo en el metodo THISFORM.INIT() tipeas esto
XMODOAPERTURA="1" &&1->MODO EXCLUSIVO 2->MODO COMPARTIDO 3->SOLO LECTURA
XLOOP=.F.                  &&.F. HACE EL INTENTO UNA VEZ, .T. QUEDA EN UN BUCLE QUE REINTENTA HASTA LOGRAR O
                                  &&HASTA QUE EL OTRO USUARIO SUELTE LA TABLA EN CUESTION
IF !_XOPEN.XOPEN( "C:MITABLA.DBF", "MIALIAS", 0, XMODOAPERTURA, XLOOP )
      MESSAGEGOX( "FALLO LA APERTURA DE MITABLA.DBF", 16, "ERROR" )
       RETURN .F.
ENDIF

HECHO EN VISUAL FOX 6.0
BUENA SUERTE!!