Bloqueo de un registro

.:Gaby:.
26 de Agosto del 2002
Gracias por esa bienvenida, Queria comenzar la discución con el bloqueo de registros de Bases de datos compartidas en ambiente multiusuario. He intentado el rlock, lock... y no me sirve... en realidad estoy confundida... Alguien me puede decir donde encuentro algo más especifico referente a este tema... Gracias (? . .)

pablocesar
26 de Agosto del 2002
Si estas usando visual fox 5 en adelante, te cuento que para el bloqueo de registros ya no hay que pensar tanto sino que fox lo maneja practicamente solo, para eso investiga las propiedades de los formularios como ser buffermode y las funciones TABLEUPDATE() Y TABLEREVERT().

Desde la versión 5 fox implementa el uso de buffers de tablas y de registros, lo que hace esto es que si eliges trabajar con un buffermode optimista el registro actual se copia a una variable en memoria, todos los cambios que hagas sobre el registro serán guardados cuando le des la orden con TABLEUPDATE(), para revertir los cambios lo unico que haces es usar TABLEREVERT() y vuelves a tener el registro viejo. Cuando fox intente guardar el registro, el mismo bloqueará el mismo y guardará los cambios. Generalmente en todos los tipos de aplicaciones realizadas con fox esto sirve y es muy práctico, salvo raras ocasiones donde si debes forzar el bloqueo a mano, pero son las menos. Cualquier duda quedo a tu disposicion.

Martin
26 de Agosto del 2002
Si trabajas con formularios basta que configures los Set para que automaticamente se bloquen o desbloquen las tablas y el resto de operaciones como mantenimiento puedes crear formularios que realizen estas operaciones a partir de la version 6 el visual foxpro no tienes que preocuparte de bloquear o desbloquear en todo caso dependeria del modo que estes trabajando tus aplicaciones ya sea como contenedor de base de datos o tablas libres, para cualquier cosa estoy a disposición.
gracias y saludos

Jesus
26 de Agosto del 2002
Cuando trabajas en un ambiente de bases de datos compartidas, debes respetar lo siguiente:

*Abrir en modo compartido para que varios *usuarios accesen a las tablas.
Use (nombre de tabla.dbf) shared

*Buscas el registro a actualizar
locate (condición) * o con Seek, segun tu caso.

*Al grabar o actualizar un registro debes *bloquear el registro o la tabla para que otro *usuario no trate de modificarlo o eliminarlo al *mismo tiempo.
*La siguiente instrucción hace que si el registro *no se bloquea a la 1a. se seguira intentando *hasta que se logre dicha acción.
set reprocess to automatic

*Con la siguiente secuencia se efectua el bloqueo *de la tabla (Rlock para bloquear registros)
if flock()
...(tu instrucciones para grabar en tablas)
endif

*Ahora hay que quitar el bloqueo para que otro *usuario pueda tener acceso al registro o tabla.
unlock all

*Recuerda, esto se hara en cada tabla compartida *y puedes marcar para eliminación uno o varios *registros, pero no eliminarlos de manera *definitiva (pack o zap) hasta que la(s) tabla(s) *se habran en modo exclusivo.


Espero que esto te ayude a aclarar tus dudas.