PDA

Ver la Versión Completa : DatetimePicker buscar desde hasta en SQL


giantonti1801
25-11-2022, 02:09:18
Buena noche tengo un inconveniente en relacion una consulta que debo hacer desde delphi 11 a la base de datos y para ellos estoy usando los componente datetimepicker para que dentro de la consulta se pueda señalar la fecha desde hasta.

ADOQuery1.SQL.Add('where FechaCre := '+DateToStr(DateTimePicker1.Date));

al darle click a un evento on chancge no me retorna ningún resultado.

en un principio pensé que no tenía el mismo formato de fecha que la base de dato y lo verifico con un showmessage y veo que efectivamente tenemos el mismo formato. pero ahora tengo una dura:
Es posible que no me esté regresando ningún resultado porque el campo de la base de dato en de tipo Datetime y esta almacenando tanto la fecha como la hora en el mismo campo y por eso que no me retorna ningún resultado?

2022-11-17 00:00:00.000
2022-11-18 00:00:00.000
2022-11-23 22:31:00.000

este campo fecha lo coloco el default value en cada insert (CONVERT([varchar](16),getdate(),(27))).

Como puedo arreglar para poder utilizar esta consulta desde hasta en un formulario?

NOTA: También he intentado hacer un LIKE ADOQuery1.SQL.Add('where FechaCre like '+DateToStr(DateTimePicker1.Date)+'%'); pero me retorna un error '%'.

duilioisola
25-11-2022, 12:38:11
Ya te hemos respondido en el otro hilo

El problema es la hora.:

Copio y pego la respuesta:

El problema es la hora.

Modifica la hora de la fecha que utilizas como parámetro.


procedure TFormConsulta.DateTimePicker1Change(Sender: TObject);
begin
LabelDesde.Caption := DateToStr(DateTimePicker1.Date);
Filtra(DateTimePicker1.Date, DateTimePicker2.Date);
end;

procedure TFormConsulta.DateTimePicker2Change(Sender: TObject);
begin
LabelHasta.Caption := DateToStr(DateTimePicker2.Date);
Filtra(DateTimePicker1.Date, DateTimePicker2.Date);
end;

procedure TFormConsulta.Filtra(Desde, Hasta: TDateTime);
begin
/// Modifico la hora de las fechas para abarcar el dia completo
/// DESDE = dd/mm/yyyy **00:00:00**
/// HASTA = dd/mm/yyyy **23:59:59**

// Quito la hora del la fecha inicial
Desde := RecodeTime(Desde, 0, 0, 0, 0);
// Agrego hasta el ultimo milisegundo del día a la hora final
Hasta := RecodeTime(Hasta, 23, 59, 59, 999);

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from Tiket');
ADOQuery1.SQL.Add('where FechaCre between :Fecha1 and :Fecha2');
ADOQuery1.Parameters.ParamByName('Fecha1').Value := Desde;
ADOQuery1.Parameters.ParamByName('Fecha2').Value := Hasta;
ADOQuery1.Open;
end;

Neftali [Germán.Estévez]
25-11-2022, 13:59:47
Por favor no dupiques temas, ya tienes uno abierto donde se est´contestando este tema.
Revisa la Guía de estilo de los foros (https://www.clubdelphi.com/foros/guiaestilo.php).

Cierro este hilo.