Ga naar inhoud

Query werkt niet in een formulier met keuzelijsten als niet in alle keuzelijsten een keuze is gemaakt


Luc De Rouck
 Delen

Aanbevolen berichten

Hello beste PC-Help specialisten;

Voor mijn bedrijfje in de bouwsfeer heb ik een DB gemaakt om de tijdregistratie van de werknemers wat beheersbaar te maken.

Hiervoor heb ik een DB gemaakt waar ik de dagelijkse werkfiches van de werknemers kan inbrengen om vervolgens op het einde van de maand

een overzicht te krijgen per werknemer. Het is, denk ik, een klassieke DB bestaande uit 5 Tabellen die gevoed worden door de overeenkomstige Formulieren.

Hoofdtabel is wel 'tblTijdregistratie' die gekoppeld is met het formulier 'frmTijdregistratie'. Hierin worden dagelijks de activiteiten van de werknemers geregistreerd

zoals beginuur, einduur, de werf waar ze gewerkt hebben, het aantal kilometers in het busje enz. Via Formulier 'frmZoeken' kan ik een selectie maken van de lijst die ik wil bekomen.

Een datumbereik kan worden ingevuld en vervolgens heeft men 3 keuzelijsten: Keuze Werknemer, Keuze Status, en Keuze Werf. Nemen we als voorbeeld een datumbereik van 01/05/2021 tot 31/05/201 met als werknemer 'Gert' en kies bij status 'Werkdagen'  en vervolgens op de knop 'Uitvoeren' druk, dan krijg ik perfect de query die gekoppeld is aan 'frmZoeken' (= 'qryTijdregistratie Query')

Ik wil nu echter een lijst waar ik een werknemer kan selecteren zonder 'Status' dus hetzelfde datumbereik, Werknemer 'Gert' en 'Uitvoeren', dan werkt de query niet.

Blijkbaar wil de query dat in alle keuzelijsten een entry wordt ingevoerd, en dat is het probleem. Want zo kan ik nooit een lijst maken van hoelang men op een bepaalde werf heeft gewerkt. Ik heb als volgt geredeneerd: ik moet de query vertellen dat als er niets in het tekstvak staat, hij gewoon de volledige kolom moet weergeven. Ik heb daarvoor de volgende formule aangegeven:   Like“*”&[Formulieren]![frmZoeken]![txtWerknemer]& “*”   maar dit werkt niet. Na dagenlang uitzoeken in mijn documentatie kwam ik bij de expressie IIf(IsNull) terecht. Ik dacht dit is het: als er in het tekstvak niets staat (=IsNull) geef dan de volledige kolom weer, anders de inhoud van het tekstvak. Ik heb daarvoor de volgende formule samengesteld:   IIf(IsNull([Formulieren]![frmZoeken]![txtWerknemer]);[Werknemer]);[txtWerknemer] Like”*”;[Werknemer]=[Formulieren]![frmZoeken]![txtWerknemer])  maar de query wil deze formule niet aannemen: "syntax error' teveel of te weinig haakjes, te veel of te weinig komma's het is steeds iets en ik weet niet goed meer wat te doen. Zou iemand zo vriendelijk willen zijn (Philiep?) om dit eens te bekijken? In bijlage stuur ik de DB in kwestie (een beetje gestript en de namen anoniem gemaakt) . Met dank op voorhand.

P.S: niet iedere werknemer was ziek, of met verlof in een bepaalde maand. Daarom als jullie testen nemen jullie best de maand mei (1/5/2021 tot 31/5/2021) en werknemer Gert als voorbeeld. Deze gabber heeft toen gewerkt, en was ziek, en was op verlof dus de query moet normaal een resultaat geven.

Met vriendelijke groeten, Luc

AdminCase_1.rar

Link naar reactie
Delen op andere sites


Hello dotchiejack, bedankt voor de snelle reaktie!

Ik heb je formule ingevoerd als criterium in de kolom Statusinfo en het werkt! Als ik enkel de naam van een werknemer aangeef dan krijg ik een query met alle statusvarianten dus werkdag, ziekte en verlof. Selecteer ik in het vak Status "Verlof" bijvoorbeeld, dan krijg ik enkel de verlofdagen. Prachtig hoe je dat opgelost hebt, ik kende de functie "Like Nz" niet, en vreemd genoeg vind ik er niets van terug in mijn Access handboek, wel de functie "Like A-Z".

Nu heb ik uw formule aangepast naar: Like Nz([Formulieren]![frmZoeken]![txtWerven];"*") en dit in het criterium van de kolom "Werven" geplaatst want het is de bedoeling dat ik een datumbereik aangeef, van januari tot nu bijvoorbeeld en dan enkel in het keuzevak "Werven" een werf aangeef, bijvoorbeeld "Stationstraat" om zo een query te bekomen die mij de dagen aangeeft dat er daar gewerkt is. Maar helaas, dit werkt niet, de query geeft niets weer en bovendien werkt het met de vakken "Werknemer" en "Status" ook niet meer. Als ik de formule er weer uithaal dan werkt het terug voor de vakken "Werknemer" en "Status". Enig idee hoe we het vak "Werven" er ook kunnen bij betrekken? Bedankt voor uw moeite en beste groeten, Luc

Link naar reactie
Delen op andere sites


Hey beste Philiep, sorry dat ik je zo heb doen zoeken. Heb de tblTijdregistratie aangepast en als ik nu in het veld "Seleceer Werf" een werf invoer dan geeft de query mij netjes alle dagen dat we op die werf gewerkt hebben. Goed zo zou ik zeggen, maar blijkbaar heeft dit ook gevolgen op de twee overige vakken "Werknemer" en "Status". Als ik bij "Werknemer" een naam aangeef, dan geeft de query mij een lijst maar met alleen "Werkdagen", ondanks het feit dat er bij "Status" niets is ingevuld. Als ik een werknemer inbreng met als status "Verlof" of "ziek" dan geeft de query mij geen resultaat. Vreemd, want als ik de criteria "Like Nz([Formulieren]![frmZoeken]![txtWerven];"*")" terug uit de kolom "Werven" haal dan werken de keuzelisten "Werknemer" en "Staus" weer normaal. Hoe kan het toevoegen van een criterium in een query invloed hebben op  andere criteria in andere kolommen? Kunnen wij hiervoor nog een oplossing vinden? Beste groeten, Luc

Link naar reactie
Delen op andere sites

Als je een naam ingeeft en een werf kan er alleen iets gevonden worden tijdens de werkdagen. (logisch)

Hetzelfde geldt voor Verlof of Ziek,daar is ook geen werf mee verbonden en wordt er niets gevonden. (logisch)

Je moet eerst je query vernieuwen voor andere zoekopdrachten, die opdracht kan je normaal toevoegen onder de knop Uitvoeren.

Als het niet lukt kijk ik morgen verder. Ik ben een ochtendmens. (15:30 is al laat voor mij)

Link naar reactie
Delen op andere sites


Hello Philiep, ik heb getracht een knop "vernieuwen" aan te brengen op het formulier "Kiezen" maar toen werkte er helemaal niets meer. Ik heb hem terug verwijderd en nu kan ik terug selecteren op "Naam" en "Status" maar niet op "Werven". Vreemd want als ik de formule  Like “*” & [Formulieren]![frmTijdregistratie]![txtWerven] & “*” in de query zet dan werkt niets meer. In bijlage heb ik de DB nogmaals weergegeven, kwestie dat na alle veranderingen en aanpassingen we nog met dezelfde gegevens werken. Merci nogmaals voor al uw moeite! Groetjes, Luc

AdminCase_3.rar

Link naar reactie
Delen op andere sites

Ik heb wat aanpassingen doorgevoerd.

In je gegevensblad qryTijdregistratie Query in de SQL-weergave plak je letterlijk volgende code:

 

SELECT tblTijdregistratie.IdTijdregistratie, tblTijdregistratie.Datum, tblTijdregistratie.Beginuur, tblTijdregistratie.Einduur, ([Einduur]-[Beginuur])*24 AS Delta, tblTijdregistratie.Werknemer, tblTijdregistratie.Statusinfo, tblTijdregistratie.Werf, tblTijdregistratie.Kilometer, tblTijdregistratie.Nota, Format$([Datum],"ww",0) AS Expr1, [expr1] Mod 2 AS Kleur
FROM tblTijdregistratie
WHERE (((tblTijdregistratie.Datum) Between [Formulieren]![frmZoeken]![txtBegindatum] And [Formulieren]![frmZoeken]![txtEinddatum]) AND ((([tblTijdregistratie].[Werknemer])=[Formulieren]![frmZoeken]![txtWerknemer] Or [Formulieren]![frmZoeken]![txtWerknemer] Is Null)<>False) AND ((([tblTijdregistratie].[Statusinfo])=[Formulieren]![frmZoeken]![txtStatusinfo] Or [Formulieren]![frmZoeken]![txtStatusinfo] Is Null)<>False) AND ((([tblTijdregistratie].[Werf])=[Formulieren]![frmZoeken]![txtWerven] Or [Formulieren]![frmZoeken]![txtWerven] Is Null)<>False))
ORDER BY tblTijdregistratie.Datum, tblTijdregistratie.Beginuur;

 

Voor de knop uitvoeren in frmZoeken verander je de code Bij klikken naar  [Gebeurtenisprocedure] in plaats van [Ingesloten macro] en gebruik volgende macro in plaats van je huidige code.

 

Private Sub QureyZoeken_Click()
    DoCmd.OpenQuery "qryTijdregistratie Query"
    DoCmd.Requery
End Sub

 

In bijlage aangepast bestand (het eerste) waarvan ik denk dat je problemen daarmee opgelost zijn.

AdminCase_1.accdb

Link naar reactie
Delen op andere sites

Gast
Dit topic is nu gesloten voor nieuwe reacties.
 Delen

×
×
  • Nieuwe aanmaken...