La Web del Programador: Comunidad de Programadores
 
    Pregunta:  13538 - GRABAR DOS REGISTROS AL MISMO TIEMPO EN LA MISMA TABLA
Autor:  Natalia Andrea Sepulveda Vergara
Buenas..Mi nombre es Natalia y tengo la siguiente inquietud:
Desarrolle un software de mantenimiento bajo VISUAL FOXPRO 6.0 y se me presenta el siguiente problema. En una red de cinco nodos tengo montada la aplicacion. Cuando entro a un modulo ej: facturacion, otro nodo no puede acceder al mismo modulo y en caso de poder hacerlo no puedo grabar en la tabla de facturacion el registro de uno y otro nodo. En mi programa de inicio tengo (creo) todas las instrucciones para poder ejecutar mi aplicacion en red. Esto es lo que tengo:

SET EXCLUSIVE OFF
OPEN DATABASE b_datos
SET SYSMENU OFF
SET SAFETY OFF
SET DELETE ON
SET ECHO OFF
SET DATE TO DMY
SET CENTURY ON
SET CLOCK TO 0,0
SET TALK OFF
SET ESCAPE OFF

A la persona que me pueda ayudar de antemano a solucionar este inconveniente y poder dejar que mis nodos graben registros en la misma tabla y al mismo tiempo muchisimas gracias

  Respuesta:  José Samper
La forma de grabar compartida que te enviaron es valida pero muy ineficiente la forma mas optima es trabajar con tablas en buffers

si necesitas un codigo ejemplo escribeme y te preparo uno

  Respuesta:  wences
Para poder grabar al mismo tiempo en la misma tabla necesitas bloquear y desbloquear registros ... para ello necesitas usar el set reprocess y los comandos de bloqueo y desbloqueo rlock(), flock() , unlock() ... ejemplo:

if !used('contar')
use contar in 21 shared
endif
select contar
go top
rlock()
replace contar.conalba with str(val(contar.conalba)+1,6,0)
replace contar.nusuario with m.usuario
replace contar.dia_hora with datetime()
unlock
m.numero=contar.conalba

En este ejemplo , se esta bloqueando un registro , el contador , se actualiza y se desbloquea ... lo mismo en cualquier caso ... ojo se usa rlock para bloquear registros , no flock() que bloquea toda la cabeceray por lo tanto toda la tabla ...

Espero te sirva ...