[Access 2000] Onderhoudsvrije query

Pagina: 1
Acties:

  • wh-vanderpost
  • Registratie: Juni 2001
  • Laatst online: 03-09 13:01
Hallo mensen,

ik zit nu al een poosje te stoeien met een bepaalde query. De query selecteert een aantal kolommen uit een tabel, 1 van die kolommen bevat een datum (is ook een Datum veld, geen tekst oid). Nu heb ik als criteria het volgende opgegeven bij de kolom: [DATUM]....
code:
1
2
3
4
5
6
7
8
IIf(
   DatePart("m";Date())=1
;
   DatePart("yyyy";[DATUM])=DatePart("yyyy";Date()) Or 
   DatePart("yyyy";[DATUM])=(DatePart("yyyy";Date())-1)
;
   DatePart("yyyy";[DATUM])=DatePart("yyyy";Date())
)

Voor de duidelijkheid: De bedoeling is dat het resultaat alle rijen bevat die dit jaar zijn aangemaakt.
Behalve in de hele maand Januari... dan zie je het vorige jaar er ook nog bij staan. (voor overlapping) ;)
Als ik deze query draai krijg ik om 1 of andere reden geen results... ik heb alle vergelijkingen los geprobeerd (dus zonder Iif statement) en dat werkt wel goed.

Wie ziet een fout of weet een betere manier hiervoor??? :?

All knowledge is written


  • wh-vanderpost
  • Registratie: Juni 2001
  • Laatst online: 03-09 13:01
nog even een kick in de goeie richting...

All knowledge is written


  • Boss
  • Registratie: September 1999
  • Laatst online: 06-09 18:12

Boss

+1 Overgewaardeerd

Even kijken... eerst controleer je of het nu januari is...
ja: is het jaar van [datum] gelijk aan het jaar van vandaag of gisteren: geeft dus true of false
nee: is het jaar van [datum] gelijk aan het jaar van vandaag: geeft ook weer true of false.

En als je ipv de functie datepart de deelfuncties year([datum]) en month([datum]) gebruikt?

...

Ik zie nu dat je dit wil gebruiken om je records te filteren? Dan moet je dat toch gewoon bij de criteria van [datum] invullen, en niet een veld als resultaat laten geven?
Volgens mij begrijp je het filter idee niet helemaal...

[ Voor 29% gewijzigd door Boss op 22-09-2003 09:04 ]

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • wh-vanderpost
  • Registratie: Juni 2001
  • Laatst online: 03-09 13:01
Boss schreef op 22 september 2003 @ 09:02:
Even kijken... eerst controleer je of het nu januari is...
Klopt!
ja: is het jaar van [datum] gelijk aan het jaar van vandaag of gisteren: geeft dus true of false
Hier gaat iets mis, ik kijk of het jaar van datum gelijk is aan het jaar van vandaag of het vorige jaar, (DatePart("yyyy";[datum])-1) geeft als resultaat 2002 (als ik het nu zou draaien dan he).
nee: is het jaar van [datum] gelijk aan het jaar van vandaag: geeft ook weer true of false.
Deze laatste regel is de Else van de Iif opdracht. Dus als de maand niet januari is, dan pakt hij alle records waarbij het jaar gelijk is aan het jaar vandaag.
En als je ipv de functie datepart de deelfuncties year([datum]) en month([datum]) gebruikt?
Dit ga ik zo gelijk even testen...
Ik zie nu dat je dit wil gebruiken om je records te filteren? Dan moet je dat toch gewoon bij de criteria van [datum] invullen, en niet een veld als resultaat laten geven?
Volgens mij begrijp je het filter idee niet helemaal...
Het gehele Iif statement staat ook bij de criteria van het veld Datum, er wordt niet een nieuw veld aangemaakt hiermee.

Nog even als extra, als ik " DatePart("yyyy";Date()) " in het criteria vak plaats (ipv het iif statement) krijg ik netjes alle records van dit jaar te zien.... dat werkt dus wel iig.

All knowledge is written


  • wh-vanderpost
  • Registratie: Juni 2001
  • Laatst online: 03-09 13:01
Ik heb het net even getest met de month en year functies, hetzelfde resultaat... geen records dus. :/
code:
1
2
3
IIf(Month(Date())=1;
[DATE_WORKED]=Year(Date()) Or [DATE_WORKED]=Year(Date())-1;
[DATE_WORKED]=Year(Date()))

All knowledge is written


  • Againzender
  • Registratie: Maart 2002
  • Laatst online: 07-09 09:34
wh-vanderpost schreef op 22 September 2003 @ 12:30:
Ik heb het net even getest met de month en year functies, hetzelfde resultaat... geen records dus. :/
code:
1
2
3
IIf(Month(Date())=1;
[DATE_WORKED]=Year(Date()) Or [DATE_WORKED]=Year(Date())-1;
[DATE_WORKED]=Year(Date()))
Euh, [DATE_WORKED] is je veldnaam, en dat veld is van het type datum? Volgens mij ben je dan in je criteria op zoek naar een datum 2002 of 2003. En dat zal niet lukken. Als je nu eens in VBA iets als het volgende maakt:
code:
1
2
3
4
5
6
7
8
9
10
Function meuk()
Dim strCriteria As String
Select Case Month(Date)
    Case 1
        strCriteria = Year(Date) & " Or " & Year(Date) - 1
    Case Else
        strCriteria = Year(Date)
End Select
meuk = strCriteria
End Function

En dan aan je query als where clause dit toevoegt:
code:
1
WHERE (((Year([DATE_WORKED]))=meuk()))

Werkt het dan wel?

  • wh-vanderpost
  • Registratie: Juni 2001
  • Laatst online: 03-09 13:01
Deze komt heel erg in de richting :)
Op alle maanden behalve januari werkt hij, maar zodra de "Or" erbij komt kijken pikt hij het niet meer.
Als ik vervolgens in het criteria vak invul:
code:
1
((Year([DATE_WORKED])=2002) Or (Year([DATE_WORKED])=2003))

Dan werkt het (alleen is het dynamische eraf natuurlijk).... dus ik dacht ik verbouw die VB functie een beetje zodat strCriteria de regel gaat bevatten die ik hierboven heb staan, alleen dan met dynamische jaren.
Dit wordt niet gepikt als ik vervolgens bij [DATE_WORKED] als criteria "meuk()" opgeef... de fout "Data type mismatch in criteria expression" is het gevolg. Hij roept dus niet de functie aan, maar gaat de datum vergelijken met het woord "meuk()"... pfhoe 8)7

All knowledge is written

Pagina: 1