FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Como bloquear un registro de una tabla que esta en la red?
Buenos Días:
Solicito orientación o ayuda a alguna alma caritativa sobre lo siguiente lo cual me parece un asunto básico en un sistema de BD en red. - Vamos a suponer que tenemos 3 computadoras, una de ellas tienen una base de datos MYSQL y las otras dos deberan accesar a esa misma BD para consultarla o modificarla y es posible que lo hagan al mismo tiempo. - Imaginemos que una de las computadoras accesa la BD para modificar un registro, vamos a suponer que sea el registro No. 3 y DESPUES la otra computadora intenta modificar ese mismo registro. - Lo mas usual que se me ocurre es que ese registro debe permanecer bloqueado hasta que la primera computadora acabe de modificarlo para que asi la otra computadora tome en cuenta que no puede modificar ese registro por que otra ya lo esta cambiando y entonces evitamos una serie de problemas. - Mi pregunta es... como logro ese bloqueo??? En Delphi me imagino que en cada computadora que no es la que tiene la BD se crea como una copia en memoria de la BD y de esa manera probablemente cuando se intentan modificar el mismo registro al mismo tiempo no marca error por que cada una esta trabajando sobre su copia virtual. Asi sera???? - Una propuesta que se me ocurre es poner un campo que se llame "MeEstanUsando" y ponerle un "SI" si alguien la va a modificar y entonces cuando alguien mas intente modificar el mismo registro primero se debe verificar que el campo "MeEstanUsando" no tenga un "SI" y si no es asi entonces si puede modificarse.. un metodo medio rustico.. supongo que MYSQL tiene una funcion mas acertada para esto, o tal vez Delphi la tenga. - Me doy a entender???? Gracias por su apoyo.
__________________
"Los unicos que no se equivocan son aquellos que no intentan hacer algo." Iván Caballero Cano... ivanhalen77@gmail.com |
#2
|
|||
|
|||
La modificacion de registros es inmediata, no mas de unos pocos milisegundos, asi que primero se realiza una modificacion y despues va la otra.
Otra cosa muy distinta es la edicion de un registro, y ahi la base de datos no tienen nada que decir, ni se entera, esta edicion no tienen nada que ver con el servidor de base de datos, solo en el momento de darle al boton "Guardar" o "Enviar" o como se llame, se envia la sentencia insert o update al servidor. Si lo que pretendes es que mientras un usuario esta modificando una ficha, el registro correspondiente de la base de datos este bloqueado, eso no es aconsejable hacerlo (salvo en aplicaciones o casos muy especificos y especiales), porque ante un apagado incorrecto o bloqueo de un ordenador cliente, o que el usuario se olvide y se vaya a tomar un cafe, el registro quedaria bloqueado durante mucho tiempo o de forma indefinida. Lo que se suele hacer, si es necesario, es detectar en el momento de pulsar "Guardar" si el registro que vamos a grabar ha sido modificado en la base de datos y en ese caso se puede avisar al cliente, para que tome la opcion que corresponda. Saludos |
#3
|
||||
|
||||
Hola Mick:
Gracias por tu respuesta MIck: Tienes la razón en que modificar no es lo mismo que editar, a veces por no usar la palabra correcta la pregunta ya cambia su sentido. En ocaciones Mick, no es bueno que alguien pueda editar un registro que esta siendo cambiado por otra persona por que puede ocacionar un problema grave. Ejemplo: Alguien edita un registro que decia "El paquete no ha llegado y urge recogerlo, es de vital importancia tenerlo" y lo modifica asi: "ya no es necesario ir hasta el Aeropuerto por que ya llego el paquete y nos ahorramos gasolina y tiempo, que bueno!!", pero en ese momento alguien se pone a modificar ese mismo registro y no se entera que el "paquete" ya llego a la oficina y por lo tanto, el coloca "Señor Mensajero por favor urge ir a recoger el paquete al aeropuerto por que todavia no llega, cualquier error significa perder al cliente por el tiempo que tenemos", y entonces el mensajero despues de todo esto checa ese registro y el lee que tiene que ir por el paquete, pero por la forma como se modifico el registro el no sabe que el paquete ya llego realmente y saldra a dar un vuelta al aeropuerto en vano perdiendo seguramente al cliente. En el caso que tu explicas o propones que funciones tiene MYSQL para detectar que el registro que se intenta modificar fue cambiado un poco antes de que se apruebe la modificacion en la BD por parte del usuario??? Saludos, alguna otra idea?
__________________
"Los unicos que no se equivocan son aquellos que no intentan hacer algo." Iván Caballero Cano... ivanhalen77@gmail.com |
#4
|
||||
|
||||
Cita:
// Saludos |
#5
|
||||
|
||||
OK Eso es una buena idea Roman, la voy a considerar en forma seria y probablemente asi lo haga pero:
Aun asi me sigo quedando con la duda de que funciones tiene MYSQL para poder bloquear un registro que esta siendo editado por algun usuario, conocen cuales son y una explicación práctica de como se usan esas funciones en un ejemplo sencillo? Muy amables, gracias por su apoyo. UNIDOS HACEMOS MAS!
__________________
"Los unicos que no se equivocan son aquellos que no intentan hacer algo." Iván Caballero Cano... ivanhalen77@gmail.com |
#6
|
||||
|
||||
La idea no es mía, es lo que se conoce como bloqueo optmista y es una forma de hacer lo que Mick te comentó antes.
En MySQL, puedes sólo hacer bloqueos de tablas (o sea, bloqueas toda la tabla), a no ser que uses tablas innodb, con las cuales puedes hacer bloqueos a nivel de registro, pero este tipo de tablas son más lentas que las tablas myisam, si bien son imprescindibles para el manejo de transacciones. De todas formas, no te olvides de lo que ya te mencionó Mick, en cuanto a que no es aconsejable el uso de bloqueos. // Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Cómo bloquear una tabla ? | santi33a | MS SQL Server | 1 | 12-04-2006 15:02:34 |
Como bloquear un registro!!! | CarlosHernandez | Firebird e Interbase | 7 | 12-08-2005 16:49:50 |
Como se podría bloquear un registro | marcial | Conexión con bases de datos | 4 | 17-02-2004 22:00:42 |
como bloquear un registro en un dbgrid | marcelofabiani | Conexión con bases de datos | 5 | 02-10-2003 21:04:01 |
Como bloquear la tabla, para escritura? | judoboy | Conexión con bases de datos | 2 | 21-05-2003 10:02:48 |
|