Datumcriterium in query.

Status
Niet open voor verdere reacties.

BoudewijnBijlsma

Gebruiker
Lid geworden
20 okt 2016
Berichten
7
Hallo,

Ik ben vandaag voor het eerst op dit forum. Hoop dat ik een niet al te 'domme' vraag stel.
Ben niet heel onervaren met ACCESS maar toch loop ik soms tegen een probleem aan waar ik (ook na veel proberen) niet uitkom.

Ik heb in een access-applicatie die al lang 'draait' binnen ons bedrijfje ineens behoefte aan een (aangepast) rapport dat is gebaseerd op een query.

In een van de tabellen is een veld [STARTdatum] opgenomen.

In het rapport wil ik de gebruiker aanbieden dat er (nadat de gebruiker een startdatum heeft ingevuld) een rapport uitrolt gebaseerd op [ingevulde datum] en alle data daarna. Dus >=[startdatum]. Echter als de gebruiker gewoon ENTER geeft dan wil ik alle STARTdata zien. Ik zou dat in de onderliggende query willen oplossen:

Ik probeerde: Like "*">=[Je zoekt vanaf Start-datum, geef een datum op (dd-mm-yyyy), of geef ENTER (dan zie je alles)] & "*" maar dat werkt niet. (en da's misschien ook wel logisch.)
Ik probeerde vervolgens allerlei varianten "met en zonder LIKE", met #[datum]#, met AND en met OR.

U begrijpt het al, ik kom er niet uit.

Bij een tekstveld werkt: (bijvoorbeeld bij het zoeken naar een naam: Like "*" & [Typ (deel) van de achternaam waarvan u een overzicht wil of geef ENTER] & "*" perfect. Hoe werkt een dergelijk statement bij een datum-veld?

Blij als iemand mij hiermee kan helpen.

Groet,

Boudewijn
 
Hallo Boudewijn,
Allereerst welkom bij HelpMij!. Domme vragen bestaan niet, zoals je vermoedelijk wel weet, hooguit domme antwoorden. Dat schijnt bij mij nog wel mee te vallen, dus hopelijk kan je er wat mee :).

Hoe werkt een dergelijk statement bij een datum-veld?
Dit bijvoorbeeld levert een duidelijk antwoord op: Niet! Dat kan je op die manier namelijk niet filteren. Is ook logisch, want een datum is een getal, en het heeft geen enkele zin om op een deel van een getal te filteren. Vandaag is bijvoorbeeld dag 42663, dus je kunt filteren op de cijfers 2, 4, 3 en 6. Niet erg zinvol dus. Maar er is (uiteraard) een oplossing. Die bestaat uit een soort drietrapsraket:

1. Maak een parameter aan van het type datum/tijd, bijvoorbeeld: [Typ een startdatum]. (hoeft niet, maar maakt het invoeren van een filter makkelijker)
2. Maak een onzichtbaar veld aan in je query met de formule Expr1: IIf([Typ een startdatum] Is Null;Waar;[Startdatum]>=[Typ een startdatum])
3. Geef een criterium op voor dit veld: <>Onwaar

En dat is alles. Nu kun je een criterium opgeven (11-7 bijvoorbeeld als je alles wilt zien vanaf 11-7-2016) of je kunt het parameterveld leeglaten. In het laatste geval zie je alles.
 
Dank Octafish,

Zo keek ik er nog niet tegenaan ... interessant antwoord.

Ik probeerde dit toe te passen...(zie ook de bijlage)

Dan krijgt de gebruiker toch (hoewel query-veld onzichtbaar is)....drie keer een vraag in zijn scherm. (of interpreteer ik 'onzichtbaar' verkeerd)

1.[Geef een datum op] -die wil ik inderdaad tonen.
2.[typ een startdatum]
3.[startdatum]

Doe ik nog iets verkeerd?Access.jpg

Boudewijn.
 
Heb je stap 1 ook gedaan? De parameter vastgelegd? In SQL moet je dan dit zien:
Code:
PARAMETERS [Typ een startdatum] DateTime;
SELECT ... etc
 
:eek:

Was nog helemaal niet met SQL bezig. (schaam)

Ik ga daar kijken ... dacht dat ik het met de ontwerpweergave van de query wel zou redden ...

Bij wat ingewikkelder queries wordt SQL voor mij zoiets als dat gewone tekst voor mijn dislectische zoon is ... maar ... ook hij oefent en is gelukkig heel geduldig.

Dus ... ik ga aan de slag.

Groet,

Boudewijn
 
:eek:

Met enige schroom ... ik raak nu toch de weg kwijt ...

Mag ik hier op terugkomen want ik begrijp hier nu even helemaal niets meer van.

SQL, queries, parameters ... het duizelt even. Ik dacht dat ik een simpele vraag stelde ...

Als ik mijn dB een beetje uitkleed mag ik je dan een accdb sturen (?) (in zip-vorm) met het bewuste rapport en de query (en de betreffende tabellen uiteraard) ? Ik ga hier denk ik niet uitkomen.

Á propos, mijn SQL ziet er nu zo uit:

PARAMETERS [Typ een startdatum] DateTime;

SELECT Patienten.RegNr, Patienten.Patientnm, Agendagebeurtenis.[Datum Planning], Agendagebeurtenis.Dagdeel, Agendagebeurtenis.[Einde Toediening], Agendagebeurtenis.Medicatie, Agendagebeurtenis.Aantal, Agendagebeurtenis.[Aantal per dag], [voornaam] & " " & [tussenvoegsel] & " " & [Patientnm] AS Patiënt, Agendagebeurtenis.[Start Toediening]

FROM Patienten INNER JOIN Agendagebeurtenis ON Patienten.RegNr = Agendagebeurtenis.Registratie

WHERE (((Patienten.RegNr) Like "*" & [Typ het Registratienummer van de patiënt waarvan u een overzicht wil, of geef ENTER] & "*") AND ((Patienten.Patientnm) Like "*" & [Typ (deel) van de patiënt- achternaam waarvan u een overzicht wil of geef ENTER] & "*") AND ((Agendagebeurtenis.[Start Toediening])>=[Gewenste eerste datum van start toediening]) AND ((IIf([Typ een startdatum] Is Null,True,[Start toediening]>=[Typ een startdatum]))<>False))

ORDER BY Agendagebeurtenis.[Start Toediening];

Maar ik krijg toch nog 4 schermen waar iets moet worden ingevuld ...

Groet,

Boudewijn.
 
Maar ik krijg toch nog 4 schermen waar iets moet worden ingevuld ...
Dat klopt, als ik goed meetel:
Code:
[Typ het Registratienummer van de patiënt waarvan u een overzicht wil, of geef ENTER]
[Typ (deel) van de patiënt- achternaam waarvan u een overzicht wil of geef ENTER]
[Gewenste eerste datum van start toediening]
[Typ een startdatum]
Je hebt namelijk 4 parametervelden gemaakt. Dus krijg je 4 vraagvelden. Persoonlijk zou ik, bij zoveel dialoogjes, een formulier maken waar de gebruiker op zijn/haar gemakje alles invult wat ingevuld moet worden, en dan één keer op de knop klikken om de query of het rapport uit te voeren. Dan zie je veel beter wat je doet als gebruiker, en het is veel rustiger werken.
Als je de db comprimeert en zipt, kun je hem, als hij onder de 100 kb blijft, uploaden. Kijken we er naar. Als de zip te groot is, dan kun je hem hernoemen naar .xlsb, want Excel bestanden van dit type mogen 1Mb zijn. Wij hernoemen het bestand dan uiteraard weer naar de oorspronkelijke extensie.
 
Octafish,

Ik stuur de database in zip-vorm.

De patient-gevoelige info die hier instaat betreft allemaal gefingeerde data ... dus geen echte patienten.

Wellicht vind je een keer de tijd om er een blik op te werpen?

Ik denk dat ik ergens een fout maak met veldnamen, maar ik vind de fout niet.

Voorbaat dank,

Boudewijn Bijlsma.
 

Bijlagen

  • AgEhelpmij.zip
    48,5 KB · Weergaven: 39
Dag Octafish,

Heb je toevallig al tijd gehad om hier naar te kijken ?.

Ik heb er overigens geen haast mee ... volgende week een weekje 'uitwaaien'. Als ik daarna enigszins begrijp wat ik verkeerd doe in die query dan ben ik heel tevreden.

Groet,

Boudewijn
 
Nog niet, maar ik zal proberen er vanavond even een blik op te werpen.
 
Als ik jouw db bekijk constateer ik inderdaad ook dat er 5 inputboxen (parameters) voorbij komen en geen 4. Waarschijnlijk omdat je ergens toch een typfout of zo hebt gemaakt, al kan ik die zo snel ook niet vinden. Als ik alle parameters vastleg, en de query opnieuw van criteria voorzie, én de functie Opbouwen gebruik, zodat er geen typfouten gemaakt kunnen worden (je hebt nogal lange parameters gebouwd; zou ik zelf nooit zo doen) werkt de query zoals verwacht. Door deze opzet houd je, wat er ook gevraagd wordt, altijd 4 parameters.
Zelf zou ik dus een filterformulier gebruiken, waarin de gebruiker netjes middels tekstvakken en datepickers de noodzakelijke velden in kan vullen waarna de query (of het rapport) wordt uitgevoerd met de selectie.
 
Octafish,

Hartelijk dank voor jouw tijd en expertise.

Ik ga er mee aan de slag en ik onthoud dat een formulier met tekstvakken en datepickers (misschien) wel een betere optie is. Ik ga dat ontdekken ...

Groet,

Boudewijn
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan