Toon posts:

[Delphi] Filter op datum

Pagina: 1
Acties:
  • 123 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

ik heb een overzicht. deze wil ik filteren op jaar, maand, week en dag.
Dus ik dacht ik zet er query.filter : =

Alleen het lukt met niet om deze goed te krijgen

ik zat zelf te denken aan:
Datum is het veld uit de database (datetime)
code:
1
2
3
query.filter := MonthOf(Datum) = MontOf(Now());
of
query.filter := 'Datum = ''' + FormatDateTime('dd/mm/yyyy', Now());


heb het al op een aantal manieren geprobeerd met en zonder quotes. Maar ik krijg het maar niet voor elkaar :S
Krijg telkens dat de Kolom MonthOf niet bestaat (duh..) maar weet ook niet hoe ik hier omheen kan werken.
Weet iemand hier een goede oplossing voor?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:54
Waarom filter je al niet direct in je Query ?
Ik bedoel dus: filter mbhv een WHERE clausule in je query-string, en gebruik parametrized queries.

https://fgheysels.github.io/


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Filters kunnen ook op datasets, en zijn client-side. Vooral wanneer je je filter regelmatig verandert is dat wel handig.

Anyway.. de filters zijn gewoon sql-statements, (in paradox formaat bij mijn weten, dus to_date zal niet werken). Wat jij zoekt is iets als "datum>='01/xx/2005' and datum<'01/xx+1/2005'"

[ Voor 18% gewijzigd door Varienaja op 05-09-2005 11:18 ]

Siditamentis astuentis pactum.


Verwijderd

Topicstarter
Whoami..

Ik filter niet in de query omdat ik dan 5 verschillende queries moet maken -. op Jaar, maand, week, dag en geen filter.

Delphi bied de mogelijkheid om dit doormiddel van de filter methode te doen. Vandaar dat ik deze wil gebruiken.
============

ik zal nog een proberen om het goed te krijgen in sql alleen.. en dan in de filter gooien.. kijken of ie het dan wel pakt..

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 30-04 23:44

Delphi32

Heading for the gates of Eden

Mocht je er met de Filter property niet uitkomen (omdat date functions niet beschikbaar zijn, dacht ik), dan moet je uitwijken naar het OnFilterRecord event. Die wordt aangeroepen voor elk record in je dataset, en geeft je de mogelijkheid om per record aan te geven of deze eruit gefilterd moet worden of juist niet.

Verwijderd

Topicstarter
ok, dan ga ik die proberen.

want
code:
1
to_char(mld.MELDING_DATUM','MM')= to_char(sysdate,'MM')


werkt bijvoorbeeld ook niet (ORACLE)

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-04 18:15

Tomatoman

Fulltime prutser

Verwijderd schreef op maandag 05 september 2005 @ 12:54:
ok, dan ga ik die proberen.

want
code:
1
to_char(mld.MELDING_DATUM','MM')= to_char(sysdate,'MM')


werkt bijvoorbeeld ook niet (ORACLE)
Allereerst: wat bedoel je met 'werkt niet'? Krijg je foutmeldingen?

Verder kan het filter dat je hier noemt nooit correct zijn, omdat er achter mld.MELDING_DATUM een aanhalingsteken staat dat er niet hoort. Ook de eerdere voorbeelden die je noemt zijn syntactisch niet juist.
code:
1
2
3
query.filter := MonthOf(Datum) = MontOf(Now());
of
query.filter := 'Datum = ''' + FormatDateTime('dd/mm/yyyy', Now());
De eerste klopt niet omdat je Query.Filter instelt op het resultaat van de boolean vergelijking MonthOf(Datum) = MontOf(Now(), oftewel je stelt Query.Filter in op true of false. Bovendien zit er een typfout in MontOf.

De tweede klopt ook niet. Vul maar eens de datum van vandaag in, dan wordt de waarde die je voor het filter wil instellen: Datum = '06/09/2005. Ook hier weer staat er een aanhalingsteken in dat er niet hoort.

offtopic:
Wist je dat je [code=delphi]dit is mijn code[/] kunt gebruiken in dit forum? :)

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
syntactisch was ook een aantal keer het probleem. Dat wist ik, ik kreeg dat alleen maar niet goed..

En een vergelijking van maandvan(datum) = huidigemaand(sysdate) oid is dat wel of niet mogelijk met filter?
En heb je daar toevallig een voorbeeld van?


offtopic:
dat van die code=delphi wist ik :) maar vond het niet nodig voor zo'n klein stukje code..

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-04 18:15

Tomatoman

Fulltime prutser

Het filter is een string, dus FormatFilterText retourneert een string. StartDate en EndDate zijn van het type TDateTime, waarover je uitgebreide informatie in de helpfiles kunt vinden. Vergeet niet dat Delphi ingebouwde datumfuncties heeft, zoals EncodeDate, DateTimeToStr en IncMonth. Dergelijke functies houden rekening met dingen zoals schrikkeljaren, zodat je het wiel niet zelf opnieuw hoeft uit te vinden.

Je moet nog wel even controleren in welk formaat je de datum in het filter moet instellen. Desnoods verander je de 'd' parameter in de FormatDateTime functie naar hetgeen wordt vereist - zie 'date and time formatting strings' in de helpfiles.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
function FormatFilterText(const StartDate, EndDate: TDateTime): string;
begin
  Result := Format('(Datum >= %s) AND (Datum <= %s)',
    [FormatDateTime('d', (StartDate)), FormatDateTime('d', EndDate)]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Query.Filter := FormatFilterText(Now -1, Now); // gisteren t/m vandaag
  Query.Filtered := True;
end;

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
Dank je voor je hulp..

Zal eens kijken het me hiermee lukt :)
Pagina: 1