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)
-   -   TimeStamp = TimeStamp me da error (https://www.clubdelphi.com/foros/showthread.php?t=72724)

Chogo 08-03-2011 22:09:48

TimeStamp = TimeStamp me da error
 
Hola amigos de foro

tengo un StoreProcedure que consulto una tabla, la cuestion es que recupero un campo timestamp de esa misma tabla y lo almacena una
variable que se llama "XFECHA_HORA"

Código SQL [-]
SELECT 
    FECHA_HORA 
FROM 
    MARCACIONES_RELOJ 
WHERE 
    MARCACIONES_RELOJ.CODEMPLEADO = :CODEMPLEADO AND       MARCACIONES_RELOJ.FECHA = :FECHA
ORDER BY
    MARCACIONES_RELOJ.FECHA_HORA
INTO 
    :XFECHA_HORA

Pero despues quiero que otra variable tipo timestamp tome ese mismo valor
en el siguiente codigo

Código SQL [-]
    IF (COLUMNA = 0) THEN
    ENTRADA0=XFECHA_HORA;

Al hacer esto me da el siguiente error.

Overflow occurred during data type conversion.Conversion error from string "28/02/2011 06:59:31 a.m.".
SQL Code: -413
IB Error Number: 3355443


Lo raro es que no siempre me genera este error, es con algunos registros

uso firebird 2.05

Chris 08-03-2011 22:26:09

Deberías de colocar el código completo del Stored Procedure para poder debuggerarlo.

Chogo 08-03-2011 22:35:54

Este es el storeprocedure lo que hace es mostrar sus marcaciones de asistencia el resultado se observa en la imagen en la parte de abajo.

http://www.subirimagenes.com/otros-m...1-6079805.html

Código SQL [-]
CREATE PROCEDURE MARCACIONES_CODEMPELEADO(
  INICIO DATE,
  FINAL DATE,
  CODIGO INTEGER)
RETURNS(
  LINEA VARCHAR(30) CHARACTER SET NONE,
  CODEMPLEADO INTEGER,
  FECHA DATE,
  NUM_DIA SMALLINT,
  DIA VARCHAR(15) CHARACTER SET NONE,
  ENTRADA0 TIMESTAMP,
  SALIDA0 TIMESTAMP,
  ENTRADA1 TIMESTAMP,
  SALIDA1 TIMESTAMP,
  ENTRADA2 TIMESTAMP,
  SALIDA2 TIMESTAMP,
  FALTA VARCHAR(1) CHARACTER SET NONE,
  HORAS_ORD VARCHAR(10) CHARACTER SET NONE,
  HORAS_25 VARCHAR(10) CHARACTER SET NONE,
  HORAS_50 VARCHAR(10) CHARACTER SET NONE,
  HORAS_75 VARCHAR(10) CHARACTER SET NONE,
  HORAS_100 VARCHAR(10) CHARACTER SET NONE,
  MINUTOS_ORD SMALLINT,
  MINUTOS_25 SMALLINT,
  MINUTOS_50 SMALLINT,
  MINUTOS_75 SMALLINT,
  MINUTOS_100 SMALLINT,
  MINUTOS_ORD0 SMALLINT,
  MINUTOS_ORD1 SMALLINT,
  MINUTOS_ORD2 SMALLINT,
  MINUTOS_250 SMALLINT,
  MINUTOS_251 SMALLINT,
  MINUTOS_252 SMALLINT,
  MINUTOS_500 SMALLINT,
  MINUTOS_501 SMALLINT,
  MINUTOS_502 SMALLINT,
  MINUTOS_750 SMALLINT,
  MINUTOS_751 SMALLINT,
  MINUTOS_752 SMALLINT,
  MINUTOS_1000 SMALLINT,
  MINUTOS_1001 SMALLINT,
  MINUTOS_1002 SMALLINT)
AS
DECLARE VARIABLE FILA INTEGER;
DECLARE VARIABLE COLUMNA SMALLINT;
DECLARE VARIABLE XFECHA_HORA TIMESTAMP;
BEGIN

  FOR
                    SELECT
                    MARCACIONES_RELOJ.CODEMPLEADO,
                    LINEA.LINEA
                    FROM
                    MARCACIONES_RELOJ
                      INNER JOIN LINEA ON (MARCACIONES_RELOJ.IDLINEA = LINEA.IDLINEA)
                    WHERE
                    FECHA BETWEEN :INICIO AND :FINAL AND MARCACIONES_RELOJ.CODEMPLEADO = :CODIGO
                    GROUP BY
                    MARCACIONES_RELOJ.CODEMPLEADO,
                    LINEA.LINEA
                    ORDER BY
                    LINEA.LINEA,
                    MARCACIONES_RELOJ.CODEMPLEADO
  
        INTO
            :CODEMPLEADO,
            :LINEA
  DO 
  BEGIN
       /*ESTE CICLO CREA 7 REGISTROS, ES UN REGISTRO DE POR CADA DIA DE LA SEMANA*/
       Fila=1;
       FECHA = INICIO;
       WHILE (Fila<>8) DO
       BEGIN 
               NUM_DIA=FILA;
               COLUMNA=0;
               
               ENTRADA0=NULL;
               SALIDA0=NULL;
               
               ENTRADA1=NULL;
               SALIDA1=NULL;
               
               ENTRADA2=NULL;
               SALIDA2=NULL;
               
               FOR 
                       SELECT 
                          FECHA_HORA 
                       FROM 
                          MARCACIONES_RELOJ 
                       WHERE 
                          MARCACIONES_RELOJ.CODEMPLEADO = :CODEMPLEADO AND  MARCACIONES_RELOJ.FECHA = :FECHA
                       ORDER BY
                             MARCACIONES_RELOJ.FECHA_HORA
                       INTO 
                             :XFECHA_HORA                            
                       
               DO
               BEGIN
                   /* AQUI CONSULTAS LAS MARCACIONES DE UN EMPLEADO EN UNA SOLA FECHA */     
                   
                   
                   IF (COLUMNA = 0) THEN
                   ENTRADA0=XFECHA_HORA;
                        
                   IF (COLUMNA = 1) THEN
                   SALIDA0=XFECHA_HORA;

                   IF (COLUMNA = 2) THEN
                   ENTRADA1=XFECHA_HORA;
                   
                   IF (COLUMNA = 3) THEN
                   SALIDA1=XFECHA_HORA;                   

                   IF (COLUMNA = 4) THEN
                   ENTRADA2=XFECHA_HORA;
                   
                   IF (COLUMNA = 5) THEN
                   SALIDA2=XFECHA_HORA;  
                   
                   
                   COLUMNA = COLUMNA + 1;
               END 
              
              IF (ENTRADA0 IS NULL) THEN FALTA = 'X'; ELSE FALTA='';                  
              IF (NUM_DIA = 1) THEN DIA = 'LUNES';
              IF (NUM_DIA = 2) THEN DIA = 'MARTES';
              IF (NUM_DIA = 3) THEN DIA = 'MIERCOLES';
              IF (NUM_DIA = 4) THEN DIA = 'JUEVES';
              IF (NUM_DIA = 5) THEN DIA = 'VIERNES';
              IF (NUM_DIA = 6) THEN DIA = 'SABADO';
              IF (NUM_DIA = 7) THEN DIA = 'DOMINGO';
              
               
              /* CALCULO DE LAS HORAS ORDINARIAS Y EXTRA*/ 
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA0,:ENTRADA0) INTO MINUTOS_ORD0,MINUTOS_250,MINUTOS_500,MINUTOS_750, MINUTOS_1000;
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA1,:ENTRADA1) INTO MINUTOS_ORD1,MINUTOS_251,MINUTOS_501,MINUTOS_751, MINUTOS_1001;
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA2,:ENTRADA2) INTO MINUTOS_ORD2,MINUTOS_252,MINUTOS_502,MINUTOS_752, MINUTOS_1002;
              
              MINUTOS_ORD = MINUTOS_ORD0 + MINUTOS_ORD1 + MINUTOS_ORD2;
              MINUTOS_25 = MINUTOS_250 + MINUTOS_251 + MINUTOS_252;
              MINUTOS_50 = MINUTOS_500 + MINUTOS_501 + MINUTOS_502;
              MINUTOS_75 = MINUTOS_750 + MINUTOS_751 + MINUTOS_752;
              MINUTOS_100 = MINUTOS_1000 + MINUTOS_1001 + MINUTOS_1001;
              
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_ORD) INTO HORAS_ORD;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_25) INTO HORAS_25;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_50) INTO HORAS_50;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_75) INTO HORAS_75;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_100) INTO HORAS_100;
              
               
              SUSPEND;
              FECHA = INICIO + FILA;
              Fila = Fila + 1;
              
       END       
       /* Procedure body */
  END
END

Chris 08-03-2011 23:07:15

Como te aseguras que el error está en la línea?
Código:

IF (COLUMNA = 0) THEN
    ENTRADA0=XFECHA_HORA;


rastafarey 10-03-2011 01:47:51

Resp
 
Seguro que este codigo compila?.

guillotmarc 10-03-2011 09:53:06

Hola.

Cita:

Empezado por Chogo (Mensaje 392912)
Overflow occurred during data type conversion.Conversion error from string "28/02/2011 06:59:31 a.m.".
SQL Code: -413
IB Error Number: 3355443

Parece que alguno de los campos implicados que quieres asignar a una variable Timestamp, está definido como string en la base de datos.

NOTA: Te recomiendo que utilices el depurador de procedimientos almacenados de IBExpert, para ir ejecutando linea a linea el procedimiento hasta localizar la línea concreta donde salta el error.

Saludos.

Chogo 10-03-2011 20:45:46

Gracias por su ayuda.

El depurador se detenia en esta linea y mostraba la execption

IF (COLUMNA = 0) THEN
ENTRADA0=XFECHA_HORA;

Pero resulta que no era eso. si no un varchar con una longitud bien corta. Gracias por sus comentarios, pero ya logre resolver el problema.

rastafarey 16-03-2011 04:13:38

resp
 
Esto no deberia compilar.
Código SQL [-]
/* CALCULO DE LAS HORAS ORDINARIAS Y EXTRA*/ 
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA0,:ENTRADA0) INTO MINUTOS_ORD0,MINUTOS_250,MINUTOS_500,MINUTOS_750, MINUTOS_1000;
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA1,:ENTRADA1) INTO MINUTOS_ORD1,MINUTOS_251,MINUTOS_501,MINUTOS_751, MINUTOS_1001;
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA2,:ENTRADA2) INTO MINUTOS_ORD2,MINUTOS_252,MINUTOS_502,MINUTOS_752, MINUTOS_1002;
 
              
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_ORD) INTO HORAS_ORD;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_25) INTO HORAS_25;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_50) INTO HORAS_50;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_75) INTO HORAS_75;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_100) INTO HORAS_100;

A las variables le faltan los dos :


La franja horaria es GMT +2. Ahora son las 15:11:21.

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