![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() Para situar un poco comentaré el entorno de trabajo:
BD: Firebird 1.5 Conectividad: IBX 6.01 RAD: Builder C++ 6 TIBTransaction = commit read_committed, rec_version, nowait Ahora explicaré un poco más el problema: Si no he entendido mal la filosofia de los "bloqueos" superoptimistas, más que un bloqueo es un conflicto normalmente a la hora de escribir en registros, no? O sea que si una transacción realiza una escritura en un campo de un registro y hace commit y una segunda transacción prueba a hacer lo mismo en el mismo campo del mismo registro deberia fallar y saltar el bloqueo optimista, no? Yo entiendo que el ModifySQL de la segunda transacción si contiene en el WHERE todos los campos posibles de modificación no podrá actualizar por no encontrar registro alguno para modificar. Esto me parece quedar claro en este fragmento de la cara oculta: Por supuesto, si alguien cambia cualquier dato del empleado 666, digamos que la extensión telefónica, la instrucción anterior no encontrará registro alguno y se producirá un fallo de bloqueo optimista.Bueno, pues el problema es que no me salta ningun tipo de fallo de bloqueo ni nada. Yo pensaba que me saltaria alguna excepción como en el caso en que intentas repetir la clave primaria que si que falla el commit saltando una excepción. Pues no se si me esta fallando algo en la practica o no he entendido bien la teoria de los bloqueos optimistas. En el caso del delete me pasa lo mismo me deja borrar un registro que ya habia sido borrado, aunque esto no es tan grave ![]() Pero vaya que me gustaria saber como funciona realmente el bloqueo optimista y poderlo usar, anque tambien he leido en el foro el 'simulacro' de bloqueo pesimista con un update inutil y tal pero me parece que tampoco solucionaria nada ya que la segunda transacción actua escribe o borra cuando la primera ya ha termindo (commit). No se, alguien sabe como funciona todo esto realmente???? Gracias de antemano. |
|
|
![]() |
|