PDA

Ver la Versión Completa : Error -501 Attemp to reclose...


brandolin
24-10-2012, 06:57:04
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.

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