Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Error Lock conflict al momento de Delete (https://www.clubdelphi.com/foros/showthread.php?t=57896)

Addicto 01-07-2008 15:58:58

Error Lock conflict al momento de Delete
 
Holas, bueno primero que nada saludos a todos, espero que puedan ayudarme en mi consulta pues e visto sus post y sen expertos en la materia.

bueno mi problema es el siguiente, estoy realizando un procedimiento almacenado (en firebird 1.5) el cual envia parametros a un segundo procedimiento mediante el comando EXECUTE PROCEDURE, el problema que tengo es cuando se ejecuta el procedimiento este no ejecuta el delete que lo forma y me muestra el siguiente error

Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Lock conflict on no wait transaction.
Deadlock.
Update conflicts with concurrent update.
SQL Code: -901
IB Error Number: 335544345

bueno este es mi script principal:
Código SQL [-]
CREATE PROCEDURE ACTUALIZA_HAPS(
  NUEVO INTEGER,
  VIEJO INTEGER)
AS
DECLARE VARIABLE CONT INTEGER;
DECLARE VARIABLE ULTIMO INTEGER;
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE PROG_ID INTEGER;
DECLARE VARIABLE ESTADO INTEGER;
BEGIN
CONT=0;
nuevo=1844855;
viejo=1847710;
EXECUTE PROCEDURE elimina_uspc(:nuevo); 
EXECUTE PROCEDURE elimina_uspc(:viejo);
for
   select PROG_ID
   from HAPS_HISTORIAL_USUARIO
   where usp_id in (:NUEVO,:VIEJO)
   group by prog_id
  into :prog_id
do
begin
     FOR
        SELECT ID,ESTADO
        FROM HAPS_HISTORIAL_USUARIO
        WHERE PROG_ID = :PROG_ID AND USP_ID IN (:NUEVO,:VIEJO)
     INTO :ID,:ESTADO
     DO
     BEGIN
        if (ESTADO IN (1,2,8) AND :cont = 0) THEN
        BEGIN
             cont = 1;
             ultimo = :id;
        END
        ELSE IF (ESTADO IN (1,2,8) AND :cont = 1) THEN
        BEGIN
            delete from HAPS_HISTORIAL_USUARIO where id = :id;
        END
        ELSE IF (ESTADO IN (4,3,5,6,7,9,10)  AND :cont = 1) THEN
        BEGIN
             cont = 0;
             ultimo = :id;
        END
        ELSE IF (ESTADO IN (4,3,5,6,7,9,10)  AND :cont = 0) THEN
        BEGIN
             delete from HAPS_HISTORIAL_USUARIO  where id = :id;
        END
    end
     
        EXECUTE PROCEDURE INSERT_USPC(:ultimo);
suspend;
END
end
;





y este es el procedimiento el cual me muestra error:
Código SQL [-]
CREATE PROCEDURE ELIMINA_USPC(
  VAR INTEGER)
AS
BEGIN
  delete from USPC_USUARIO_APS_BAJO_CONTROL where usp_id = :var; 
end;


yo creo que el procedimiento principal me debe dejar la base de datos tomada con alguna transaction, pero no encuentro la forma de hacer un commit cuando se ejecuta el delete.

bueno eso, espero puedan ayudarme. Gracias.

AGAG4 02-07-2008 23:56:37

Intentalo como :

Código SQL [-]
EXECUTE PROCEDURE elimina_uspc(:viejo);

Commit Work;

Addicto 04-07-2008 16:02:39

Cita:

Empezado por AGAG4 (Mensaje 297899)
Intentalo como :

Código SQL [-]EXECUTE PROCEDURE elimina_uspc(:viejo); Commit Work;

Hola, intente lo que me mencionaste pero me arroja error por la sintaxis, yo creo que debe haber alguna forma de instanciar la transaccion, por que lo que hago yo es un delete pero hay que efectuar el commit e esa transaccion.....


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

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