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 -501 Attemp to reclose... (https://www.clubdelphi.com/foros/showthread.php?t=81229)

brandolin 24-10-2012 06:57:04

Error -501 Attemp to reclose...
 
Hola a todos, estoy usando: Delphi 2007 + firebird 1.5 + zeos v7.

Tengo unos procedimientos almacenados que cuando los ejecuto, tanto en modo diseño como ejecución dan el error... "SQL Error: Dynamic SQL Error SQL Error code = -501 Attempt to reclose a closed cursor. Error Code: -501. The cursor identified in a FETCH o CLOSE statement in not open"

Alguien sabe que puede estar pasando. ???

Antes usaba zeos 6.6. y no tenia este problema, pero por algunos problemas en otros software actualice a zeos 7.0, no creo que este sea el problema.

¿alguien que pueda ayudarme?


Desde ya muchas gracias.

olbeup 24-10-2012 08:44:12

Lo que te está diciendo el error, es que estas cerrando un CURSOR que ya está cerrado, revisa el procedimiento, seguramente en la versión 6.6 no te avisara del error pero en la versión 7 eso ha cambiado o estás utilizando el FETCH estando cerrado el CURSOR.

Un saludo

Casimiro Notevi 24-10-2012 11:26:27

Tampoco estaría nada mal que pusieras el código que lo veamos ;)

brandolin 24-10-2012 15:04:15

No entiendo como se manejan los cursores en un procedimiento almacenado.

Este es el procedimiento que da el error.

Código SQL [-]
CREATE PROCEDURE CALC_CUENTACORRIENTE (
    PCOD_CLIENTE INTEGER)
AS
DECLARE VARIABLE HABER FLOAT;
DECLARE VARIABLE DEBE FLOAT;
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE TMP_SALDO FLOAT = 0;
declare variable statuscta varchar(1);
declare variable limitesaldo float;
begin
  TMP_SALDO = 0;
  for select ID, DEBE, HABER from CLIENTES_CUENTA
      where COD_CLIENTE =:PCOD_CLIENTE
            and (cerrado = '0')
      order by fecha,id
      into :ID, : DEBE, :HABER
  do begin
     if (NOT : DEBE IS NULL) then TMP_SALDO = :TMP_SALDO + : DEBE;
     if (NOT :HABER IS NULL) then TMP_SALDO = :TMP_SALDO - :HABER;
     UPDATE clientes_cuenta SET SALDO=:TMP_SALDO WHERE ID = :ID;
  end
  update clientes set saldo_cta = :tmp_saldo
  where cod_cliente = : pcod_cliente;
  
  /* Trigger body */
  select LIMITE_CTA, OPERA_CTACTE from clientes
  where cod_cliente = :PCOD_CLIENTE
  into :limitesaldo, :statuscta;
  if (:tmp_saldo >= :limitesaldo) then
  begin
       /* se deshabilita la cuenta */
       update clientes set OPERA_CTACTE = '0'
       where cod_cliente = :PCOD_CLIENTE;
  end
  else begin
     if (:statuscta = '0') then
     begin
          /*se habilita la cuenta*/
          update clientes set OPERA_CTACTE = '1'
          where cod_cliente = :PCOD_CLIENTE;
     end
  end
end

El error se produce incluso en el entorno de desarrollo. Este código esta de hace tiempo y nunca tenia problemas, incluso funciona bien, es decir, hace lo que tiene que hacer.
Ademas hay otros SP que estan teniendo el mismo problema y otros que funcionan bien...
¿alguna idea ? Gracias.

Casimiro Notevi 24-10-2012 16:05:48

Ve comprobando por partes, pon en comentario, por ejemplo, desde /* Trigger body */ hasta el final y prueba si da error, luego vas "descomentando" por trozos hasta encontrar el lugar exacto del problema.

olbeup 25-10-2012 08:22:39

Quizás el problema esté en la separación ": DEBE", ": pcod_cliente" en vez de ":DEBE", ":pcod_cliente" puede ser.

Un saludo

Casimiro Notevi 25-10-2012 10:36:22

No, eso lo hemos modificado para que no salgan muñequitos en pantalla :)

brandolin 25-10-2012 15:09:07

eso es cierto, lo modificamos por los muñequitos... estoy probando el SP en partes como recomendaron. Los mantengo informados.

brandolin 02-04-2013 19:43:22

Perdon por reabrir este hilo pero resulta que sigo con el mismo problema. En su momento lo solucione cambiando el componente TZStoreProc (Zeos) por TSQLStoreProc, este último funciona sin problemas con el storeproc escrito en la base de datos.

Para hacer esto tengo que tener dos conecciones a la BD con todo lo que trae eso... alguien sabe de este bug en zeos y si ha sido solucionado ???

Gracias.

mlara 03-11-2018 22:12:44

Yo obtuve el mismo mensaje -"Attempt to reclose a closed cursor"- al ejecutar un SP usando la sentencia SELECT. El inconveniente en este caso particular se presentó al pasar a un parámetro de tipo SMALLINT un valor entero mayor que el valor máximo del tipo SMALLINT (32767).

Firebird 3.0.4


La franja horaria es GMT +2. Ahora son las 02:06:55.

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