La Web del Programador: Comunidad de Programadores
 
    Pregunta:  7327 - PROTEGER LA BASE DE DATOS AL INDEXAR
Autor:  Ricardo Latin Corado
Amigos, he elaborado un sistema que trabaja en red, utilizo aproximadamente 10 archivos con sus respectivos índices, cada vez que se carga el programa, éste verifica si ya existen los indices, de lo contrario los crea; qué puedo hacer para evitar que otro usuario ingrese en el momento que el anterior inicio el proceso de indexamiento. Ya que de lo contrario el que ingreso despues dañaría los índices.
Nota: Los PC\'s, en la red usan windows/98 y red Microsoft.

De antemano agradezco cualquier ayuda o comentario, éxitos a todos...

  Respuesta:  Sergio Espino
Ricardo:
La idea que te sugiero es que uses una función que permita abrir la base de datos en forma exclusiva o no, de tal forma que si el usuario está queriendo ingresar cuando el sistema está reconstruyendo índices, le indique un mensaje de imposibilidad de leer la base en ese momento.
Ej:
Function AbrirBase(nombre_DataBse,exclusivo)
if Exclusivo
Use nombre_DataBase EXCLUSIVE
Return(.t.)
else
Mensaje_de_error("Reconsutruyendo
indices...espere")
Return(.f.)
....
....
* Tambien debes ´preveer la lógica para abrir en modo SHARED


Function Indexar(Nombre_DataBase,....)

AbrirBase(Nombre_Database, .t.)
Index on .... to ...

....
Return(.t.)

Function DeLaAplicación_Del_Usuario()
....
....
AbrirBase(DataBase, .f.)
Do While .....
etc....

  Respuesta:  Gerardo A. Mendoza
Hola Ricardo!

Una solución es que preguntes si la función NetErr() retorna verdarero entones hay error y presentar un mensaje donde le dices que no puede abrir la tabla (.dbf) que espero un tiempo y que lo intente de nuevo. Por otro lado puesde abrir todas las bases de datos en forma exclusiva, si no hay error entonces a los demás usuarios les va a dar error que te comento puedes validar. Y vas indexando tabla por tabla, al final cierras todas las tablas y con eso le vas a permitir a los demás entrar al sistema.
Por otro lado puesde tener una tabla con un campo numerico, donde =0 es que no hay usuaris, >0 es que hay usuarios y pensemos que -1 es que está el proceso de indexación, así al entrar al sistema lo primero que hace es leer este campo y validar su contenido, el único problema es que al finalizar la aplicación debería decrementar el campo, pero que pasa si termina anormal, algún error, que Win se quedo sin responder, que el usaurio cerro la ventana.
Bueno espero que de algo te sirvan estos comentarios!!!