Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-03-2011
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 19
Chogo Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 08-03-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Deberías de colocar el código completo del Stored Procedure para poder debuggerarlo.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 08-03-2011
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 19
Chogo Va por buen camino
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

Última edición por Chogo fecha: 08-03-2011 a las 22:41:38.
Responder Con Cita
  #4  
Antiguo 08-03-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Como te aseguras que el error está en la línea?
Código:
IF (COLUMNA = 0) THEN
    ENTRADA0=XFECHA_HORA;
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 10-03-2011
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Seguro que este codigo compila?.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #6  
Antiguo 10-03-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Cita:
Empezado por Chogo Ver Mensaje
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 10-03-2011
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 19
Chogo Va por buen camino
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.

Última edición por Chogo fecha: 10-03-2011 a las 20:50:12.
Responder Con Cita
  #8  
Antiguo 16-03-2011
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
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 :
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TIMESTAMP en restriccion Cañones SQL 6 28-08-2007 23:19:27
timestamp y milisegundos Abel Garcia Firebird e Interbase 1 19-09-2005 01:45:06
timestamp y milisegundos ya...... Abel Garcia Firebird e Interbase 0 17-09-2005 07:17:38
Utilizar TimeStamp jmedina Varios 6 13-12-2004 18:40:37
Timestamp y bde 5.2 Toni Firebird e Interbase 2 27-05-2003 09:26:33


La franja horaria es GMT +2. Ahora son las 15:58:16.


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
Copyright 1996-2007 Club Delphi