Compartir a través de


Almacenar datos en búfer

Si desea proteger los datos durante las actualizaciones, utilice búferes. El almacenamiento en búfer de registros y tablas de Visual FoxPro ayuda a proteger las operaciones de mantenimiento y actualización de datos en registros individuales y múltiples registros de datos en entornos multiusuario. Los búferes pueden comprobar, bloquear y liberar automáticamente registros o tablas.

Mediante el almacenamiento en búfer es posible detectar y resolver fácilmente conflictos en operaciones de actualización de datos: el registro actual se copia a una ubicación de memoria o de disco administrada por Visual FoxPro. Los demás usuarios podrán seguir teniendo acceso al registro original simultáneamente. Cuando se desplace fuera del registro o intente actualizarlo mediante programación, Visual FoxPro intentará bloquear el registro, comprobará que otros usuarios no hayan realizado cambios y, a continuación, escribirá las modificaciones. Después de intentar actualizar los datos, deberá resolver los conflictos que impiden que las modificaciones se escriban en la tabla original.

Elegir un método de almacenamiento en búfer

Antes de activar el almacenamiento en búfer, evalúe el entorno de datos para elegir el método de almacenamiento en búfer y las opciones de bloqueo que mejor se ajusten a las necesidades de edición de la aplicación, los tipos y tamaños de registros y tablas, y cómo se utiliza y actualiza la información, entre otros factores. Una vez activado el almacenamiento en búfer, permanecerá en vigor hasta que lo desactive o hasta que cierre la tabla.

Visual FoxPro dispone de dos tipos de almacenamiento en búfer: registro y tabla.

Almacenamiento en búfer de registros y tablas de Visual FoxPro

  • Para tener acceso, modificar y escribir un registro individual cada vez, elija el almacenamiento de registros en búfer.

    El almacenamiento de registros en búfer proporciona la validación del proceso adecuado con una repercusión mínima sobre las operaciones de actualización de datos que realizan otros usuarios en un entorno multiusuario.

  • Para almacenar en búfer las actualizaciones a varios registros, elija el almacenamiento de tablas en búfer.

    El almacenamiento de tablas en búfer es el modo más efectivo de administrar varios registros de una tabla o registros secundarios en una relación de uno a varios.

  • Para proporcionar la máxima protección para los datos existentes, utilice transacciones de Visual FoxPro.

    Las transacciones pueden utilizarse por sí solas, pero obtendrá una mayor efectividad si las emplea como empaquetadores para comandos de almacenamiento en búfer de tablas o registros.

Elegir un modo de bloqueo

Visual FoxPro proporciona almacenamiento en búfer en dos modos de bloqueo: pesimista y optimista. Estas opciones determinan cuándo se bloquean uno o más registros y cuándo y cómo se liberan.

Almacenamiento en búfer pesimista

El almacenamiento en búfer pesimista impide que otros usuarios de un entorno multiusuario tengan acceso a un determinado registro o tabla mientras usted realiza cambios en el mismo. Un bloqueo pesimista proporciona el entorno más seguro para cambiar registros individuales, aunque puede hacer más lentas las operaciones del usuario. Este modo de almacenamiento en búfer es bastante similar al mecanismo de bloqueo estándar de versiones anteriores de FoxPro, con la ventaja adicional del almacenamiento en búfer de datos integrados.

Almacenamiento en búfer optimista

El almacenamiento en búfer optimista es un modo eficaz de actualizar registros ya que los bloqueos sólo se realizan en el momento en que se escribe el registro, minimizando de este modo el tiempo que un único usuario monopoliza el sistema en un entorno multiusuario. Cuando utilice el almacenamiento en búfer de registros o tablas para vistas, Visual FoxPro impondrá el bloqueo optimista.

El valor de la propiedad Buffering, establecido mediante la función CURSORSETPROP( ) determina los métodos de almacenamiento en búfer y de bloqueo.

En la tabla siguiente se resumen los valores válidos para la propiedad Buffering:

Para activar Utilice este valor
Sin almacenamiento en búfer. El valor predeterminado. 1
Bloqueos pesimistas de registros que bloquean el registro ahora y actualizan cuando el puntero se mueve o se ejecuta TABLEUPDATE( ). 2
Bloqueos optimistas de registros que esperan hasta que el puntero se mueve y después bloquean y actualizan. 3
Bloqueos pesimistas de tablas que bloquean el registro ahora y actualizan posteriormente al ejecutarse TABLEUPDATE( ). 4
Bloqueos optimistas de tablas que esperan hasta TABLEUPDATE( ) para bloquear y actualizar los registros modificados. 5

El valor predeterminado de Buffering es 1 para las tablas y 3 para las vistas. Si utiliza el almacenamiento en búfer para tener acceso a datos remotos, la propiedad Buffering tendrá un valor 3, almacenamiento optimista de filas en búfer o 5, almacenamiento optimista de tablas en búfer. Para obtener más información acerca del acceso a datos de tablas remotas, consulte Consultar múltiples tablas y vistas.

Nota   Establezca MULTILOCKS como ON para todos los modos de almacenamiento en búfer por encima de 1.

Activar el almacenamiento de registros en búfer

Habilite el almacenamiento de registros en búfer mediante la función CURSORSETPROP( ).

Para activar el bloqueo pesimista de registros en el área de trabajo actual

  • Utilice esta función y este valor:

    CURSORSETPROP("Buffering", 2)
    

Visual FoxPro intenta bloquear el registro en la ubicación del puntero. Si el bloqueo tiene éxito, Visual FoxPro situará el registro en un búfer y permitirá su modificación. Cuando mueva el puntero de registro o ejecute el comando TABLEUPDATE( ), Visual FoxPro escribirá el registro almacenado en búfer en la tabla original.

Para activar el bloqueo optimista de registros en el área de trabajo actual

  • Utilice esta función y este valor:

    CURSORSETPROP("Buffering", 3) 
    

Visual FoxPro escribe en un búfer el registro situado en la ubicación del puntero y permite modificaciones. Cuando mueva el puntero de registro o ejecute el comando TABLEUPDATE( ), Visual FoxPro intentará un bloqueo del registro. Si se produce el bloqueo, Visual FoxPro comparará el valor actual del registro en el disco con el valor original del búfer. Si ambos valores son iguales, las modificaciones se escribirán en la tabla original; si los valores son distintos, Visual FoxPro generará un error.

Activar el almacenamiento de tablas en búfer

Habilite el almacenamiento de tablas en búfer mediante la función CURSORSETPROP( ).

Para activar el bloqueo pesimista de múltiples registros en el área de trabajo actual

  • Utilice esta función y este valor:

    CURSORSETPROP("Buffering", 4) 
    

Visual FoxPro intenta bloquear el registro en la ubicación del puntero. Si el bloqueo tiene éxito, Visual FoxPro situará el registro en un búfer y permitirá su modificación. Utilice el comando TABLEUPDATE( ) para escribir en la tabla original los registros almacenados en búfer.

Para activar el bloqueo optimista de múltiples registros en el área de trabajo actual

  • Utilice esta función y este valor:

    CURSORSETPROP("Buffering", 5)
    

Visual FoxPro escribe los registros en un búfer y permite modificarlos hasta que se ejecute un comando TABLEUPDATE( ). A continuación, Visual FoxPro llevará a cabo la siguiente secuencia en cada registro del búfer:

  • Intenta un bloqueo en cada registro modificado.
  • Cuando realiza el bloqueo, compara el valor actual de cada registro del disco con el valor original del búfer.
  • Escribe las modificaciones en la tabla original si la comparación indica que ambos valores son iguales.
  • Genera un error si los valores son distintos.

Cuando se activa el almacenamiento de tablas en búfer, Visual FoxPro sólo intentará realizar actualizaciones después de que se ejecute el comando TABLEUPDATE( ).

Agregar y eliminar registros de búferes de tablas

Puede anexar y eliminar registros mientras está activado el almacenamiento de tablas en búfer: los registros anexados se agregan al final del búfer. Para tener acceso a todos los registros del búfer, incluidos los registros anexados, utilice la función RECNO( ). La función RECNO( ) devuelve números negativos secuenciales para los registros que usted anexe a un búfer de tabla. Por ejemplo, si inicia el almacenamiento de tablas en búfer, modifica los registros 7, 8 y 9, y a continuación anexa tres registros, el búfer contendrá valores RECNO( ) de 7, 8, 9, – 1, – 2 y – 3.

Búfer después de modificar y anexar registros

Sólo podrá quitar del búfer registros anexados si utiliza el comando TABLEREVERT( ). Para cualquier registro anexado, TABLEUPDATE( ) y TABLEREVERT( ) eliminan el valor negativo de RECNO( ) para ese registro y mantienen la secuencia.

Búfer después de modificar, eliminar un registro anexado y anexar otro

Mientras utiliza un búfer de tabla, puede usar el comando GO con el valor negativo de RECNO( ) para tener acceso a un determinado registro anexado. Por ejemplo, utilizando el ejemplo anterior, puede escribir:

GO 7      && moves to the 1st buffered record
GO -3      && moves to the 6th buffered record (3rd appended)

Agregar registros a un búfer de tabla

  • Utilice el comando APPEND o APPEND BLANK después de habilitar el almacenamiento de tablas en búfer.

Los registros anexados tienen números de RECNO( ) negativos y secuenciales en sentido ascendente.

Para quitar un registro anexado de un búfer de tabla

  1. Utilice el comando GO con un valor negativo para situar el puntero de registro en el registro que desea eliminar.

  2. Utilice el comando DELETE para marcar el registro para su eliminación.

  3. Utilice el comando TABLEREVERT( ) para quitar el registro del búfer.

    Nota   La función TABLEREVERT( ) también afecta al estado de las filas eliminadas o modificadas.

Para quitar todos los registros anexados de un búfer de tabla

TABLEREVERT( ) quita de un búfer de tabla los registros anexados sin escribir los registros en la tabla. TABLEUPDATE( ) escribe en una tabla todos los registros que están almacenados en búfer, aunque se hayan marcado para su eliminación.

Vea también

Usar sesiones de datos | Actualizar datos | Programar para acceso compartido | Controlar el acceso a datos | CURSORSETPROP( )