Base de Datos Abiertas

Como estas mucho gusto, te escribo para preguntarte lo siguiente como puedo enviar un mensaje al usuario cuando trate de correr la opción de reindex que las tablas están abiertas por otro usuario, tengo una aplicación que valida y reindexa los archivos pero no he podido validar si otro usuario esta dentro del sistema y me genera un error muy feo, quisiera algo más elegante como La Base de Datos esta Ocupada en este momento intente más tarde y salga al sistema normalmente Saludos
Nelson l. Zamudio

2 respuestas

Respuesta
1
Tienes 2 opciones:
La 1º Opción:
Se le clientes
IF FLOCK()
...
...
UNLOCK
ELSE
MESSAGEBOX("La tabla Clientes está siendo usada.")
Endif
Al preguntar IF FLOCK() pregunto si la tabla esta bloqueada, si no esta bloqueada la bloquea para que solo un usuario pueda trabajar en una inserción, actualización, o en tu caso un reindex. En el caso de que la tabla se bloquee, luego de que termines de trabajar con la tabla debes desbloquearla (UNLOCK) para que otros usuarios puedan trabajar con ella. En el caso que al preguntar IF FLOCK() la tabla este bloqueada por otro usuario entrara por el ELSE y allí podrías poner un mensaje que diga que otro usuario esta usando la tabla, que intente en unos segundos. Esta trabajito tendrías que hacer en cada parte del código donde tengas una actualización, inserción, o un reindex; si el usuario solo quiere leer datos no hay problema que la tabla este bloqueada, los muestra lo mismo.
La 2º Opción:
Tendrías que poner esto antes de hacer el reindex
ON ERROR DO errores
Luego el código donde haces el reindex, luego de este código tendrías que poner esto:
On error
Que sirve para restaurar el controlador de errores de Fox y por ultimo tendrías que poner esto
PROCEDURE errores
...
...
...
RETRY
Dentro del PROCEDURE tendrías que poner el mensaje de advertencia que la tabla esta abierta que intente en unos segundos. El RETRY Vuelve a ejecutar desde la línea donde se produzco el error.
Respuesta
1
Intenta con algo similar a:
IF !FLOCK("MiTabla")
MESSAGEBOX("La tabla está ocupada en este momento, favor de intentar más tarde.")
ELSE
USE MiTabla IN MiTabla UNIQUE
REINDEX
USE MiTabla IN MiTabla SHARED
Endif
... bueno, eso digo yo.
Víctor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas