Waarde opzoeken via DLookUp

jacw

Gebruiker
Lid geworden
23 sep 2006
Berichten
78
Goedemiddag,

Ik heb een tabel “periode” met de volgende veldnamen [begin datum] [eind datum] [periode]

Nu heb ik ook een formulier “werken” gemaakt met de velden: [datum] [route] [aantal uur] en [periode]

Het formulier werkt goed (diverse relaties gemaakt 1 op veel), alleen ik moet via een keuzelijst de juiste periode kiezen, graag wil ik dat automatiseren door in het formulier een standaarwaarde te creëren. Ik kom dan uit bij DLookUP, wat ik ook probeer krijg het niet voor elkaar.
Code:
=DLookUp("[datum]";"tblPeriode";"now() >= [Begin datum] And Date() <= [Eind datum]")

Wie kan mij op weg helpen met de juiste code.

Met vriendelijke groet,

JacW
 
Zoals je strings moet omsluiten met aanhalingstekens, moet je datums omsluiten met hekjes.
De opbouw van je conditie is bovendien niet juist. Zoals je hem nu opgebouwd hebt, wordt gekeken naar de strings '[Begin datum]' en '[Eind datum]'. Variabelen zoals die datums moet je buiten de conditie-string halen op op de waarde te kunnen selecteren.
En: je wil een periode ophalen geen datum.
Tot slot is het vreemd dat je de ene keer met now() vergelijkt en de andere keer met date(). De tijd is denk ik niet relevant.

Probeer eens:

Code:
=DLookUp("[periode]";"tblPeriode";"Date() >= #" & [Begin datum] & "# And Date() <= #" & [Eind datum] & "#")

Succes niet gegarandeerd, want niet getest. Het zou ook zomaar kunnen zijn dat je de begin- en einddatum even in US-formaat moet zetten.
Veldnamen met spaties zijn trouwens niet handig en begin- en einddatum zijn in het Nederlands sowieso 1 woord.

Verder heb ik niets op te merken 🤣
 
Heel erg bedankt voor je reactie, qua Nederlands heb je helemaal gelijk (Soms een drama).
Ik ben een amateur met het bouwen en hou me ben soms chaotische in het bouwen van een applicatie.
Ik heb het bestand bijgevoegd en laten openen op het formulier waar ik graag de periode als standaard waarde wil hebben ingevoegd, met als bron de [datum] in het formulier.

Alvast heel erg bedankt,
JacW
 

Bijlagen

Ik heb het maar even tot het om de vraag te kunnen beantwoorden minimaal benodigde terug gebracht. Ik liep voortdurend vast in "verrassende" opties.

Het lukt denk ik niet om het met een standaardwaarde op te lossen. Je kan pas gaan zoeken nadat de datum is ingevuld. Ik neem tenminste aan dat de ingevulde datum bepalend is voor de periode en niet de huidige datum (date()). Verder moet je er rekening mee houden dat er geen periode gevonden wordt.
Daarom heb ik een gebeurtenis "na bijwerken" op de datum-control gemaakt. Zodra je een datum kiest (en het veld verlaat) wordt er een stukje code uitgevoerd dat kijkt of er een periode is die aan de criteria voldoet. Merk op dat de IdPeriode opgehaald en vastgelegd wordt. Dat is immers de waarde waar je naar moet verwijzen en waarop (terecht) de relatie ligt.

Overigens zet ik vraagtekens bij het nut van het vastleggen van de periode in de tabel Werken. Het is immers een (van de datum) afgeleid gegeven en afgeleide gegevens leg je normaliter niet vast.
Mijn vraagtekens komen misschien ook voort uit het feit dat ik de bedoeling van de tabellen (nog) niet begrijp.
 

Bijlagen

Helemaal geweldig. Het werkt perfect.
Wij werken per 4 week dus 13 periodes in een jaar waar door ik niet kan selecteren per maand hoe en welke route ik heb gereden in die tijd, vandaar dat ik in de tabel het periode nr als extra heb ingevuld waardoor ik in mijn rapport kan selecteren op een periode.

Maar nogmaals bedankt voor de supersnelle reactie.

Met groet,
JacW
 
Nog wat aanvullingen/opmerkingen van een afgehaakt lid :).
Om te beginnen: je gebruik niet altijd de meest logische berekeningen/functies in je query. Zo filter je de begindatum door de huidige datum -60 te doen, maar dat is een beetje een bottebijl methode, omdat niet alle maanden hetzelfde aantal dagen hebben. Ik vermoed dat je twee maanden terug wilt kijken, en dat kun je letterlijk keurig uitrekenen met deze formule:
Code:
>=DateSerial(Year(Date());Month(Date())-2;Day(Date()))
Daarnaast heb je een vreemde manier om het jaartal te berekenen, daar heeft Access een veel betere functie voor:
Code:
Jaar: Year([Begin Datum])
Gebruik die functies dan ook.

Eén opmerking van Peter klopt niet heel erg, namelijk deze: "Het zou ook zomaar kunnen zijn dat je de begin- en einddatum even in US-formaat moet zetten." Eerst een 'foutje': je kunt met opmaak de visuele datum wel omzetten naar Amerikaans, maar niet de waarde. Dat heeft dus geen enkele zin, ook niet in de procedure die Peter gemaakt heeft. Daarnaast is er een prima methode om altijd met de juiste datum te rekenen, ongeacht of je met Amerikaanse datums of met Europese datums werkt, en ongeacht of je dat in een query doet of in VBA. En die is simpel gezegd: zet de datum om naar een getal, en verander dat getal in de query naar een datum. En dat ziet er dan zo uit:
Code:
iPer= DLookUp("[IdPeriode]","tblPeriode","Date() >= CDate(" & CDbl([Begin Datum]) & ")
And Date() <= CDate(" & CDbl([Eind Datum]) & ")")
Dit is overigens de VBA variant, in een query ziet hij er iets anders uit. Dummy code, want je tabel is niet ingericht op deze methode.

Ik heb de aangegeven richting in jouw formulier gezet, ik zag geen reden om dat formulier te verbouwen :).
 

Bijlagen

Dank je, voor je aanvulling.
Die bottebijl was in eerste instantie voor bedoeld dat ik niet moet scrollen om de juiste periode in te vullen. Op een gegeven moment zou je anders de keuze hebben uit 2 of meer dezelfde periodes.

Maar super dat jullie zo mee denken.
 
Terug
Bovenaan Onderaan