Criteria middels IIf werkt niet

Status
Niet open voor verdere reacties.

alexander321

Gebruiker
Lid geworden
25 jun 2012
Berichten
76
LS,

Ik heb een werkend criteria, zie onderstaand:
>=DatePart("d";DateAdd("d";-1;Now())) & "-" & DatePart("m";DateAdd("d";-1;Now())) & "-" & DatePart("yyyy";DateAdd("d";-1;Now())) & " 08:00:00" And <DatePart("d";Now()) & "-" & DatePart("m";Now()) & "-" & DatePart("yyyy";Now()) & " 07:59:59"

Dit zou moeten gelden voor dinsdag t/m vrijdag (Weekdag ongelijk aan 2)
En voor de maandag (Weekdag = 2) zou moeten gelden:

>=DatePart("d";DateAdd("d";-3;Now())) & "-" & DatePart("m";DateAdd("d";-3;Now())) & "-" & DatePart("yyyy";DateAdd("d";-3;Now())) & " 08:00:00" And <DatePart("d";Now()) & "-" & DatePart("m";Now()) & "-" & DatePart("yyyy";Now()) & " 07:59:59"

Ik dacht dat zelf te doen met:

IIf(Weekday(Now();1)=2;Formule maandag;Formule dinsdag t/m vrijdag)
of te wel:
IIf(Weekday(Now();1)=2;>=DatePart("d";DateAdd("d";-3;Now())) & "-" & DatePart("m";DateAdd("d";-3;Now())) & "-" & DatePart("yyyy";DateAdd("d";-3;Now())) & " 08:00:00" And <DatePart("d";Now()) & "-" & DatePart("m";Now()) & "-" & DatePart("yyyy";Now()) & " 07:59:59";>=DatePart("d";DateAdd("d";-1;Now())) & "-" & DatePart("m";DateAdd("d";-1;Now())) & "-" & DatePart("yyyy";DateAdd("d";-1;Now())) & " 08:00:00" And <DatePart("d";Now()) & "-" & DatePart("m";Now()) & "-" & DatePart("yyyy";Now()) & " 07:59:59")
echter dat werkt niet.
Wie heeft de oplossing?

Alvast dank!
 
Laatst bewerkt:
Ik heb me een beetje buiten de discussie in dit draadje gehouden, hoewel je formule een heel stuk simpeler kan, maar ik zie dat je nu weer hulp nodig hebt, dus waarom niet :).
Eerst maar eens je formules, want die kunnen dus echt een heel stuk simpeler. Te beginnen met het laatste stuk:
Code:
DatePart("d";Now()) & "-" & DatePart("m";Now()) & "-" & DatePart("yyyy";Now()) & " 07:59:59"
Die DatePart brokken zijn een ongelooflijk ingewikkelde methode om van Now() een Datum te maken. Dat kan dus veel simpeler met Date(). Daarnaast voeg je daar tekst aan toe (" 07:59:59") met als gevolg dat je totale string ook tekst is, en niet meer een datum. Filtert erg onhandig als je Now() gebruikt om je datum/tijd veld te vullen. Datums altijd filteren met datums, en niet met tekst. Gebruik dus, als je een tijd wilt toevoegen aan een datum, altijd TimeSerial.
Je kunt de TOT variant dus vervangen door:
Code:
Date()+TimeSerial(7;59;59)
Iets vergelijkbaars geldt ook voor het Van stuk; gebruik niet deze ingewikkelde oplossing, maar DateAdd. Je formule ziet er dan zo uit:
Code:
DateAdd("d";-1;Date())+TimeSerial(8;0;0)
En het totaal wordt dan:
Code:
Between DateAdd("d";-1;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59)
Nu de reden dat je IIF niet werkt: die is simpel; een criterium werkt op een veld. Zijn er meerdere voorwaarden, dan moet je het veld opnemen in je criteriums. En dat doe je nu niet. Je krijgt dan iets als:
Code:
IIf(Weekday(Date();1)=2;
[Jouw datumveld] Between DateAdd("d";-3;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59);
[Jouw datumveld] Between DateAdd("d";-1;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59))
 
Beste Michel,

Dank voor je antwoord en versimpeling.
Ik ben nog niet zo heel lang met access aan het stoeien.
Ik probeer zoveel mogelijk te combineren.

Wat nu heel vreemd is;

Als ik een gedeelte van de formule pak, zonder de IIf dan gaat het prima. Ik vul hem dan in bij Criteria bij het Veld CENTRAAL_ARTIKEL_PRIJS.GEWIJZIGD_DATUM.
[CENTRAAL_ARTIKEL_PRIJS.GEWIJZIGD_DATUM] Between DateAdd("d";-3;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59)
Zodra daar de IIf in beeld komt, gaat het fout.
Dan komt er niets terug. Er moet dus iets mis gaan. Ik snap er niets van...
Het zou onderstaande moeten zijn volgens mij.

IIf(Weekday(Date();1)=2;[CENTRAAL_ARTIKEL_PRIJS.GEWIJZIGD_DATUM] Between DateAdd("d";-3;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59);[CENTRAAL_ARTIKEL_PRIJS.GEWIJZIGD_DATUM] Between DateAdd("d";-1;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59))
 
Heb je 2 velden in 2 tabellen die allebei [GEWIJZIGD_DATUM] heten? En hoe kom je bij deze schrijfwijze? Als je nog niet zo lang met Access werkt, gebruik dan zoveel mogelijk de tools die Access je aanbiedt, zoals het automatisch aanvullen of de <Functie Opbouwen>. Had je die laatste gebruikt, dan had je gezien dat je veldverwijzing er zo uit ziet: [CENTRAAL_ARTIKEL_PRIJS]![GEWIJZIGD_DATUM]. En dat is toch heel iets anders als [CENTRAAL_ARTIKEL_PRIJS.GEWIJZIGD_DATUM]. Je formule zou er dus zo uit moeten zien:
Code:
IIf(Weekday(Date();1)=2;
[GEWIJZIGD_DATUM] Between DateAdd("d";-3;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59);
[CENTRAAL_ARTIKEL_PRIJS]![GEWIJZIGD_DATUM] Between DateAdd("d";-1;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59))
Ik gebruik voor de duidelijkheid beide (correcte) schrijfwijzes; je hoeft uiteraard maar één variant te gebruiken.
 
Michel,

Helaas werkt dit nog niet.
Ik krijg niets retour als ik dat doe.
Als ik alleen het gedeelte voor vandaag ([CENTRAAL_ARTIKEL_PRIJS]![GEWIJZIGD_DATUM] Between DateAdd("d";-3;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59)) gebruik, dan werkt hij prima.
Tevens heb ik een Expr1: IIf(Weekday(Date();1)=2;"Ja";"Nee") gemaakt en die geeft netjes 2 terug. Dus dat werkt ook.
Maar de combi niet dus. Pfff.
 
Ik heb het niet helemaal goed uitgelegd, vrees ik. Je moet de formule als extra (al dan niet zichtbaar; ik gebruik 'm altijd onzichtbaar) veld gebruiken en dan filteren op WAAR. De IIF is een vergelijking, die TRUE of FALSE is. Je moet dus ook filteren op TRUE of FALSE.
 
Dan heb ik het ook niet goed begrepen. Sorry. Ik heb hem nu als extra veld gezet met als criteria "WAAR" en dat werkt. :-)
Nu morgen even afwachten of het dan ook met de datum goed gaat.
Maar dank voor je antwoorden!

Expr1: IIf(Weekday(Date();1)=2;[CENTRAAL_ARTIKEL_PRIJS]![GEWIJZIGD_DATUM] Between DateAdd("d";-3;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59);[CENTRAAL_ARTIKEL_PRIJS]![GEWIJZIGD_DATUM] Between DateAdd("d";-1;Date())+TimeSerial(8;0;0) And Date()+TimeSerial(7;59;59))
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan