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)
-   -   Problema con Suma de Campos TIME en SP (https://www.clubdelphi.com/foros/showthread.php?t=3334)

cacuna 03-09-2003 01:24:29

Problema con Suma de Campos TIME en SP
 
Hola que tal. Tenia mucho que no publicaba un problema en el foro, afortunadamente, pero aqui estoy de nuevo molestando a los Masters de la programacion.

Estoy haciendo un SP en el IBManager 3.0.07. Trabajo con Firebird 1.0.3.972 y la BD con Dialecto 3.
Ma aparece el Error del fondo de este mensaje.
Al parecer es al sumar dos campos de tipo Time, lo curioso es que si en vez de sumarlo lo resto no me marca error.
Alguien que me pueda ayudar?

Gracias de antemano y saludos a todos los foristas.


---------- STATEMENT ----------

CREATE PROCEDURE RECOLECTA (
VFECHA DATE,
VNOEMP INTEGER)
AS
declare variable vPERIODOINICIO date;
declare variable vPERIODOTERMINO date;
declare variable vTIPO CHAR(7);
declare variable vMinEntrada time;
declare variable vMaxEntrada time;
declare variable vGraciaAntesEntrada time;
declare variable vHrEntrada time;
declare variable vHrSalida time;
declare variable vAntesEntrada time;
declare variable vDespuesEntrada time;
declare variable vDespuesSalida time;

BEGIN

/* SELECCIONA PERIODO EN BASE A FECHA*/
SELECT PE_INICIO, PE_TERMINO
FROM CT_PERIODOS
WHERE :vFECHA BETWEEN PE_INICIO AND PE_TERMINO
INTO :vPERIODOINICIO, :vPERIODOTERMINO;

Select CH_TIPO
From AT_CHECADAS
Where (CH_NOEMPLEADO = :VNOEMP) AND
(CH_FECHA BETWEEN :vPERIODOINICIO AND :vPERIODOTERMINO)
Order by CH_FECHA,CH_HORA desc
INTO :vTIPO;


/* VERIFICA SI HAY CHECADAS EN ESE PERIODO*/
if (vTIPO IS null) then
vTIPO = 'ENTRADA';
ELSE
BEGIN
if (VTIPO = 'SALIDA') then
vTIPO = 'ENTRADA';
ELSE
vTIPO = 'SALIDA';
END


/* SELECCIONA EL TURNO DEL EMPLEADO */
Select B.TU_HORAENTRADA,B.TU_HORASALIDA,B.TU_ANTESENTRADA,B.TU_DESPUESENTRADA,B.TU_DESPUESSALIDA,B.TU_GRACI AANTESENTRADA
From AT_EMPLEADOS A,CT_TURNOS B
Where A.EM_TURNO = B.TU_TURNO AND A.EM_NOEMPLEADO =:vNoEmp
INTO :vHrEntrada, :vHrSalida, :vAntesEntrada, :vDespuesEntrada, :vDespuesSalida, :vGraciaAntesEntrada;


/* CREA RANGOS DE HORAS PARA CHECADAS DE E/S */
vMinEntrada = (vHRENTRADA - vANTESENTRADA);
vMaxEntrada = (vHRENTRADA + vDESPUESENTRADA);


/* SUSPEND;*/
END



---------- ERROR MESSAGE ----------

fmCompile.quCompile:
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Dynamic SQL Error.
expression evaluation not supported.

bismarito 03-09-2003 16:37:38

Hola, estas haciendo la misma aplicación que yo, y tropesaste con el mismo problema, yo estoy utilizando interbase 6


y no podia sumar campos de tipo time lo que sucede es que el valor varia entre 0:00:00 y 23:59:59999

lo que yo hize es por ejemplo es:

tolerancia=extract(hour from hora)*3600+extract(minute from hora)*60+extract(second from hora)

if (:horaactual < :hora_ingreso+toleranca) then

........


recién me complilaba y trabaja bien, le puedes sumar una varialbe entera que contenga los segundos a adicionar, espero te sirva.

Bismarito


La franja horaria es GMT +2. Ahora son las 04:19:46.

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