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 12-11-2015
Leopard2 Leopard2 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 39
Poder: 0
Leopard2 Va por buen camino
Problema con Lock conflict

Hola, tengo un programa de facturas, el primero hecho con firebird 2.5 y los IBX de Delphi 7 y me da este error en distintas operaciones (borrar, ingresar, modificar), al parecer un usuario deja la tabla o una transacciòn colgada, que opinan de cual puede ser el motivo del mensaje ?
Saludos

Responder Con Cita
  #2  
Antiguo 12-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Nunca había visto un deadlock con firebird, tendrían que darte un premio
Solucionar esto puede ser fácil o muy, muy difícil. Todo depende de cómo hayas programado el sistema.
Para empezar, ¿qué parámetros tienes en el TIBTransaction?
Responder Con Cita
  #3  
Antiguo 12-11-2015
Leopard2 Leopard2 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 39
Poder: 0
Leopard2 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Nunca había visto un deadlock con firebird, tendrían que darte un premio
Solucionar esto puede ser fácil o muy, muy difícil. Todo depende de cómo hayas programado el sistema.
Para empezar, ¿qué parámetros tienes en el TIBTransaction?
donde paso a retirar mi premio jajaja ? en serio, que origina los deadlock ?

Responder Con Cita
  #4  
Antiguo 12-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Leopard2 Ver Mensaje
donde paso a retirar mi premio jajaja ?
Botón derecho en el componente y mira los parámetros.
Responder Con Cita
  #5  
Antiguo 12-11-2015
Leopard2 Leopard2 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 39
Poder: 0
Leopard2 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Botón derecho en el componente y mira los parámetros.
Responder Con Cita
  #6  
Antiguo 12-11-2015
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Empezado por Leopard2 Ver Mensaje
ok, ahora con esos parámetros compara con el link que envié anteriormente y mira... así por encima lo que vi era que el nowait es uno de los que genera el deadLock, allá ene se enlace lo explican que va a pasar.
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #7  
Antiguo 12-11-2015
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Empezado por Leopard2 Ver Mensaje
Hola, tengo un programa de facturas, el primero hecho con firebird 2.5 y los IBX de Delphi 7 y me da este error en distintas operaciones (borrar, ingresar, modificar), al parecer un usuario deja la tabla o una transacciòn colgada, que opinan de cual puede ser el motivo del mensaje ?
Saludos

acá podrás mirar porque salen los bloqueos en firebird. La ídea es que compare con su transacción y mire porque pasa.


Por cierto, algo que me pasaba antes con respecto a estos bloqueos era que usaba componentes del tipo DBEdit o similares, entonces por decir algo alguien empezaba a escribir en un dbEdit y acá arrancaba una transacción y después de mucho rato seguía abierta y sin un commit a la vista. Luego desde otro equipo alguien más trataba de guardar algo pero en el equipo original había aún una transacción esperando a realizar ya fuera commit o rollback... Lo mejor es evitar eso y hacer transacciones lo más pequeñas posibles.

ejemplo

Código Delphi [-]
try
   Transaccion.(iniciartransaccion)   // No recuerdo el comando que inicia una transacción
   DSPersonas.FIeldByName('nombre').asstring =  'Jose';
   DSPersonas.FIeldByName('telefono').asstring =  '3158872244';
   DSPersonas.post;
   DSPersonas.ApplyUpdates;
   Transaccion.commit;
except
   Transaccion.rollback;
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #8  
Antiguo 12-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
[RONPABLO], si tiene bien configurado los parámetros del TIBTransaction, él se encarga de las transacciones, no hay que preocuparse de nada.
No es necesario iniciar/confirmar una transacción, salvo que sea "larga" y tenga implicada varias tablas que deseemos que tengan "consistencia". Para ello se usaría de forma similar a como has descrito.

Última edición por Casimiro Notevi fecha: 12-11-2015 a las 21:16:18.
Responder Con Cita
  #9  
Antiguo 12-11-2015
Leopard2 Leopard2 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 39
Poder: 0
Leopard2 Va por buen camino
Cita:
Empezado por RONPABLO Ver Mensaje
acá podrás mirar porque salen los bloqueos en firebird. La ídea es que compare con su transacción y mire porque pasa.


Por cierto, algo que me pasaba antes con respecto a estos bloqueos era que usaba componentes del tipo DBEdit o similares, entonces por decir algo alguien empezaba a escribir en un dbEdit y acá arrancaba una transacción y después de mucho rato seguía abierta y sin un commit a la vista. Luego desde otro equipo alguien más trataba de guardar algo pero en el equipo original había aún una transacción esperando a realizar ya fuera commit o rollback... Lo mejor es evitar eso y hacer transacciones lo más pequeñas posibles.

ejemplo

Código Delphi [-]
try
   Transaccion.(iniciartransaccion)   // No recuerdo el comando que inicia una transacción
   DSPersonas.FIeldByName('nombre').asstring =  'Jose';
   DSPersonas.FIeldByName('telefono').asstring =  '3158872244';
   DSPersonas.post;
   DSPersonas.ApplyUpdates;
   Transaccion.commit;
except
   Transaccion.rollback;
ocupo los DBEdit y IBDataset para las tablas :

MasterDb.ReqmtoMas.Post;
Try
Masterdb.IBTrsc.CommitRetaining;
ShowMessage('! REQUERIMIENTO GRABADO CORRECTAMENTE !');
Except
MasterDb.ReqmtoMas.Cancel;
Masterdb.IBTrsc.RollbackRetaining;
ShowMessage('Se produjo un error y no se grabarón los datos');
end;
Responder Con Cita
  #10  
Antiguo 12-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



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
Lock conflict on no Wait transaction Deadlock gorsan Conexión con bases de datos 3 12-03-2015 08:24:13
lock conflict on no wait transaction berna Firebird e Interbase 1 02-08-2012 21:54:50
lock conflict on no wait transaction deadlock Chogo Firebird e Interbase 1 07-07-2010 17:44:45
Error Lock conflict al momento de Delete Addicto Firebird e Interbase 2 04-07-2008 16:02:39
Lock conflict on no wait transaction gorsan Conexión con bases de datos 2 08-08-2007 09:47:56


La franja horaria es GMT +2. Ahora son las 06:53:04.


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