Administrar conflictos
Cuando elija el almacenamiento en búfer, transacciones o vistas, debe administrar los conflictos que puedan surgir durante el proceso de actualización.
Administrar conflictos en el almacenamiento en búfer
Puede hacer que las operaciones de actualización de datos sean más eficientes si elige cuidadosamente cómo y cuándo abrir, almacenar en búfer y bloquear datos en un entorno multiusuario. Deberá limitar el tiempo que un registro o una tabla están sometidos a conflictos de acceso. A pesar de todo, tendrá que anticiparse a los conflictos que se producen de forma inevitable y administrarlos. Un conflicto se produce cuando un usuario intenta bloquear un registro o una tabla que ya ha bloqueado otro usuario. Dos usuarios no pueden bloquear el mismo registro o la misma tabla a la vez.
La aplicación deberá contener una rutina para administrar estos conflictos. Si la aplicación no tiene una rutina de conflictos, el sistema puede quedar bloqueado. Se produce un interbloqueo cuando un usuario ha bloqueado un registro o una tabla e intenta bloquear otro registro ya bloqueado por un segundo usuario que, a su vez, está intentando bloquear el registro bloqueado por el primer usuario. Aunque esto no suele ocurrir, cuanto más tiempo permanezca bloqueado un registro o una tabla, mayores posibilidades habrá de que se produzca un interbloqueo.
Detectar errores
Diseñar una aplicación multiusuario o agregar soporte de red a un sistema de un solo usuario exige interceptar colisiones y errores. El uso de los búferes de registro y tabla de Visual FoxPro simplifica parte de este trabajo.
Si intenta bloquear un registro o una tabla que ya están bloqueados por otro usuario, Visual FoxPro devolverá un mensaje de error. Puede utilizar SET REPROCESS para resolver automáticamente los intentos fallidos de bloqueo. Este comando, en combinación con una rutina ON ERROR y el comando RETRY permite continuar o cancelar los intentos de bloqueo.
El ejemplo siguiente demuestra el reprocesamiento automático de una operación fallida mediante SET REPROCESS.
Ejemplo del uso de SET REPROCESS y ON ERROR para administrar colisiones de usuarios
Código | Comentarios |
---|---|
|
Esta rutina se ejecuta si se produce un error. Abre los archivos de forma no exclusiva. El reprocesamiento de bloqueos fallidos es automático. Abra la tabla. Si es necesario, crea la tabla APPEND FROM. |
|
La rutina principal comienza aquí. Estos comandos son ejemplos de los códigos que podrían ejecutarse en el curso del programa. |
|
La rutina principal termina aquí. |
|
Rutina que anexa un registro en blanco. |
|
Rutina que reemplaza los datos del registro actual. |
|
Rutina que reemplaza los datos de todos los registros. |
|
Rutina que reemplaza los datos del registro actual. |
|
Rutina que anexa registros de otro archivo. |
El ejemplo siguiente muestra un procedimiento de error que se inicia cuando el usuario presiona ESC.
Ejemplo de control de errores mediante la tecla ESC
Código | Comentarios |
---|---|
|
Este programa se activa cuando surge un error y el usuario sale del proceso de espera. |
|
Averigua de qué tipo de error se trata. ¿Es "Otra persona está utilizando el archivo"? |
|
|
|
¿O bien, "Otra persona está usando el registro"? |
|
¿O es desconocido? |
|
Muestra el mensaje de error en un cuadro de diálogo con un signo de exclamación y un botón "Aceptar". |
Vea también
Administrar actualizaciones mediante vistas | Detectar y resolver conflictos | Programar para acceso compartido | SET REPROCESS | ON ERROR | RETRY