[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