RE:Como se si la tabla esta en uso o no.
Básicamente es una tabla con cuatro campos:
Nombre_de_equipo (C), Fecha_hora_ingreso (T), fecha_hora_salida (T), Activo (L)
lcNombre_Equipo = STREXTRACT(SYS(0),""," #")
lcNombre_Usuario = STREXTRACT(SYS(0),"#","")
Antes de intentar modificaciones de tablas o reindexados (que necesitan uso exclusivo)
SELECT * FROM USUARIOS WHERE ACTIVO AND TRIM(NOMBRE_EQUIPO) # m.lcNombre_Equipo INTO CURSOR curUsuarios
IF _TALLY = 0
* No hay usuarios activos
ELSE
* BROWSE , O sea, mandas el cursor a un control grid y ya sabes quienes tienen el sistema abierto.
ENDIF
También necesitas una tabla en el servidor que sea abierta (SHARED) al inicio de la aplicación y se cierre en el SHUTDOWN. La tabla puede tener cualquier cosa, porque sirve solamente para verificar si realmente hay usuarios activos.
SELECT TB_CONTROL
USE
TRY
LOCAL loex as exception
USE TB_CONTROL IN O EXCLUSVIE && si no puede abrir en modo exclusivo, da error y salta al CATCH
&& si puede abrirla, ignora el CATCH
Messagebox("No hay nadie usando el sistema, salvo Usted")
CATCH TO loex
Messagebox("La tabla está en uso")
FINALLY
IF USED("TB_CONTROL")
USE IN TB_CONTROL
ENDIF
USE TB_CONTROL IN 0 SHARED
ENDTRY