Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problemas al comparar un rango de fechas con datetimepicker (https://www.clubdelphi.com/foros/showthread.php?t=42590)

robertillo 17-04-2007 23:32:17

problemas al comparar un rango de fechas con datetimepicker
 
hola,

Resulta que tengo dos datetimepicker para comparar un rango de fechas desde una BD (interbase) los cuales se cargan en un grid, pero tengo un problema a la hora que se cargan dichos datos en la grid, por ejemplo:

pongo 01/11/2007 (Fecha1) a 23/11/2007 (Fecha2) y a la primera me aparecen los datos pero no me aparecen los del día 1/11/2007 y el datepicker (Fecha1) me cambia a 24/11/2007. Cuando le doy de nuevo el rango si me aparece todos los datos desde el 1 hasta el 23.

Se que algo estoy haciendo mal, intuyo que puede ser la forma como resto las fechas o tendré que convertir variables a datetime?, aqui está el código que pongo en el botón que carga la grid de acuerdo a las fechas para ver si alguien me ayuda. Gracias.


Código Delphi [-]
//procedure...
//Fecha1 es datetimepciker1 y Fecha 2 es datetimepciker2
pgDatos.RowCount:= Round(Fecha2.Date-Fecha1.Date)+2;
for f:= 0 to Round(Fecha2.Date-Fecha1.Date) do
begin
Fecha1.Time:= strtoTime('00:00:00');
qRecaudacion.ParamByName('FechaInicio').AsDateTime:= Fecha1.DateTime;
Fecha1.Time:= strtoTime('23:59:59');
qRecaudacion.ParamByName('FechaFinal').AsDateTime:= Fecha1.DateTime;
qRecaudacion.ParamByName('ruta').AsString:= ComboBox1.Items[ComboBox1.ItemIndex];
qRecaudacion.Open;
//...
else
MessageDlg('No se encontró información de acuerdo con los parámetros indicados.', mtError,[mbOk], 0);
qRecaudacion.Close;
Fecha1.Date:= Fecha1.Date+1;

egostar 18-04-2007 00:47:38

Cita:

Empezado por robertillo
Fecha1.Date:= Fecha1.Date+1;

El datetimepicker1 cambia por esa linea, como está dentro del for va cambiando el valor de fecha1 (datetimepicker1) conforme cambia f, que por cierto no entiendo que quieres hacer con el for, si basta usar la sentencia SQL solo una vez y te dará la informacion que quieres.

Salud OS.

luisgutierrezb 18-04-2007 00:58:58

coincido con egostar, se ve raro el for pero bueno, para las horas en lugar de tanta conversion te podria servir:

Código Delphi [-]
Fecha1.DateTime  := Trunc(Fecha1.DateTime);
Fecha2.DateTime := Trunc(Fecha2.DateTime) + 0.99999; //son 5 nueves
//tambien puede funcionar:
Fecha2.DateTime := Trunc(Fecha2.DateTime) + 1; 
//aqui aumenta al otro dia pero como serian las 00:00:00 no incluye ese dia

algo que me pasa con ciertos manejadores de bases de datos es que al usar like no me toma el primero o el ultimo (access no me toma el ultimo), lo mas facil es agregar o quitar un dia segun lo que falte o usar <= y >= en lugar del like

robertillo 18-04-2007 19:05:27

gracias a los dos, luis y egostar, me está sirviendo de mucho lo que me indican.

Ah, el for lo hago para poder pintar las fechas que saco de la BD en una columna del grid asi:

Código Delphi [-]
//...
if not(qRecaudacion.IsEmpty) then
        begin
        // carga los vehiculos en la primera fila de columnas
        ModificarGrid();
          pgDatos.Cells[0,f+1].Value:= qRecaudacion.FieldByName('fecha').AsString;
          pgDatos.Cells[0,f+1].TextAlignment:= taCenter;  // Centrado Horizontal
//...etc, etc


La franja horaria es GMT +2. Ahora son las 11:06:23.

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