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 "Problem in BindingCursor" (https://www.clubdelphi.com/foros/showthread.php?t=25054)

Crandel 10-09-2005 10:54:05

Error "Problem in BindingCursor"
 
Hola a todos, lo que quiero es trasladar todos los registros que cumplen una cierta condición de una tabla a otra.

Para ello uso una función EXTRACTMONTH de la UDF rFunc.

Cree este procedimiento:
Código SQL [-]
CREATE PROCEDURE MOVER_MOV_TEMP_A_FINAL
AS
BEGIN
  // inserto
  INSERT INTO MOV_FINAL (ID_MOV, REF_CARGO, ENTRADA, SALIDA)
    SELECT * FROM MOV_TEMP
    WHERE SALIDA IS NOT NULL
    AND EXTRACTMONTH(SALIDA) < EXTRACTMONTH('NOW');

  // borro
  DELETE FROM MOV_TEMP
    WHERE SALIDA IS NOT NULL
    AND EXTRACTMONTH(SALIDA) < EXTRACTMONTH('NOW');
END^

el procedimiento se ejecuta bien desde el IBOConsole, pero me devuelve el error "Problem in BindingCursor".

pero desde C++Builder con los IBX directamente se me cuelga todo.

si elimino la condición que usa el EXTRACTMONTH todo funciona bien.

Alguien sabe a que puede ser?

rastafarey 12-09-2005 16:35:45

resp
 
Mira me parece un poc extraño ya que he usado esa funcion y no m eda ningun problema no has probado usas la mismo instruccion sobre esa bade de datos pero solo pra seleccionar haber si hay algun dato que esta corrupto y te genera el problema o quisas sea el formato o lago a si

Crandel 13-09-2005 07:14:16

Es muy extraño no logre deducir que es el error.

Verifique toda la tabla y no tengo tengo datos corrupto.

Tambien proble ejecutar solo la parte del select y todo funciona bien.

estoy confundido :confused: :confused: :confused:

Crandel 13-09-2005 07:55:00

Solucionado, estaba intentando insertar con ID repetido cuando mi tabla no lo permitia :D

supuestamente no debían estar repetidos, pero bueno ...

Crandel 13-09-2005 08:19:58

No esta solucionado
 
Pues no, no esta solucionado, lo de los ID repetidos era solo producto de varios códigos de prueba.

es un misterio

si ejecuto el INSERT y el DELETE por separado funcionan perfecto, pero dentro del procedimiento no ... aaaarrrrrgggggg

si pongo uno solo el INSERT o el DELETE dentro del procedimiento tampoco funciona.

que loco

rastafarey podrias probar si vos podes usar la función EXTRACTMONTH o FIRSTDAYMONTH dentro de un procedimiento por favor?

rastafarey 13-09-2005 17:04:25

Resp
 
Ya que no veo el problema comencemos por el principio.

Que version de de interbase o firebird usas y desde donde ejecutas dicho procedure.

Crandel 13-09-2005 18:53:56

Cita:

Empezado por rastafarey
Que version de de interbase o firebird usas y desde donde ejecutas dicho procedure.

Firebird 1.5.algo, el último estable.
Si lo ejecuto desde C++Builder con los IBX o desde wSQL, se cuelga.
Si lo ejecuto desde IBOConsole, me da este error.

rastafarey 13-09-2005 20:34:37

resp
 
Me puedes enviar un script con la strutura de la bd para hacer la prueva

Crandel 14-09-2005 04:35:28

Hola rastafarey, perdona que recien conteste a esta hora, la verdad es que hoy fue un día dificil y largo.

Bueno, La idea es crear una DB llamada PRUEBA o lo que sea, genere una mini DB para simular el problema que tengo sin perder tiempo en el resto.

Este es el código para generar la DB
Código SQL [-]
/* Creamos las tablas MOV_TEMP y MOV_FINAL
   ======================================= */
CREATE TABLE MOV_TEMP (
    ID_MOV INTEGER NOT NULL PRIMARY KEY, 
    REF_CARGO INTEGER NOT NULL,
    ENTRADA TIMESTAMP DEFAULT 'now' NOT NULL,
    SALIDA TIMESTAMP);

CREATE TABLE MOV_FINAL (
    ID_MOV INTEGER NOT NULL PRIMARY KEY, 
    REF_CARGO INTEGER NOT NULL,
    ENTRADA TIMESTAMP DEFAULT 'now' NOT NULL,
    SALIDA TIMESTAMP);
    
/* Generador para el ID */   
CREATE GENERATOR INC_MOV;
  
    
/* Declaramos la función externa */   
DECLARE EXTERNAL FUNCTION FIRSTDAYMONTH
   TIMESTAMP
   RETURNS TIMESTAMP
  ENTRY_POINT 'fn_firstdaymonth'  MODULE_NAME 'rfunc';
  
  
SET TERM ^ ;

/* Trigger que incrementa el ID */   
CREATE TRIGGER BI_MOV FOR MOV_TEMP
ACTIVE BEFORE INSERT AS
BEGIN
  MOV_TEMP.ID_MOV = gen_id(INC_MOV, 1);
END^

/* Procedimiento que me da error
  Es para mover los registros del mes anterior a la otra tabla */ 
CREATE PROCEDURE MOVER_MOV_TEMP_A_FINAL
AS
BEGIN
  INSERT INTO MOV_FINAL (ID_MOV, REF_CARGO, ENTRADA, SALIDA)
    SELECT * FROM MOV_TEMP
    WHERE SALIDA IS NOT NULL
    AND SALIDA < FIRSTDAYMONTH('NOW');

  DELETE FROM MOV_TEMP
    WHERE SALIDA IS NOT NULL
    AND SALIDA < FIRSTDAYMONTH('NOW');
END^

SET TERM ; ^
y con estas instrucciones la usamos
Código SQL [-]
/* Ejecutamos esto unas cuantas veces para generar datos */   
/* con ambas fechas */
INSERT INTO MOV_TEMP(REF_CARGO, ENTRADA, SALIDA)
VALUES(1, '2005/08/13 23:39:05', '2005/08/13 23:39:05');

INSERT INTO MOV_TEMP(REF_CARGO, ENTRADA)
VALUES(1, '2005/08/13 23:39:05');

INSERT INTO MOV_TEMP(REF_CARGO, ENTRADA)
VALUES(1, 'now');


/* Ejecuto el procedimiento */
EXECUTE PROCEDURE MOVER_MOV_TEMP_A_FINAL
Si ves el error te lo agradecería.

rastafarey 14-09-2005 15:07:24

Resp
 
Mira no probe el script ya que pienso que tienes un problema de antemano. El formato de fecha ya que ib/fb usan la fecha en formato gringo mes/dia/año y no año/dia/mes. Comiensa por solucionar eso ya que si tratas de sacar el mes te daria un mes fuera del rango. Aunque no entiendo si has insertado un afecha de esa forma el manejador no te alla dado un error.

Espero te sirva de ayuda.

Crandel 14-09-2005 18:05:29

La realidad es que no uso esta forma de insertar las fechas, este es solo un ejemplo para poder ejecutarlos desde alguna consola sin hacer ninguna aplicación.

Yo inserto las fechas desde mi programa, el formato que puse arriba es para que lo hacepte IBOConsole, con el formato que vos me decis da un error de conversión.

Ademas es sólo la forma de insertar, despues cuando listo los datos, estos se muestran de forma correcta.


La franja horaria es GMT +2. Ahora son las 15:31:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi