SoloCodigo
Programación General => Visual FoxPro => Mensaje iniciado por: andres24hs en Martes 7 de Julio de 2009, 21:38
-
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
-
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!!