Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Bloqueo de Registros (https://www.clubdelphi.com/foros/showthread.php?t=31507)

pelaorb68 10-05-2006 00:37:12

Bloqueo de Registros
 
Hola a todos, necesito si me pueden ayudar por favor......

Estoy realizando una aplicación (D7-MySql) y necesito controlar la concurrencia de usuarios. Estoy un poco consfuso con el ConnectionMode y el LockType.......(No sé si es el camino correcto).

Tengo una situación que no sé cómo controlarla(bloqueos):

Ejm:

Estoy ingrseando información del tipo Maestro/Detalle.....Cuando la voy actualizar, primero que todo leo el último folio registrado en la tabla Maestro, para asignar el siguiente+1 al nuevo registro a crear.

El punto es, qué pasa cuando dos o mas usuarios(al intentar grabar), lean al mismo tiempo, el último registro Maestro????...ámbos tendran un Ultimo+1 idéntico.

Cómo puedo hacer que el primero que leea el ultimo registro Maestro, deje tomado ese registro hasta que complete el resto de las actualizaciones..????

Saludos,

waltergomez 10-05-2006 01:24:59

Y al final descubrimos las transacciones !!!

Todo pasa por el Isolation Level que uses.

Lee esto,

http://www.databasejournal.com/featu...le.php/3393161

Saludos,

AGAG4 10-05-2006 01:39:01

Checa Esto....
 
Yo te recomiendo aparte de usar Transacciones, crear una tabla donde contiene los consecutivos de tus Maestros Detalles, y al momento de Guardar el Maestro Detalle tomas el ultimo folio en la tabla de consecutivos y al mismo tiempo bloqueas el registro cuando en esta tabla le aumentes 1 Dígito(Con un Update ....) al Folio de tu maestro....

Espero te sirva...

Saludos.

pelaorb68 10-05-2006 18:03:37

waltergomez.....he estado leyendo lo de los Isolation Level, y creo que ello habla de cuándo estarán visible los cambios hechos por otra transacción (estoy en lo correcto??)....
En lo que pretendo, al leer el último registro Maestro no haré nada con él, sólo saber su folio para asignar a los nuevos registros a crear, ese folio + 1.

También leí lo del LockType y si mal no entendí (mi inglés no es de lo mejor) es que al utilizar un ltPessimistic, el registro es bloqueado cuando se realiza una operación Edit....(eso es correcto..???).........Hize una preuab de ese tipo, pero cuando el segundo usuario toma el mismo registro(que ya está en edit) no sucede nada, es decir, lee el mismo folio....


AGAG4 : Gracias por tu respuesta, pero por el momento no es aplicable para mi app, ya que la determinación del último folio a ocupar puede estar dado por una condición, es decir, nó necesariamente es el último registro en la tabla Maestro, sino que podría ser el último folio ingresado según el valor de otro campo más....no sé si me explico......

waltergomez 10-05-2006 22:59:00

Cuando tenga un tiempito te mando un ejemplo, pero proba
abriendo dos ventanas y ejecuta mysql en linea de comando y proba en forma simplificada lo que queres hacer asi te das cuenta como funciona.

Para poder hacer lo que queres debes tener autocommit = 0 y usar base de datos de tipo InnoDB.

Tenes que hacer las operaciones (select, insert, update) dentro de un bloque start transaction / commit.

Disculpa que no pueda dedicarte mas tiempo.

Saludos,

pelaorb68 11-05-2006 00:00:57

Gracias por tu tiempo waltergomez.........espero me puedas enviar un ejemplo......
De hecho, todas las operaciones que pretendo realizar en la actualización van dentro de una Transacción.......


La franja horaria es GMT +2. Ahora son las 07:06:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi