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 02-06-2005
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
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
ahora no consigo desbloquearlo.
He probado a hacer backup/restore, reiniciar el Firebird y nada.
Responder Con Cita
  #2  
Antiguo 02-06-2005
_fede _fede is offline
Miembro
 
Registrado: jun 2005
Posts: 12
Poder: 0
_fede Va por buen camino
Registro Bloqueado

Hola, nunca he trabajado con Firebird 5, pero en Oracle se soluciona realizando commit.

Un saludo.
Responder Con Cita
  #3  
Antiguo 02-06-2005
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 02-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
¿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
Responder Con Cita
  #5  
Antiguo 02-06-2005
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
Cita:
Empezado por jachguate
¿Firebird 5!!?

chanfle!!... yo me quedé en la alpha de firebird 2.0...
Evidentemente:1.5
Responder Con Cita
  #6  
Antiguo 30-06-2005
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 01-07-2005
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 20
Rufus Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 03-07-2005
case case is offline
Registrado
 
Registrado: jul 2005
Posts: 5
Poder: 0
case Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 04-07-2005
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
La aplicación está siendo utilizada simultáneamente por 20-30 usuarios y no había tenido problemas. La tabla que me ofrecia problemas era el del contador de registro de entrada, osea el asignador de numeros consecutivos. Es el único sitio en toda la aplicación en la que utilizo el WITH LOCK. A ese contador acceden ocasionalmente todos los usuarios pero en la oficina de entradas existen tres puestos que solo graban registros que utilizan ese contador, por lo que el nivel de concurrencias es muy alto. Me dio muchos problemas hasta que utilice el mecanismo que expuse en el primer mensaje, donde el concurrente intenta grabar diez veces y si no lo consigue da mensaje de concurrencia. Desde principio de año no me dió ningún problema, hasta este momento en que creo que no se trata de que funcione mal el WITH LOCK sino que el servidor hizo algo mal.
Un saludo.
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


La franja horaria es GMT +2. Ahora son las 19:05:37.


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