Manejo de datos multiusuario

Hola de nuevo Maxisis, me puedes explicar como funciona la el asunto de multiusuario, he estado leyendo y haciendo travesuras con formularios de un proyecto para ver el funcionamiento de multiusuario, hasta ahora lo que he logrado me funciona, ¿pero en ocasiones hace cosas que no se por que? En un formulario puse en las propiedades del formulario en la cegilla de datos como row buffering en 2 que es optimista y en el data enviroment puse la tabla como 3 que es optimistic row buffering.
Ejecuto el formulario, completo los datos y presiono guardar. En el boton de guardar pongo lo siguiente
insert into prueba(codigo,nombre,monto,test);
  values xcodigo,xnombre,xmonto,xtest  (A las variables les asigné los campos del form)
Despues de guardar ejecuto tableupdate() y guarda bien, sin embargo hay ocasiones en que no se guarda y crea un espejo de la tabla prueba que se llama prueba_a.
No se si estoy haciendo algo mal o si me falta algún paso.
Saludos

1 respuesta

Respuesta
1
El tema de manejo de datos a nivel multiusuario es muy sencillo. Lo complicado es saber qué usar, ya que hay muchas formas de trabajar, y para cada mecanismo, hay herramientas específicas para cada una de esas formas.
Por experiencia personal, yo siempre elegí controlar todo manualmente y no dejar que Fox lo haga. Es más, de la forma que me decís que usás la usé poco y nada. Quizás la forma que siempre usé sea un poco antigua y me haga escribir un poco más de código, pero funciona perfectamente bien.
Por ejemplo, en caso de tener que insertar un nuevo registro en una tabla hago directamente el INSERT INTO ... Ahora, si necesito bloquearla para algo (por ejemplo, calcular un código siguiente al último existente) lo hago con FLOCK().
Si necesito editar o actualizar un registro, lo bloqueo con LOCK() o RLOCK() mientras lo estoy editando.
Para desbloquear uso UNLOCK.
Hay que tener en cuenta varios elementos que influyen en el funcionamiento: SET EXCLUSIVE ON|OFF, SET MULTILOCKS ON|OFF, SET REPROCESS, USE <tabla> [EXCLUSIVE], etc...
Para todo hay que trabajar de forma lógica y pensar en todas las cosas que se pueden dar. Por ejemplo, en un formulario para editar datos de clientes, cuando abra el registro para editarlo, bloqueo ese registro hasta que el usuario guarde o cancele los cambios. Otro caso, si necesito hacer algún backup de una tabla, la bloqueo completamente para que ningún usuario la toque, la resguardo, y después la desbloqueo (se podría abrir en forma exclusiva, pero puede dar errores y hay que controlarlos)
Te digo nuevamente: es la forma que yo uso desde toda la vida y nunca tuve problemas, aunque quizá la que vos empezaste a usar sea mejor, pero sinceramente no la conozco y no te voy a poder ayudar. Espero que te sirva algo de lo que cuento, y si te interesa saber más, no dudes en preguntar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas