Ir al contenido


Foto

Filtrar campo fecha solo por año con componente zeoslib


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

#1 El_Chava

El_Chava

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 25 enero 2015 - 10:14

Hola amigos no he logrado dar con la solución a un problema que tengo y es el siguiente. Tengo una base de datos en mysql y utilizo un TZQuery para consultar a la base datos y lo enlazo a un DBGrid ahi todo bien el problema radica es que no deseo utilizar la propiedad filter de tal manera que me filtre por año determinado. Estuve buscando soluciones y al encontre el siguiente le pongo el siguiente codigo a la proiedad filter del TZQuery:



delphi
  1. TZQUERY.Filter:= 'Year(campofecha) = 2015'; 



Pero al momento de querer ejecutarlo me manda el siguiente mensaje:

Function Year was not found

Entonces la pregunta del millon es ¿como puedo filtar por un campo fecha solo dandole el año en que deseo que se filtren los datos?. Espero me puedan ayudar de antemano muchas gracias.
  • 0

#2 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 26 enero 2015 - 07:17

¿porque no filtras con una consuta SQL?


¿pusiste eso?

zquery1.Filtered := true;
  • 0

#3 El_Chava

El_Chava

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 26 enero 2015 - 09:28

Hola Nikolas gracias por responder. El detalle es que en si lo que trato de filtar es ya una consulta a la tabla y deseo darle al usuario unas opciones de filtrado entre ellas por año. y en vez de estar realizando una consulta para cada filtrado Ej:



delphi
  1.   with TZQUERY do
  2. begin
  3.     Active := false;
  4.     SQL.Clear;
  5.     SQL.Add('SELECT *');
  6.     SQL.Add('FROM documento');
  7.     SQL.Add('WHERE opcion de filtrado');
  8.     Active := true;
  9. end;


Opciones de filtrado puede ser por año, mes, hora, recibido_por, etc... pero no se como hacer para que en un campo fecha en mysql con los componentes zeoslib me tome no más el año para poder filtar la tabla.

pense en usar la propiedad filter a dicha consulta y a la propiedad TZQUERY.Filtered := true; si lo puse en true pero a un así no me da ningun resultado.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 26 enero 2015 - 10:20

No conozco bien a bien los ZEOS y esto es de memoria, pero pienso que así debe de funcionar tu consulta.



sql
  1.     TzQuery.Active := FALSE;
  2.     TzQuery.SQL.Clear;
  3.     TzQuery.SQL.ADD('SELECT * FROM documento');
  4.     TzQuery.SQL.ADD('WHERE extract(year from OrderDate) = :anio');
  5.     TzQuery.ParamByName('ANIO').VALUE := 2015;
  6.     TzQuery.Active := TRUE;



Saludos
  • 0

#5 El_Chava

El_Chava

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 26 enero 2015 - 11:47

Hola egostar gracias por tu respuesta. Lo voy a probar  (y)
  • 0

#6 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 27 enero 2015 - 07:55

Realmente dependes de las funciones de manejo de fechas de MySQL, Year() ya sabes que no existe, Extract(yaer from fecha) se que funciona en FireBird, pero no se si lo hara en MySQL, otra opcion sera usar:

where fecha between '01.01.2015' and '31.12.2015'

Pero de nuevo, el formato en el que MySQL espera encontrar las fechas no lo se, he puesto el de FireBird.
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 27 enero 2015 - 09:17

Realmente dependes de las funciones de manejo de fechas de MySQL, Year() ya sabes que no existe, Extract(yaer from fecha) se que funciona en FireBird, pero no se si lo hara en MySQL, otra opcion sera usar:

where fecha between '01.01.2015' and '31.12.2015'

Pero de nuevo, el formato en el que MySQL espera encontrar las fechas no lo se, he puesto el de FireBird.



Como tampoco se utilizar MySQL, busqué si la función EXTRACT() sirve o no en ese motor, he mirado en una página de MySQL y ésto es lo que dice:

The EXTRACT() function uses the same kinds of unit specifiers as DATE_ADD() or DATE_SUB(), but extracts parts from the date rather than performing date arithmetic.

mysql> SELECT EXTRACT(YEAR FROM '2009-07-02');
      -> 2009
mysql> SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03');
      -> 200907
mysql> SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03');
      -> 20102
mysql> SELECT EXTRACT(MICROSECOND
    ->                FROM '2003-01-02 10:30:00.000123');
        -> 123


Enlace a la página

Supuestamente es compatible, habrá que esperar la retro-alimentación de El_Chava

Saludos

  • 0

#8 El_Chava

El_Chava

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 27 enero 2015 - 10:29

Gracias por sus respuestas amigos al final tuve que agregar un campo a la tabla de documentos llamando anio para poder filtar. al final quedo asi:



delphi
  1. TZQUERY.filtered := false;
  2. TZQUERY.Filter:= 'ANIO=' FormatDateTime('yyyy',now); 
  3. TZQUERY.filtered := true;


  • 0




IP.Board spam blocked by CleanTalk.