by FranciscoA » Mon Jun 04, 2012 3:07 pm
Amigos, veamos lo siguiente:
El caso expuesto por Byron se traduce a una falta de disciplina de parte del usuario 1. Imaginemos cuanto tiempo nos cuesta encontrar el codigo del producto y modificar solo el valor del get que contiene el precio... pero, bueno, sucede a menudo. Le sumo a falta de disciplina, negligencia, porque este hecho puede ocasionar que se vendan productos a un precio menor al que la gerencia o dueño del negocio acaba de establecer.
Una posible solución, la de sysctrl2, es usar un Timer que ejecute la acción de cerrar el dialogo después de un tiempo prudencial sin eventos. Sin embargo, si el usuario 2 hace la modificación, al regresar el usuario 1, aunque encuentre cerrado su dialogo, si este (usuario 1) no recuerda, no conoce, o no se fija en el precio (que ya fue cambiado), ejecutará la modificación que le encomendaron. Los resultados ya se saben: alteración al precio recién modificado.
Para este caso, ademas del Timer, se tendría que llevar un control sobre el registro que se está modificando o que fué modificado (y en qué fué modificado), para que cuando otro usuario entre en la opción MODIFICAR de este registro, se puedan presentar mensajes al respecto. Aquí cabe algo parecido a lo que expone jibrita, crear un campo "MODIFICADO" que contenga información sobre la última modificación. También se puede utilizar trigers, u otra tabla independiente. La idea es que cuando otro usuario entre a modificar el registro, se le presente esta información. En este caso se puede usar el siguiente pseudo-codigo: Si MODIFICADO="Modificando", MsgStop("Estoy siendo modificado por otro usuario"), MsgInfo("Esta es la ultima modificacion"). Por supuesto, de previo debe llevar la condición de que este campo está vacío o no.
La idea de bloquear el registro, no es aconsejable en este caso, porque lo mantendríamos bloqueado mientras el usuario 1 se toma su cafecito, o sale del baño, y mientras tanto, no puede ser editado por otro usuario. En DBFs uso el bloqueo hasta oprimir el botón ACEPTAR. En MySql no los he usado.
En mi sistema de contabilidad tengo implementado un control de documentos en edicion, donde controlo el No. de documento, usuario, y equipo. De esta manera evito que otro usuario pueda intentar editar el mismo documento, a la vez, o que el usuario original trate de abrirlo mas de 1 vez.
Problemas en un entorno multiusuario o red, no nos faltarán. Sin embargo, para todo hay solución con un poco más de codificación.
Espero no haber "enredado el asunto".
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql