Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Filtrar una tabla por mes (https://www.clubdelphi.com/foros/showthread.php?t=66128)

JefeNet 03-02-2010 16:23:32

Filtrar una tabla por mes
 
hola, he buscado sin conseguir resultado alguno. tengo una tabla con un campo tipo Date y quisiera filtrar la tabla por mes, osea que me muestre solo los registros donde el mes sea igual al mes en curso el problema es que en la tabla la fecha es dd/mm/aaaa y utilizo el siguiente codigo
Código Delphi [-]
TSeguro.Filter:='FechaInicio >= ' + QuotedStr(dia1) + ' and FechaInicio <= ' + QuotedStr(dia2);

donde dia1 es una variable que haciendole artificios matematicos (de mala calidad) obtengo 01/mm/aaaa y lo mismo para dia1 pero obtengo 30/mm/aaaa ó 31/mm/aaaa y asi filtro la tabla donde la fecha este entre el dia1 y dia2, pero se que eso no se hace asi y quisiera que me ayudaran pues si el mes es febrero habra un error porque no tiene ni 30 ni 31 dias.

como hago para filtrar la tabla por el mes si el formato es dd/mm/aaaa


gracias

Neftali [Germán.Estévez] 03-02-2010 17:03:24

A parte de lo que puedas hacer en la Base de Datos, siempre hay la opción de la segunda fecha poner que sea menor estricto que el día 1 del mes siguiente. Es decir, en lugar de:

<= 31/03/...
<= 28/02/...

colocar:

< 1/04
< 1/03

También tienes en Delphi (DateUtils creo recordar) funciones que te devuelven el numero de días de un mes, sin tener que hacer operaciones raras...

JefeNet 03-02-2010 17:15:07

ok voy a probar gracias

JefeNet 03-02-2010 17:39:58

solucionado no se si sera la mejor manera pero me funciona filtro desde el primer dia del mes hasta la fecha actual, asi que si es 28,29, 30 o 31 el ultimo dia del mes no importa.
dejo el codigo por si alguien lo necesita
Código Delphi [-]
var
  fecha1,fecha2:string;
  mes,dia, ano:word;
begin
  decodedate(date,ano,mes,dia);
  Fecha1:=datetostr(date-dia+1); //consigo el primer dia del mes
  Fecha2:= datetostr(date);        //fecha actual
  Tabla.Filtered:=true;
  Ttabla.Filter:='Fecha >= ' + QuotedStr(Fecha1) + ' and Fecha <= ' + QuotedStr(Fecha2);

de esta manera filtro todos los registros donde la fecha este entre el primer dia del mes en curso y el dia actual.

ContraVeneno 03-02-2010 17:49:59

En delphi tienes una unidad llamada DateUtils (DateUtil en Delphi 5), en la que puedes encontrar las funciones DayOf, MonthOf y YearOf, además de DecodeDateTime y EncodeDateTime, dichas funciones te ayudan a obtener la parte de la fecha que necesitas, en tu caso, utilizaría la función MonthOf para obtener el mes.

Seguramente en tu base de datos, también tendrías herramientas similares. EN SQLServer por ejemplo, tienes la función Month y para obtener todos losmovimientos de enero, solo hace falta hacer:
Código SQL [-]
Select Movimientos
From TablaMovimientos
Where Month(Fecha) = 1


La franja horaria es GMT +2. Ahora son las 18:47:06.

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