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 ... |