Ir al contenido



Foto

filtrando por fechas

delphi

  • Por favor identifícate para responder
31 respuestas en este tema

#1 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 13 junio 2018 - 07:23

hola  gente, necesito una pequeña ayuda como puedo hacer un filtrador de fechas desde un tedit y se muestre en un dbgrid que se filtre de esta manera 13-06-2018, uso delphi xe7 y componentes tmyquery, tdatasource

desde ya gracias


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.394 mensajes
  • LocationRepública Dominicana

Escrito 14 junio 2018 - 09:00

Hola!, ¿Motor de base de datos?.


  • 0

#3 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 14 junio 2018 - 12:28

Hola!, ¿Motor de base de datos?.

mysql workwench 6.3


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.394 mensajes
  • LocationRepública Dominicana

Escrito 14 junio 2018 - 01:55

En MySQL las fechas son en formato 2018-06-14, lo puedes hacer de la siguiente forma, ya que filtrar datos las hay de muchas formas:


delphi
  1. Query.Close;
  2. Query.SQL.Clear;
  3. Query.SQL.Add('Select * from tabla where fecha = :fecha');
  4. Query.Params[0].AsDateTime := StrToDate('14-06-2018');
  5. //Query.Params[0].AsString := FormatDateTime('yyyy-MM-dd',StrToDate('14/06/2018')); Lo puedes probar de esta forma si la anterior no te funciona
  6. Query.Open;

Saludos.


  • 0

#5 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 15 junio 2018 - 03:36

En MySQL las fechas son en formato 2018-06-14, lo puedes hacer de la siguiente forma, ya que filtrar datos las hay de muchas formas:


delphi
  1. Query.Close;
  2. Query.SQL.Clear;
  3. Query.SQL.Add('Select * from tabla where fecha = :fecha');
  4. Query.Params[0].AsDateTime := StrToDate('14-06-2018');
  5. //Query.Params[0].AsString := FormatDateTime('yyyy-MM-dd',StrToDate('14/06/2018')); Lo puedes probar de esta forma si la anterior no te funciona
  6. Query.Open;

Saludos.

perdón, necesito filtrar un rango de fechas estoy usando dos DateTimePicker 

por ejemplo : si pongo del  1 al 15 quiero me muestre los registros con el rango de fechas nombrado.

gracias saludos


  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.394 mensajes
  • LocationRepública Dominicana

Escrito 15 junio 2018 - 03:45

En MySQL existe la función BETWEEN que hace precisamente eso:


delphi
  1. Query.Close;
  2. Query.SQL.Clear;
  3. Query.SQL.Add('Select * from tabla where fecha BETWEEN :fecha1 and :fecha2');
  4. Query.ParamByName('fecha1').AsDateTime := DateTimePicker1.Date;
  5. Query.ParamByName('fecha2').AsDateTime := DateTimePicker2.Date;
  6. Query.Open;


  • 0

#7 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 15 junio 2018 - 04:19

 

En MySQL existe la función BETWEEN que hace precisamente eso:


delphi
  1. Query.Close;
  2. Query.SQL.Clear;
  3. Query.SQL.Add('Select * from tabla where fecha BETWEEN :fecha1 and :fecha2');
  4. Query.ParamByName('fecha1').AsDateTime := DateTimePicker1.Date;
  5. Query.ParamByName('fecha2').AsDateTime := DateTimePicker2.Date;
  6. Query.Open;

en mi caso estoy trabajando con tres tablas usando union all, podria usuarlo sin problema 


  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.394 mensajes
  • LocationRepública Dominicana

Escrito 15 junio 2018 - 04:29

En cada consulta del Union debes hacer esa condición.


sql
  1. SELECT campo1 AS campo FROM tabla1 WHERE fecha BETWEEN :fecha1 AND :fecha2
  2. UNION ALL
  3. SELECT campo2 AS campo FROM tabla2 WHERE fecha BETWEEN :fecha1 AND :fecha2
  4. UNION ALL
  5. SELECT campo3 AS campo FROM tabla3 WHERE fecha BETWEEN :fecha1 AND :fecha2

Saludos.


  • 0

#9 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 15 junio 2018 - 04:44

En cada consulta del Union debes hacer esa condición.


sql
  1. SELECT campo1 AS campo FROM tabla1 WHERE fecha BETWEEN :fecha1 AND :fecha2
  2. UNION ALL
  3. SELECT campo2 AS campo FROM tabla2 WHERE fecha BETWEEN :fecha1 AND :fecha2
  4. UNION ALL
  5. SELECT campo3 AS campo FROM tabla3 WHERE fecha BETWEEN :fecha1 AND :fecha2

Saludos.

me refiero en esta linea de codigo Query.SQL.Add('Select * from tabla where fecha BETWEEN :fecha1 and :fecha2') podre usar la funcion union all


  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.394 mensajes
  • LocationRepública Dominicana

Escrito 15 junio 2018 - 05:06


delphi
  1. var aSQL: String;
  2. begin
  3. aSQL := 'SELECT campo1 AS campo FROM tabla1 WHERE fecha BETWEEN :fecha1 AND :fecha2 ' +
  4. 'UNION ALL ' +
  5. 'SELECT campo2 AS campo FROM tabla2 WHERE fecha BETWEEN :fecha1 AND :fecha2 ' +
  6. 'UNION ALL ' +
  7. 'SELECT campo3 AS campo FROM tabla3 WHERE fecha BETWEEN :fecha1 AND :fecha2';
  8.  
  9. ...
  10. Query.SQL.Clear;
  11. Query.SQL.Add(aSQL);
  12. ...
  13.  
  14. end;


  • 0

#11 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 15 junio 2018 - 05:51


delphi
  1. var aSQL: String;
  2. begin
  3. aSQL := 'SELECT campo1 AS campo FROM tabla1 WHERE fecha BETWEEN :fecha1 AND :fecha2 ' +
  4. 'UNION ALL ' +
  5. 'SELECT campo2 AS campo FROM tabla2 WHERE fecha BETWEEN :fecha1 AND :fecha2 ' +
  6. 'UNION ALL ' +
  7. 'SELECT campo3 AS campo FROM tabla3 WHERE fecha BETWEEN :fecha1 AND :fecha2';
  8.  
  9. ...
  10. Query.SQL.Clear;
  11. Query.SQL.Add(aSQL);
  12. ...
  13.  
  14. end;

lo voy a probar y posteare el resultado


  • 0

#12 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 21 junio 2018 - 11:30

hola ,compila pero me dice que el parámetro 'fecha2' no funciona


  • 0

#13 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.163 mensajes
  • LocationArgentina

Escrito 21 junio 2018 - 05:39

hola ,compila pero me dice que el parámetro 'fecha2' no funciona

 

¿Concretamente, que error te arroja? Ten presente que cuando uno escribe :algo en una instrucción SQL está declarando un parámetro, al que LUEGO uno debe asignarle valor.

 

Dependiendo de la suite, se procede de dos formas:

Si es ADO (o basada en ADO), se utiliza Parameters. mientras que la mayoría de otras suites y de las que derivan de TDataSet, se utiliza Params.

 

ADO:


delphi
  1. TuQuery.Paramaters.ParamByName('fecha2').DataType := ftDateTime; //creo recordar que era este nombre... No dispongo en este momento de Delphi para comprobarlo
  2. TuQuery.Paramaters.ParamByName('fecha2').Value := ... // Aquí le pasas el valor

Otras:


delphi
  1. TuQuery.Params.ParamByName('fecha2').AsDateTime := ...

El valor lo podrías ingresar (y se recomienda) desde un TDateTimePicker por ejemplo.

 

Si la consulta está bien escrita, debería funcionarte sin problemas.

 

Saludos,


  • 0

#14 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 22 junio 2018 - 05:08

¿Concretamente, que error te arroja? Ten presente que cuando uno escribe :algo en una instrucción SQL está declarando un parámetro, al que LUEGO uno debe asignarle valor.

 

Dependiendo de la suite, se procede de dos formas:

Si es ADO (o basada en ADO), se utiliza Parameters. mientras que la mayoría de otras suites y de las que derivan de TDataSet, se utiliza Params.

 

ADO:


delphi
  1. TuQuery.Paramaters.ParamByName('fecha2').DataType := ftDateTime; //creo recordar que era este nombre... No dispongo en este momento de Delphi para comprobarlo
  2. TuQuery.Paramaters.ParamByName('fecha2').Value := ... // Aquí le pasas el valor

Otras:


delphi
  1. TuQuery.Params.ParamByName('fecha2').AsDateTime := ...

El valor lo podrías ingresar (y se recomienda) desde un TDateTimePicker por ejemplo.

 

Si la consulta está bien escrita, debería funcionarte sin problemas.

 

Saludos,

hola, compila  pero cuando elijo la fecha que deseo mostrar y a doy click (al boton) el formulario se cierra y no muestra las fechas solicitadas


  • 0

#15 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 22 junio 2018 - 05:32

me parece que el error es la consulta que le estoy pasando como parámetro mi consulta es esta
 
 


delphi
  1. SELECT *  FROM compañia1  WHERE MONTH(fechavenciomento) = 4 AND YEAR(fechavencimiento) = 2018 

 
 
como hago para agregar las fechas del datetimepicker


  • 0

#16 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.394 mensajes
  • LocationRepública Dominicana

Escrito 22 junio 2018 - 06:31

Tu consulta está mal, para extraer el mes y año de una fecha debes utilizar la función EXTRACT()


delphi
  1. Query.Close;
  2. try
  3. Query.SQL.Clear;
  4. Query.SQL.Add('SELECT * FROM compañia1 ' +
  5. 'WHERE EXTRACT(MONTH FROM fechavenciomento) = 4 AND EXTRACT(YEAR FROM fechavencimiento) = 2018' +
  6. 'AND fecha BETWEEN :fecha1 and :fecha2');
  7. Query.ParamByName('fecha1').AsDate := DateTimePicker1.Date;
  8. Query.ParamByName('fecha2').AsDate := DateTimePicker2.Date;
  9. Query.Open;
  10. except
  11. raise Exception.Create('Ocurrió un problema');
  12. end;
  13.  


  • 0

#17 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 26 junio 2018 - 05:24

 

Tu consulta está mal, para extraer el mes y año de una fecha debes utilizar la función EXTRACT()


delphi
  1. Query.Close;
  2. try
  3. Query.SQL.Clear;
  4. Query.SQL.Add('SELECT * FROM compañia1 ' +
  5. 'WHERE EXTRACT(MONTH FROM fechavenciomento) = 4 AND EXTRACT(YEAR FROM fechavencimiento) = 2018' +
  6. 'AND fecha BETWEEN :fecha1 and :fecha2');
  7. Query.ParamByName('fecha1').AsDate := DateTimePicker1.Date;
  8. Query.ParamByName('fecha2').AsDate := DateTimePicker2.Date;
  9. Query.Open;
  10. except
  11. raise Exception.Create('Ocurrió un problema');
  12. end;
  13.  

hola  ya puedo filtrar fechas pero de una sola tabla, cuando quiero filtrar fechas de otras tablas me dice que tengo un error de sintaxis este error precisamente you have an error in your sql syntax check the manual that corresponds   to your mysql server version  


  • 0

#18 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.163 mensajes
  • LocationArgentina

Escrito 26 junio 2018 - 08:10

 

hola  ya puedo filtrar fechas pero de una sola tabla, cuando quiero filtrar fechas de otras tablas me dice que tengo un error de sintaxis este error precisamente you have an error in your sql syntax check the manual that corresponds   to your mysql server version  

 

Sin ver la consulta no sabremos donde esta el problema. Además el texto del error está incompleto porque suele indicar la linea en donde está el problema. Copia y pega el error tal cual aparece.

 

Saludos,


  • 0

#19 the walrus

the walrus

    Member

  • Miembros
  • PipPip
  • 42 mensajes

Escrito 27 junio 2018 - 05:40

Sin ver la consulta no sabremos donde esta el problema. Además el texto del error está incompleto porque suele indicar la linea en donde está el problema. Copia y pega el error tal cual aparece.
 
Saludos,

este es mi codigo :

 

 

delphi
  1.  var aSQL: String;
  2. begin
  3.   aSQL := 'SELECT FechaDesde1, FechaHasta2  , empresa1  FROM tabla1 where fechahasta1 >=  :fecha1 and fechahasta1 <= :fecha2' +
  4.  'union all' +
  5.  'SELECT FechaDesde2 ,FechaHasta2 , empresa2  FROM  tabla2 Ewhere fechahasta2 >=  :fecha1 and fechahasta2 <= :fecha2' +
  6.  'union all' +
  7.  'SELECT FechaDesde3,FechaHasta3 , empresa3  FROM tabla3 where fechahasta3 >=  :fecha1 and fechahasta3 <= :fecha2 ORDER BY fechahasta3';
  8. query.SQL.Clear;
  9. quey.SQL.Add(aSQL);
  10. query.Params.ParamByName('fecha1').Value:= FormatDateTime('yyyy/mm/dd',Datetimepicker1.Date);
  11.  query.Params.ParamByName('fecha2').Value:= FormatDateTime('yyyy/mm/dd',Datetimepicker2.Date);
  12.  query.Open;
  13. end;

 


cuando compilo me da el siguiente error 
 you have an error in your sql syntax check the manual that corresponds   to your mysql server version for  the  right syntax to use  near allselect   FechaDesde1, FechaHasta2  , empresa1 at line 1
  • 0

#20 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.819 mensajes
  • LocationMéxico

Escrito 27 junio 2018 - 10:24

....cuando compilo me da el siguiente error 
 
 you have an error in your sql syntax check the manual that corresponds   to your mysql server version for  the  right syntax to use  near allselect   FechaDesde1, FechaHasta2  , empresa1 at line 1

 
Primero, verifica que todos los los campos tienen el mismo tipo en su columna correspondiente, es decir:
 

delphi
  1. FechaDesde1 = DateTime
  2. FechaDesde2 = Varchar[5] --> ERROR, no coincide con el tipo de dato de la columna.
  3. FechaDesde3 = DateTime
  4.  
  5. FechaDesde1 = DateTime
  6. FechaDesde2 = DateTime --> OK
  7. FechaDesde3 = DateTime


Por otra parte y por lo que imagino, las fechas son de tipo Date o DateTime así que el problema es el "Cast" que estas haciendo.
 
Puedes pasar los parámetros directamente:
 

delphi
  1. var aSQL: String;
  2. begin
  3.   aSQL := 'SELECT FechaDesde1, FechaHasta2  , empresa1  FROM tabla1 where fechahasta1 >=  :fecha1 and fechahasta1 <= :fecha2' +
  4. 'union all' +
  5.           'SELECT FechaDesde2 ,FechaHasta2 , empresa2  FROM  tabla2 where fechahasta2 >=  :fecha1 and fechahasta2 <= :fecha2' +
  6.           'union all' +
  7.           'SELECT FechaDesde3,FechaHasta3 , empresa3  FROM tabla3 where fechahasta3 >=  :fecha1 and fechahasta3 <= :fecha2 ORDER BY fechahasta3';
  8. query.SQL.Clear;
  9. quey.SQL.Add(aSQL);
  10. query.Params.ParamByName('fecha1').Value := Datetimepicker1.Date;
  11.   query.Params.ParamByName('fecha2').Value := Datetimepicker2.Date;
  12.  query.Open;
  13. end;

ó con el "Cast" apropiado:
 

delphi
  1. var aSQL: String;
  2. begin
  3.   aSQL := 'SELECT FechaDesde1, FechaHasta2  , empresa1  FROM tabla1 where fechahasta1 >=  :fecha1 and fechahasta1 <= :fecha2' +
  4. 'union all' +
  5.           'SELECT FechaDesde2 ,FechaHasta2 , empresa2  FROM  tabla2 where fechahasta2 >=  :fecha1 and fechahasta2 <= :fecha2' +
  6.           'union all' +
  7.           'SELECT FechaDesde3,FechaHasta3 , empresa3  FROM tabla3 where fechahasta3 >=  :fecha1 and fechahasta3 <= :fecha2 ORDER BY fechahasta3';
  8. query.SQL.Clear;
  9. quey.SQL.Add(aSQL);
  10. query.Params.ParamByName('fecha1').AsString := FormatDateTime('yyyy/mm/dd',Datetimepicker1.Date);
  11.   query.Params.ParamByName('fecha2').AsString := FormatDateTime('yyyy/mm/dd',Datetimepicker2.Date);
  12.  query.Open;
  13. end;

Saludos
  • 0





Etiquetado también con una o más de estas palabras: delphi