FoxPro/Visual FoxPro - Como se si la tabla esta en uso o no.

 
Vista:

Como se si la tabla esta en uso o no.

Publicado por Mauricio (61 intervenciones) el 16/11/2004 15:52:57
Deseo hacerle integridad a las tablas de mi programa (reindexar), obviamente las debo abrir como solo lectura.Pero si un usuario conectado al servidor esta usando el programa no lo puedo hacer. Como se si una tabla esta siendo usada por otro usuario. Ya que el used() me sirve solo para el mismo usuario, pregunta si el usuario que estaa abriendo en equipo1 esta usando pero no para los demas equipos si esta siendo usada esa tabla y flock() no me sirve. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como se si la tabla esta en uso o no.

Publicado por Roman Suazo (2723 intervenciones) el 16/11/2004 16:20:59
Haz la prueba con la funcion FILE()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como se si la tabla esta en uso o no.

Publicado por RICARDO (324 intervenciones) el 16/11/2004 16:26:40
CONTROLAS TU LO ERRORES
LNK = 0

ON ERROR LNK = 1
USE TABLA IN 0 EXCLU
IF LNK <> 0
NO LO HAGO
ELSE
LO HAGO
ENDIF
NO TE OLVIDES DE DEJAR EL CONTROL DE ERRORES COMO LO TUBIERAS ANTES
UN SALUDO

IF LNK <> 0
PUES NO LO PUEDES HACER
ELSE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como se si la tabla esta en uso o no.

Publicado por David Amador T. (12 intervenciones) el 04/12/2004 19:38:07
Debes hacerlo con funciones de bajo nivel como fOpen ... de la siguiente forma

nTab = fopen("tutabla.dbf", 12)

If nTab = -1
? "No se pudo abrir la tabla"
Else
? "abierta"
fclose(nTab)
EndIf
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como se si la tabla esta en uso o no.

Publicado por rolando (4 intervenciones) el 07/06/2017 18:56:16
agregando a lo que comenta el amigo DAVID AMADOR T. y como puedo determinar que usuario de RED es el que tiene abierto esa tabla..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Como se si la tabla esta en uso o no.

Publicado por Fidel José (657 intervenciones) el 07/06/2017 22:43:23
No resulta posible saber eso directamente. Lo que sí puedes hacer, es crear un registro de usuarios con una marca de activo.
Cada usuario que levanta el sistema se anota como usuario activo en esa tabla. Y en la rutina de salida del sistema, quita la marca de activo.
Luego mirando la tabla, puedes deducir cuántos y qué usuarios tengan tal vez abierta una o más tablas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como se si la tabla esta en uso o no.

Publicado por rolando (4 intervenciones) el 08/06/2017 00:06:12
Gracias por tu respuesta, amigo Fidel Jose.
Por casualidad y si no fuera molestia, tendras algun ejemplo para guiarme de como puedo hacer lo que me comentaste.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Como se si la tabla esta en uso o no.

Publicado por Fidel José (657 intervenciones) el 08/06/2017 20:31:48
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar