Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-05-2003
BECERRA BECERRA is offline
Miembro
 
Registrado: may 2003
Posts: 30
Poder: 0
BECERRA Va por buen camino
Unhappy ¿Bloqueo de registro?

Hola compañeros:

He realizado una aplicación en interbase, y en ocasiones, cuando dos o mas usuarios introducen registros en la misma tabla, devuelve el siguiente mensaje de error " lock conflict on no wait transaction", lo cual no sé a que puede ser debido, y me trae loco ya que cada día tengo mas usuarios trabajando en la BD de forma sumiltanea.

¿Podría decirme alguien a que puede ser debido?

Saludos y gracias de antemano.
Responder Con Cita
  #2  
Antiguo 06-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Re: ¿Bloqueo de registro?

Hola,

Cita:
Posteado originalmente por BECERRA
" lock conflict on no wait transaction"
más que un bloqueo (que también) es un conflicto de actualización. La transacción que hace saltar el error está intentando modificar (actualizar o eliminar) un registro "tocado" por otra transacción. Además, la transacción tiene la opción "NO WAIT", es decir, que no esperará a que un posible bloqueo de otra transacción concurrente se resuelva, simplemente devolverá el mensaje de error.

La situación sólo puede resolverse o bien por un rollback en la primera transacción, en cuyo caso la segunda transacción podrá reintentar la actualización, o por un commit, en este caso obtendrá (inevitablemente) un error de actualización y no podrá (salvo que cierre y abra una nueva transacción) aplicar sus cambios.

Me da la impresión que lo he explicado de mala manera. Tu dirás.

Saludos.
Responder Con Cita
  #3  
Antiguo 07-05-2003
BECERRA BECERRA is offline
Miembro
 
Registrado: may 2003
Posts: 30
Poder: 0
BECERRA Va por buen camino
Muchas gracias, te he entendido perfectamente, lo que me extraña es que me devuelva ese error cuando actúo sobre diferentes registros.
Responder Con Cita
  #4  
Antiguo 07-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por BECERRA
lo que me extraña es que me devuelva ese error cuando actúo sobre diferentes registros.
¿estás seguro que las transacciones no han "tocado" registros comunes?. Si estás trabajando con transacciones muy largas (temporalmente) es fácil que ocurra.

Saludos.
Responder Con Cita
  #5  
Antiguo 08-05-2003
BECERRA BECERRA is offline
Miembro
 
Registrado: may 2003
Posts: 30
Poder: 0
BECERRA Va por buen camino
Solucionado he puesto wait en la transaccion y no me lo ha vuelto a hacer.

Gracias.
Responder Con Cita
  #6  
Antiguo 08-05-2003
Marina Marina is offline
Miembro
 
Registrado: may 2003
Ubicación: Córdoba - Argentina
Posts: 52
Poder: 22
Marina Va por buen camino
Wait en transacción

Cómo hago para poner Wait en la transacción?
Yo estoy usando la conexión a Interbase a través del BDE, e inicio la transacción con StartTransaction y la finalizo con Commit o Rollback, y no encuentro un lugar donde poner el Wait.

Alguien puede ayudarme?

Gracias de antemano


Marina
Responder Con Cita
  #7  
Antiguo 08-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

con el BDE no tienes acceso a los parámetros de la transacción (salvo al nivel de aislamiento).

Saludos.
Responder Con Cita
  #8  
Antiguo 14-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 22
Kafu Va por buen camino
Yo estoy intentando prevenir este tipo de problemas. ¿Sabeis si hay algún tipo de acceso a información extra del error? Me explico: ahora en caso de conflicto, la transacción menos espabilada se cancela, pero la única información que ofrezco al usuario es que "Otro usuario" ha grabado el mismo registro a la vez y para sobreescribir hay que volverlo a intentar. No tengo un sistema de usuarios de interbase (el tema de usuarios lo llevo por tablas propias). No sé si hay forma de saber desde qué cliente/puesto se ha lanzado el otro commit. Un saludo,



F.T.G.
Responder Con Cita
  #9  
Antiguo 14-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

lo que yo haría en un caso de conflicto de actualización es:

1.- Guardar la información del registro que quiero actualizar en una zona intermedia (variables, un Record, o un objeto diseñado para el caso).

2.- Refrescaría los datos en el DataSet, ésto puede obligar a cerrar y reabrir la transacción; depende del nivel de aislamiento, si es muy alto (p. ej. Snapshot) es inevitable.

3.- Una vez refrescados los datos, localizaría el registro, editaría los datos del mismo con la información que almacené anteriormente y aplicaría los cambios.

Todo puede llegar a hacerse de manera transparente al usuario o pidiendo las autorizaciones (mendiante cuadros de diálogo) oportunas. Por cierto, estoy suponiendo que no se utilizan actualizaciones en caché.

Respecto a información adicional devuelta por el servidor, hasta la versión 1.0 (Firebird) no, pero en la versión 1.5 (o la 2, ahora no recuerdo bien) se han añadido nuevas variables: un identificador de sesión (conexión) y un identificador de transacción si no recuerdo mal, que tal vez pudiesen ser recuperados en el lado cliente.

Saludos.
Responder Con Cita
  #10  
Antiguo 15-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 22
Kafu Va por buen camino
Gracias Kinobi, tomo nota. El tema del identificador de sesión y de transacción me parece muy interesante. ¿Pero cómo accedo a esas variables? voy a mirarlo un poco. Muchas gracias y un saludo,



F.T.G.
Responder Con Cita
  #11  
Antiguo 15-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

los identificadores de sesión y transacción que se van a añadir a Firebird 1.5 son variables accesibles desde el servidor en triggers y procedimientos almacenados. No te puedo comentar más porque ahora estoy utilizando la versión 1.0

Saludos.
Responder Con Cita
  #12  
Antiguo 03-12-2003
raul_sal raul_sal is offline
No confirmado
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 45
Poder: 0
raul_sal Va por buen camino
Estaba leyendo la forma en que administras los bloqueos kinobi y dejame ver si entendi.

1. Intento actualizar el registro
2. Cuando me regresa el error del no wait
3. guardo los datos que quiero actualizar
4 abro y cierro mi IBDataset con otra transaccion (o con la misma?)
5 intento actualizar nuevamente los datos.

S no entendi bien porfavor correjanme, ya que tengo el siguiente problema y me urge pero urge solucionarlo

Tengo una aplicacion corriendo en 5 puestos diferentes es de POS

Esta construida con Delphi
6.0 + IBX + Firebird 1.0.3

Tengo un IBDatabase y un IBTransaction (read_commited, rec_version, wait) asociados a todos mis IBDatasets e IBQuerys

Cuando alguien modifica los datos en una tabla especifica al parecer queda algo abierto se bloquean todas aunque las demas no esten tocando ese registro que puede estar sucediendo.

Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Primer Registro alcides Varios 5 04-05-2005 17:34:37
como importar claves al Registro (desde archivo.reg) sitrico Varios 1 03-12-2004 17:34:26
Como se podría bloquear un registro marcial Conexión con bases de datos 4 17-02-2004 22:00:42
registro current y bookmarks Giniromero Conexión con bases de datos 9 11-07-2003 12:48:35
Reposicionar registro grabado Ricardo Alfredo Varios 8 27-06-2003 13:24:31


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


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