FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Problema con resgistro bloqueado
Se me ha quedado bloqueado un registro en Firebird 5 con
Código:
select * from RESCON where RESCON_TIPO=1 for update with lock He probado a hacer backup/restore, reiniciar el Firebird y nada. |
#2
|
|||
|
|||
Registro Bloqueado
Hola, nunca he trabajado con Firebird 5, pero en Oracle se soluciona realizando commit.
Un saludo. |
#3
|
||||
|
||||
He tenido que desinstalar el firebird, eliminar el directorio y volver a isntalarlo para que lo desbloquera. Es normal esto?.
Para ilustrar mejor el caso os pongo el código con el que bloqueo el registro. En toda la aplicación solo utilizo el bloqueo aquí. Código:
QueryResCon.Close; QueryResCon.SQL.Clear; if Res_Tipo='E' then QueryResCon.SQL.Add('select * from RESCON where RESCON_TIPO=1 for update with lock') else QueryResCon.SQL.Add('select * from RESCON where RESCON_TIPO=2 for update with lock'); x:=1; while x < 10 do begin try QueryResCon.Open; x:=11 except if x > 5 then begin Showmessage('Contador ocupado por otro usuario, intentalo de nuevo'); Exit; end; x:=x+1; end; end; Última edición por apicito fecha: 02-06-2005 a las 13:30:04. |
#4
|
||||
|
||||
¿Firebird 5!!?
chanfle!!... yo me quedé en la alpha de firebird 2.0...
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
||||
|
||||
Cita:
Evidentemente:1.5 |
#6
|
||||
|
||||
Para que conste, por si alguien consulta este hilo más tarde, la solución fue desinstalar firebird y volver a instalarlo. Parece como si en algún sitio de la instalación quedase grabado que ese registro estaba bloqueado y al reinstalarlo se sobreescribiese ese sitio.
Última edición por apicito fecha: 30-06-2005 a las 19:04:01. |
#7
|
||||
|
||||
Apicito me parece interesante el problema que planteas.
Te confieso que en las aplicaciones que realizo con firebird nunca he utilizado WITH LOCK. Utilizando bien las transacciones y los bloqueos optimistas no he tenido problema aunque he de aclarar que los programas son ligeros y los utilizan normalmente entre 10 y 20 usuarios simultaneos aproximadamente. Si lo que quieres es bloquear un registro a nivel edición ya sabemos que eso lo conseguimos aplicando un UPDATE ficticio sobre ese registro al comenzar la edición por un cliente aunque podemos tener problemas con los triggers y hay que controlarlos muy bien. Dos enlaces interesantes: - Notas de la versión 1.5: http://www.ibphoenix.com/downloads/F...tesSpanish.pdf En la página 15 se describe la opción WITH LOCK. - Si lees bien ingles técnico te dejo este artículo que esta muy muy bien, sobre bloqueos en firebird: http://www.interbase-world.com/en/articles/805.php Un saludo
__________________
Milo Última edición por Rufus fecha: 01-07-2005 a las 11:36:27. |
#8
|
|||
|
|||
Correcto. El uso de un SELECT con for update no me parece una muy buena opcion. Es preferible utilizar un UPDATE anterior o simplemente actualizar el registro y capturar la excepcion si hay un conflicto de versiones. Es mas simple, claro y ordenado. Ah, aparte de que el motor es muy eficiente para manejar estas situaciones sin necesidad de bloqueos.
|
|
|
|