La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1099 - DETERMINAR SI UNA TABLA ESTA SIENDO UTILIZADA
Autor:  Javier Amoros
PARA VISUAL FOXPRO 5.0 - ¿Como puedo saber ANTES de abrirla, si una tabla esta siendo usada por otro usuario?

Tengo una aplicacion en red, y una de las utilidades es REINDEXAR tablas, para ello, necesito tener acceso EXCLUSIVO sobre ellas, y mi idea es que si la tabla ya esta siendo usada, ignorarla y pasar a la siguiente, y al final del proceso, indicar que tablas no han podido ser reindexadas por estar en uso en alguna otra maquina / usuario.
Gracias de antemano.


  Respuesta:  eye2
Hola:
UNa manera simple de saber si la tabla está siendo utilizada por otro usuario sería usar las rutinas de control de errores. por ejemplo, si no me equivoco al intertar abrir con EXCLUSIVE tiene el número de error 1705. Proba con esto:
ON ERROR DO QueHacer WITH ERROR()
USE miTabla EXCLUSIVE
ON ERROR

PROCEDURE QueHacer
LPARAMETERS nro_error

?"Este el el nº de error al querer abrir con EXCL"+STR(nro_error)

RETURN

Cualquier duda escribime, y si encontras un método más eficiente, también comunicamelo.
chau ... eye

  Respuesta:  Jose Maria Arrabal
Tienes dos formas de controlarlo:

- Primera:
Gestionando un manejador de Errores. El error 1705 te indica que la tabla no está disponible para uso exclusivo.

nErrorenTabla=.f.
ON ERROR DO gestionError WITH Error()
USE Tabla EXCLUSIVE
IF !nErrorenTabla
REINDEX
ENDIF
ON ERROR

Proc GestionError
PARAM nError
IF nError=1705
nErrorenTabla=.t.
ENDIF
RETURN

- Segunda Forma
Tener una tabla auxiliar en la cual tengamos una referencia al nombre de la tabla y el numero de usuarios conectados a ella.

Espero que te sirva de ayuda.


  Respuesta:  Nora Chauca
Hola..!

Si deseas sabes si una tabla esa en uso puedes utilizar el comando Used(´xxxxx´), donde xxxxx es el nombre de la tabla si la respuesta es .T. es que esta en uso.

Bye,BYe