Toggel resultaten gebruiken

Status
Niet open voor verdere reacties.

RobertJB66

Gebruiker
Lid geworden
2 feb 2022
Berichten
219
Mede Helpmij leden ik ben nieuw op dit form en ben in Access met een projectje bezig waarbij ik wat hulp kan gebruiken.

Ik haal uit een tabel jaartallen op ieder uniek jaartal wordt aan een eigen toggel knop toegewezen, nooit meer dan 6 jaar tallen naar 6 afzonderlijke toggel knoppen.

Vervolgens druk ik op een toggel knop en komt het jaartal (.caption) waarde in een listbox geplaatst. Dit laatste is niet noodzakelijk.
Het doel is dat de tekst die in de toggel knop staat wordt gebruikt om in een andere Query te gebruiken.
Het moet mogelijk zijn om meerdere toggel knoppen in te drukken en dan dient de resultaten van de query de records laten zien van de jaren die overeen komen met de geselecteerde jaartallen.

Het doel hiervan is om in Access een Select Slicer te bouwen zoals standaard in Excel zit. Dit om een idee te geven van het doel van dit project.

Het lukt mij om de resultaten van de toggel knoppen in een listbox te laten zien.
Echter om de resultaten van de geselecteerde jaren in een query te gebruiken moet het resultaten een tring zijn die voorzien is van een "OR" tussen de jaren. Voorbeeld 2022 Or 2021 Or 2019

Kan iemand mij een idee aan de hand doen hoe ik dit het beste kan oplossen?

IN de bijlage een afbeelding van hoe het er uit ziet op dit moment. 2022, 2021, 2020 en 2019 zijn geselecteerd en worden dan weergegeven in de listbox links ervan. Als ik 2022 de-selecteer, gaat de toggel knop van 2022 naar lichtblauw en verdwijnt de waarde uit de listbox.

mvg. Robert
 

Bijlagen

  • Capture.JPG
    Capture.JPG
    20,9 KB · Weergaven: 33
Allereerst natuurlijk welkom bij HelpMij! Met plaatjes kunnen we, zoals je vermoedelijk wel snapt, niet zo bar veel. Dan kunnen we ook niet veel meer dan algemene hulp geven, in de hoop dat je die kan vertalen naar je eigen situatie. Dus als je échte hulp wilt, is het handiger als je de database zelf (eerst comprimeren, en dan zippen) meestuurt. Ik verbaas me wel eens over de nogal dwingende opgave die in een vraag zit opgesloten:
... om de resultaten van de geselecteerde jaren in een query te gebruiken moet het resultaten een tring zijn die voorzien is van een "OR" tussen de jaren. Voorbeeld 2022 Or 2021 Or 2019
Met 'tring' bedoel je waarschijnlijk een String, maar die typefout zien we uiteraard niet :). Mij gaat het om het woordje moet, gevolgd door de gewenste uitkomst. Ik snap dat niet, want er is een veel handigere oplossing, die ook foutloos werkt, wat niet gegarandeerd is bij het gebruik van OR. En dat is dus niet dit gebruiken: "2022 Or 2021 Or 2019", maar dit: In(2022, 2021, 2019). de parameter IN werkt namelijk altijd, ook als je maar één argument hebt (één jaartal). Daardoor is het gebruik van deze parameter vastomlijnd: altijd een beginhaak, dán de argumenten (gescheiden door een komma) en altijd een sluithaak. Strings opbouwen met OR kan uiteraard ook wel, maar a) zijn ze langer, b) moet je steeds een stringelement toevoegen en c) gebruiken de meeste gebruikers een loop waarbij ze altijd de OR toevoegen, en dan op het laatst de laatste OR weer verwijderen. Omslachtig :).

Nogmaals: zonder verdere informatie kunnen we niet zoveel hulp aanbieden. Je zult dus de Listbox uit moeten lezen op geselecteerde waarden, of ze rechtstreeks uit de (in Rotterdam veel vaker gebruikte term) Toggle knop moeten lezen, wat uiteraard net zo makkelijk is. Of, en dat zou ik doen, vergeet de keuzelijst en zet de complete string in een tekstvak. Die kun je dan gelijk in je query incorpereren. Op zijn minst moeten we weten hoe je die query genereert.

... Het doel hiervan is om in Access een Select Slicer te bouwen zoals standaard in Excel zit. Dit om een idee te geven van het doel van dit project.
Dit snap ik niet: Access is geen Excel, en kent dus ook geen slicers. Die functionaliteit zit er ook niet in, dus wat stel jij je voor bij een slicer in Access?
 
AccessGuru,

Dank je wel voor de snelle reactie.
Mogelijk heb ik het geheel iets te omslachtig beschreven.
Wat ik wil bereiken is dat ik 6 toggel knoppen heb. Iedere toggel knop heeft de waarde van een jaartal. Door een toggel knop te selecteren wil ik de waarde (.caption) waarde onderdeel te laten zijn van een Query.
Deze Query laat dan het resultaat van de ingedrukte toggel knop(pen) zien.

Als alleen toggel 2022 wordt ingedrukt wordt allen de data van 2022 naar de Query gestuurd in het geval dat 2022, 2020 en 2019 geselecteerd worden dan zou de query de data van deze jaartallen gaan weergeven.

Het onderstaande heb ik nu begrepen het start met In('2022', '2019') en dan werkt het perfect :d
(Als ik in de Query Tools in de Query onder de Rij van Jaar bij Crireria: de jaartallen met een "Or" er tussen zet, (2022 Or 2020 Or 2019) wordt de data netjes gefilterd. b.v. (2022, 2020, 2019) krijg ik een foute melding op. Het zal mij hier aan de kennis ontbreken :o Kan jij een voorbeeld geven hoe dit er in de Criterea uit zou moeten zien?)

Ik hoop dat ik het hiermee iets beknopter en duidelijker heb kunnen uitleggen.

Wat ik bedoel met Excel Slicer is alleen om een idee te geven wat de bedoeling is van het eind resultaat. Vergeet dit gewoon, te veel informatie. ;)
 
Laatst bewerkt:
Het onderstaande heb ik nu begrepen het start met In('2022', '2019') en dan werkt het perfect
Als je een voorbeeld overneemt, moet je het goed overnemen :). Jaartallen zijn getallen, en moet je dus ook filteren als getal. Daarom stond er dit in mijn voorbeeld: In(2022, 2019) en niet dit: In('2022', '2019'). En ik gebruik hierbij een komma, omdat je de query vermoedelijk (maar je geeft (nog steeds), te weinig informatie) met VBA achter een knop gebruikt, anders zou je geen knoppen hebben op je formulier. In een query zet je dit: In(2022; 2019)
 
Dankje voor de correctie:confused:

De basis van mijn vraag is: Ik heb 6 toggel knoppen, niet in een "Option Groep" Ik kan dus meerdere toggels indrukken.
Ik wil de waarde die in de .caption staat gebruiken om een Query te filteren. Deze waarde is het jaartal. Het resultaat mag van mij eerst in b.v. een TextBox komen of in een Stringvariable gezet worden die dan is opgenomen in de Query.
Ik ben bang dat ik het onnodig ingewikkeld heb gemaakt met alle extra informatie die ik eerder heb gegeven.:o

De toggels die zijn ingedrukt maken dan een String die gebruikt wordt in de query.

Hoe zou dit er in VBA uit kunnen zien


Het jaartal haal ik uit een datum veld waarbij de functie "Jaar: Year(ProdDatum) " wordt gebruikt. Is het resultaat van deze functie misschien dat het jaartal dan een String ipv een getal. In("2021', '2019') direct in de Query geeft het gewenste resultaat.
- In(2021; 2019) krijg ik "The expression you entered contains invalid syntax"
- In(2021,2019) toont geen resultaat als de query wordt uitgevoerd
- In(2021, 2019) geeft ook een syntaxt fout
 
Valt wel mee, met de verwarring. Ik geef gewoon weer hetzelfde antwoord. Zie #2 en #4 dus. Helemaal snappen doe ik het niet, want dit: Jaar: Year(ProdDatum) zou echt een getal moeten opleveren als resultaat. En getallen filter je zonder quootjes. De laatste twee varianten die je aanhaalt (die overigens identiek zijn, want die spatie doet niks) zou in een Amerikaanse versie moeten werken, en de variant In(2021; 2019) zou in de Nederlandse variant dus moeten werken. Bij mij is dat altijd zo namelijk. Deze varianten In("2021", "2019") of In("2021", "2019")) werken alleen als je met tekstvelden werkt. Overigens is deze variant: In("2021', '2019') altijd fout, omdat je met quootjes aan het googelen bent. Dus die zal bij jou ook echt niet werken.

Verder heb ik het ook niet gehad over een Groepsvak, waarvan de grap is dat je inderdaad de keuze kan beperken tot één knop met een waarde. Je zult hoe dan ook de knoppen die je gebruikt voor de jaartallen moeten checken en uitlezen met een loopje. En de resultaten dus ofwel in de listbox moeten zetten (dat gaat nu toch ook goed? ofwel in een tekstvak moeten verzamelen in een filterstring.

Had je gisteren een database mee gepost, dan had je overigens nu al op het strand van een mooie cocktail kunnen genieten :). Want het is echt heel simpel.
 
Het bijsluiten van de database is wat lastig aangezien het gaat om een SQL database die ik via een ODBC koppel aan Acces. Ik verwacht als ik het access deel stuur er niet veel meegedaan kan worden. Ik kan het fout hebben.:rolleyes:

Wel ben ik verder gekomen met de routine om de data van de toggel knoppen in een textbox te krijgen.
De uitdaging is nu om het in het juiste formaat te krijgen zodat de Query ermee overweg kan.

Dit is de VBA code die na ieder toggel knop het jaartal in een String zet. Voor test doeleind geef ik de waarde in de string weer in een textbox.

Private Sub JaarSelectie()

Dim JaarSelect As String
JaarSelect = "In ("

For i = 0 To 5
If Me("TglJaar" & i).Value = True Then
JaarSelect = JaarSelect & "'" & Me("TglJaar" & i).Caption & "'" & ","
Me.TxtJaarSelect = JaarSelect & ")" 'puur voor test doeleinde
Else
Me.TxtJaarSelect = JaarSelect & ")"
End If
Next i
End Sub

De bovenstaande VBA geeft nu in de textbox de inhoud "In ('2022','2019',) als 2022 en 2019 geselecteerd worden. De komma achter het laatste jaartal behoort daar niet te staan, maar hoe?

Hou zou de criteria in de query eruit moeten zien zodat de query met deze informatie filtert?:confused:
 
Kan inderdaad wat simpeler (zeker als je de CODE tags gebruikt ;))
Code:
Private Sub JaarSelectie()
Dim JaarSelect As String


    For i = 0 To 5
        If Me("TglJaar" & i).Value = True Then
            If Not JaarSelect = "" Then JaarSelect = JaarSelect & ","
            JaarSelect = JaarSelect & "'" & Me("TglJaar" & i).Caption & "'"
        End If
    Next i
    If Not JaarSelect = "" Then Me.TxtJaarSelect = "In (" & JaarSelect & ")"
End Sub
 
Hoe zou deze code uitgebreid moeten worden zodat als er na een selectie de selectie van de laatste Toggel ongedaan wordt de JaarSelect ook leeg wordt.
NU is het zo als ik b.v. 2022 en 2021 selecteer en dan deze beide de-selecteer, blijft de laatste die ge-deselecteerd wordt in de JaarSelect staan. Voor de andere gaat het goed.:rolleyes:
 
Misschien na de laatste een refresh doen?

Trouwens als je een copie van de database wil meesturen kan dat gemakkelijk door een full backup te nemen (wel het vakje copy-only niet vergeten aan te vinken anders kan je het backup plan verknoeien). Zip de bak file, en stuur deze door. Vermeld wel even in welke versie de BU is gemaakt.
 
Ik snap niets van je vraag.
Hoe zou deze code uitgebreid moeten worden zodat als er na een selectie de selectie van de laatste Toggel ongedaan wordt de JaarSelect ook leeg wordt.
Je hebt, zeg je zelf, 6 toggle knoppen (dapper zoals je consequent het woord 'toggle' verkeerd blijft spellen, dat duidt op een vasthoudende geest :)). Nu vraag je dat de complete selectietekst in JaarSelect leeg moet worden gemaakt als je de laatste toggle weer uitzet. In mijn Nederlands houdt dat het volgende in: als ik de selectie "In(2001,2002,2003)" heb gemaakt, en ik zet de laatste uit, dan hou ik dus dit over: "In(2001,2002)". De selectie wordt dus niet​ leeggemaakt. En toch wil je dat wel?
 
Ok ik zal vanaf nu de Engelse benaming gebruiken;).

Wat ik bedoel, is hoe zorg ik er voor dat de JaarSelect leeg wordt het moment dat de laatste 'toggle' ook wordt gedeselecteerd. Er is op dat moment geen enkele toggle meer ingedrukt en dient de JaarSelect leeg te zijn.

Ik verwacht dat ik mij hiermee beter heb uitgedrukt.:d
 
De vertaling van 'toggle' is 'schakelaar', niet 'toggel'. Weliswaar dat dat in jouw woonplaats gebruikelijk is om te gebruiken ("Goede toggel deze toggel", "Prettige toggel allemaal" etc), maar niet in Nederland :). Microsoft gebruikt het woord "Wisselknop" en dat lijkt mij ook een correcte vertaling.

Ik snap nu wat je bedoelt :). Kwestie van een check gebruiken die controleert of alle knoppen weer uit staan, en op basis daarvan het tekstvak leegmaken.
 
Je kan ook als eerste lijn het tekstvak leegaken

Code:
Private Sub JaarSelectie()
Dim JaarSelect As String

    [B]Me.TxtJaarSelect = ""[/B]
    For i = 0 To 5
        If Me("TglJaar" & i).Value = True Then
            If Not JaarSelect = "" Then JaarSelect = JaarSelect & ","
            JaarSelect = JaarSelect & "'" & Me("TglJaar" & i).Caption & "'"
        End If
    Next i
    If Not JaarSelect = "" Then Me.TxtJaarSelect = "In (" & JaarSelect & ")"
End Sub
 
Net zo makkelijk, en een regel korter:
Code:
Private Sub JaarSelectie()
Dim JaarSelect As String


    For i = 0 To 5
        If Me("TglJaar" & i).Value = True Then
            If Not JaarSelect = "" Then JaarSelect = JaarSelect & ","
            JaarSelect = JaarSelect & "'" & Me("TglJaar" & i).Caption & "'"
        End If
    Next i
    If Not JaarSelect = "" Then Me.TxtJaarSelect = "In (" & JaarSelect & ")" Else: Me.TxtJaarSelect = ""

End Sub
 
Een regel korter is ook goed.

Ik heb het geheel even voorzien van een eenvoudige tabel met wat datumtijd notaties, zodat het te delen is met data.

Wat ik graag wil bereiken::d
- bij het laden van het DatumSelectie Form worden in eerste instantie alle jaren, maanden en dagen op de knoppen weergeven.
- bij de selectie van 2020 worden alleen de maanden en de dagen die in 2022 weergegeven.
- indien ook 2021 wordt geselecteerd worden de maanden en dagen van 2021 ook weergegeven.
- bij selectie van een maand worden alleen de dagen van die maanden weergegeven.

Ik verwacht dat ik dit kan realiseren met een Hoofdquery JaarMaandDagQ en dan afgeleide Query's JaarQ, MaandQ en DagQ

Per selectie is er in het DatumSelectie Form een textveld waar de geselecteerd knoppen waardes in verschijnen die dan gebruikt kunnen worden in de Query's TxtJaarSelect, TxtMaandSelect en TxtDagSelect

Ik neem even aan dat ik in JaarMaandDagQ in het Criteria veld een verwijzing moet plaatsen naar het TxtJaarSelect veld iets als "[Forms]![DatumSelectie]![TxtJaarSelect]". Erna verwacht ik dat er en update of refresh van de Query's gedaan zal moeten worden:o

Kan iemand mij de juiste weg op sturen:love:
 

Bijlagen

Zo'n voorbeeldje met ODBC koppelingen werkt uiteraard niet bij ons. Ik heb voor mezelf lokale kopieën gemaakt van de gebruikte tabellen, maar ik heb geen idee waarmee ik de records moet vullen. Bovendien ben ik geen tikgeit, en het kost mij veel te veel tijd om wat dummy data in te kloppen. Nog afgezien van het feit dat die tabellen en de velden mij weinig tot niets zeggen. Kortom: we kunnen niet behoorlijk testen in deze database. Maak dus een voorbeeldje met lokale tabellen (Copy-Paste, Alleen structuur) en vul de tabellen met wat gegevens zodat we op een normale manier kunnen testen!
 
RobertJB66,

Een simpel voorbeeld gemaakt, maar wel met een krachtig filter programma.

Zie voorbeeld, maak wel eerst een kopie voor je er wat aan wilt veranderen.

Bekijk bijlage Filter.rar


Gr. Cor
 
En hier het voorbeeldje dat ik zelf maar weer heb aangepast. Maar graag dus de volgende keer een bestandje waar we mee kunnen werken, met data :)
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan