Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   manejo de horas en un turno (https://www.clubdelphi.com/foros/showthread.php?t=51745)

federicorl 27-12-2007 17:59:06

manejo de horas en un turno
 
estoy manejando un programita que registra eventos estos los registra seleccionando en que turno ocurrieron, para esto hice una tabla de turnos qeu contiene la hora en que inicia el turno y la hora en que termina, esto me funciona bien en los dos primero turnos uno empieza a las 6:01 y termina a las 14:00 el otro empieza a las 14:01 y termina a las 22:00 pero el que empieza a las 22:01 termina a las 6:00 del otro dia y el query del programa no lo identifica:

'Select * from Turnos where Inicio <= '+#39+lahora+#39+' and Termino >= '+#39+lahora+#39

Alguien sabe como resolverlo, de antemano mil gracias por su ayuda

jachguate 27-12-2007 19:44:08

No entiendo bien la semántica de tu consulta... pero a mi me parece que la consulta podría funcionar así:

Código SQL [-]
select * from turnos 
where  (inicio < termino and :lahora between inicio and termino)
  or ((inicio > termino) and ((:lahora >= inicio and :lahora <= '23:59:59') or (:lahora <= termino)))

La idea es esa...

Hasta luego.

;)

egostar 27-12-2007 20:13:26

Bueno, si, la apreciacion es correcta, tal vez si lo vemos en lenguaje común la consulta debería de ser algo así...

Se tienen dos horas y una solo fecha para obtener el reporte.

Fecha = 27/12/2007
HoraInicial = 23:00:01
HoraFinal = 06:00:00

La consulta debe de considerar la consulta de la fecha de un dia anterior a partir de las 23:00:01 y la fecha del dia actual hasta las 6 horas.

Código SQL [-]
 
SELECT * FROM TABLA
WHERE (FECHA = :FINI AND HORA >= :HINI) or (FECHA = :FFIN AND HORA <= :HFIN)

Pasamos los parámetros

Código Delphi [-]
  Query1.ParamByName('FINI').Value := Fecha-1; //Asumo que Fecha es un TDateTime
  Query1.ParamByName('HINI').Value := '23:00:01';
  Query1.ParamByName('FFIN').Value := Fecha;
  Query1.ParamByName('HFIN').Value := '06:00:00';
  Query1.Open;

Dejanos saber los avances de este asunto

Salud OS

Lepe 28-12-2007 13:42:03

Si puedes, te aconsejo que el campo en la base de datos sea de formato Fecha y hora (todo en un mismo campo). La razón es bien sencilla, la hora depende de la fecha, sobre todo para realizar cálculos.

Es normal que te pidan las horas trabajadas en la semana de un trabajador, al tener la fecha y hora por separado, no puedes realizar sumas y restas.

Al tiempo de consultar, pones 2 TdateTimePicker, uno para la fecha y otro para la hora. Al realizar la consulta, concatenas el valor de dichos TdateTimes

Código Delphi [-]
var TheIni, TheEnd :TDateTime;
begin 
   TheIni := RecodeDate(TheIni, datetimepicker1.date);
   TheIni := REcodeTime(TheIni, datetimepicker2.time);

   TheEnd := RecodeDate(TheEnd, datetimepicker3.date);
   TheEnd := REcodeTime(TheEnd, datetimepicker4.time);

    query1.sql.text:= 'select * from turnos where fechaIni >= :ini and FechaFin <= :Fin';
   query1.parambyname('ini').Value := Theini;
   query1.parambyname('Fin').Value := TheEnd;
   query1.Open;

Saludos


La franja horaria es GMT +2. Ahora son las 19:29:54.

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