[Lazarus-es] trabajando con horas
Ismael L. Donis García
ismael en citricos.co.cu
Lun Oct 18 18:14:25 CEST 2010
Paula hacerlo dentro de un procedimiento tienes que hacer el chorrete como dices, o caso contrario tienes que hacer un while e ir llenando los datos con la suma ya que un procedimiento almacenado no se puede llamar desde un select.
Por tal motivo es mejor hacer una función dentro de una udf, para eso debes usar delphi o C, lo cual no tengo instalado, pero si no sabes hacerlo dime que lo instalo y lo hago.
por ejemplo el procedimiento almacenado sería así:
SET TERM ^ ;
CREATE PROCEDURE P_TIME (
DEC_SEGUNDOS Decimal(15,4) )
RETURNS (
VCH_HORAS Varchar(15) )
AS
BEGIN
/* Procedimiento para calcular las horas a partir de los segundos */
vch_horas = cast((dec_segundos/3600) as integer) || ':'
|| cast((((dec_segundos/3600) - cast((dec_segundos/3600) as integer))*60) as integer) || ':'
|| (((((dec_segundos/3600) - cast((dec_segundos/3600) as integer))*60)-cast((((dec_segundos/3600) - cast((dec_segundos/3600) as integer))*60) as integer))*60);
suspend;
END^
SET TERM ; ^
GRANT EXECUTE
ON PROCEDURE P_TIME TO SYSDBA;
Si miras es fácil armarte una función en C con los datos que te paso.
Saludos cordiales.
=========
|| ISMAEL ||
=========
----- Original Message -----
From: Paola Bruccoleri
To: Spanish version of Lazarus List
Sent: Monday, October 18, 2010 10:47 AM
Subject: Re: [Lazarus-es] trabajando con horas
El 18/10/2010 10:58 a.m., Ismael L. Donis García escribió:
Ante todo me perdona por la tardanza de la respuesta pero no fue hasta ahora que vengo al trabajo.
select cast((sum(a.hs_trabajo - cast('0:0' as time))/3600) as integer) || ':'
|| cast((((sum(a.hs_trabajo - cast('0:0' as time))/3600) - cast((sum(a.hs_trabajo - cast('0:0' as time))/3600) as integer))*60) as integer)
|| ':'
|| (((((sum(a.hs_trabajo - cast('0:0' as time))/3600) - cast((sum(a.hs_trabajo - cast('0:0' as time))/3600) as integer))*60)
-cast((((sum(a.hs_trabajo - cast('0:0' as time))/3600) - cast((sum(a.hs_trabajo - cast('0:0' as time))/3600) as integer))*60) as integer))*60)
as hora from form_03 a
Y respondiendo al compañero que dijo que no quería saber de Firebird, pues yo por el contrario no quiero saber de otro motor que no sea Firebird, estoy con él hace 6 años con un gran número de aplicaciones con gran carga de trabajo y hasta ahora ningún cliente me ha llamado nunca a decirme que ha tenido algún tipo de problema
Saludos cordiales a todos.
=========
|| ISMAEL ||
=========
PD: Paula como bien te dijeron te puedes craear una función o un procedimiento almacenado para ello, que realmente es como debe ser ya que la capa de datos debe estan dentro de la BD.
Hola Ismael..
esto funciona ok!
pero me podrías ayudar en crear el procedimiento almacenado?
porque como ya comenté, tengo varios campos de este tipo, donde debo obtener una suma... y esto es un chorrete que se debe optimizar.
otra cosa... el reporte será algo así:
máquina 1 - 116:05
maquina 2 - 84:30
....
¿cómo obtengo la suma en el reporte? porque todo eso es un string.. quizás la solución más conveniente es hacer al revés.. obtener segundos y armar el resultado en el lazreport..
chauuuuuuu
------------------------------------------------------------------------------
_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20101018/330c0f9d/attachment-0002.html>
More information about the Lazarus-es
mailing list