Antes (en FoxPro), para que el usuario pueda guardar o bien anular cambios, el programador tenía que hacer un complicado juego con variables. En Visual FoxPro, se puede trabajar en una forma mucho más simple, con "Buffering". La idea es que Visual FoxPro mantiene un buffer con los cambios pendientes.
El programador puede hacer modificaciones "directamente en los campos" (así parece a primera vista), haciendo REPLACE en un campo, o haciendo que la propiedad ControlSource de un control (ver: controles) sea un campo.
Luego, si el usuario hace click en un botón "anular", con la orden TableRevert() se pueden revertir los cambios.
Por otra parte, si el usuario hace click en un botón "grabar", con la orden TableUpdate() se confirman los cambios. Conviene verificar si el TableUpdate() ha sido exitoso, ya que puede fallar por varios motivos. Los motivos más comunes caen en dos categorías: 1) Se ha violado una regla, por ejemplo, hay un valor duplicado. 2) Otro usuario ha grabado cambios mientras uno ha estado trabajando. Visual FoxPro detecta esta condición peligrosa. Aquí estoy suponiendo que usamos "bloqueo optimista" (explicado más abajo); ésta es la manera recomendada de trabajar. TableUpdate() es, en realidad, una función; devuelve verdadero (.T.) si se grabaron los cambios exitosamente, y falso (.F.) si había algún problema.
TableUpdate() tiene opciones para guardar sólo el registro actual, o todos los registros pendientes.
Antes de habilitar buffering, debemos decidirnos si queremos tener buffering de cambios pendientes a nivel de registro (sólo un registro a la vez), o a nivel de tabla (se pueden tener cambios pendientes para varios registros). También tenemos que decidirnos entre bloqueo optimista, o pesimista. En el bloque pesimista, se bloquea el registro ni bien el usuario comienza a hacer modificaciones. En el bloqueo optimista, sólo se bloquea el registro en el momento de grabar los cambios con TableUpdate().
Para habilitar buffering, se usan las siguientes órdenes:
use cliente CursorSetProp("Buffering", 3, "cliente")
Estas órdenes normalmente irían en el método Load() del Form (pantalla). También se pueden abrir tablas (y fijar propiedades de buffering) a través del DataEnvironment, de la pantalla.
Volver a: Visual FoxPro | Página Principal de Hilmar Zonneveld