Keuzelijst met invoervak

Status
Niet open voor verdere reacties.

Sytse1

Gebruiker
Lid geworden
9 aug 2007
Berichten
584
Office versie
miDer
Keuzelijst met invoervak
De onderliggende query heeft een ja/nee veld
De te tonen gegevens moeten zijn Ja of Nee of beiden.
In een teksveld staat Leden of Niet Leden of Leden en Niet Leden
In het formulier worden dan met Ja of Nee of alle getoond.
In de query van Keuzelijst met invoervakworden de gegevens dmv IIf([Forms]![Frm_A]![SrtLid]="Leden";Ja;Nee) getoond.
Werkt uitstekend.
Maar hoe krijg ik nu het voor elkaar als in het tekstvak SrtLid staat Leden en Niet leden om de gehele tabel te zien?
 
Tja, wat wil je nu precies? Als je een filter in een query zet, dan wordt één van de opties uit de keuzelijst (Ja of Nee gebruikt. Wil je alle records zien, dan is het simpel: niet filteren. De kwestie is dus niet: hoe kan ik in het filter alle opties gebruiken, maar moet zijn: hoe gebruik ik ofwel de filteropties, ofwel niks. En daarvoor geef je te weinig informatie. De manier waarop je het filter gebruikt ()IIf([Forms]![Frm_A]![SrtLid]="Leden";Ja;Nee)) belooft al niet veel goeds, want daar ga je het niet mee redden. Dus de eerste vraag: waarom filter je in de query, en niet op het formulier? Daar kun je het namelijk wél simpel instellen zoals je wilt.
 
Probeer eens:
WHERE fldLid = IIf([Forms]![Frm_A]![SrtLid]="Leden";Ja;Nee) or ([Forms]![Frm_A]![SrtLid]="Toon alles")
 
NoellaG, jammer genoeg werkt jouw voorstel ook niet.
De query van de Keuzelijst met invoervak accepteert wel de Iif met de Ja of Nee.
De derde mogelijkheid van: Toon alles of als je aan beide voorwaarden niet wordt voldaan toon dan alles werkt niet.
De Keuzelijst met invoervak moet een onderliggende query hebben.
Een verwijzing naar b.v. een procedure kan niet.

AccessGuru begrijpt misschien mijn vraag niet. Het formulier toont op verschillende manieren de tabel/query.
Ik wil dat de gegevens in de Keuzelijst met invoervak gelijk zijn aan dezelfde gegevens die in het formulier worden getoond.
Want als de gebruikers kiest voor een gegeven in de Keuzelijst met invoervak wordt naar het betreffende record gegaan.
Dan moeten de getoonde gegevens(records) in de Keuzelijst met invoervak wel dezelfde zijn als de gegevens in het formulier.
In ieder geval bedankt voor het meedenken.
 
Verbaast me niets dat de oplossing van noella niet werkt. Kun je de gebruikte query volledig​ laten zien?
 
AccessGuru begrijpt misschien mijn vraag niet. Het formulier toont op verschillende manieren de tabel/query. Ik wil dat de gegevens in de Keuzelijst met invoervak gelijk zijn aan dezelfde gegevens die in het formulier worden getoond.
Niet om het een of ander, maar wat heb je dan voor raar formulier gemaakt? Als ik een keuzelijst maak op basis van de records op dat formulier om te zoeken, dan heb ik in ieder geval nooit zo'n constructie nodig gehad. Sowieso heb je in je keuzelijst waarin je het formulier filtert maar drie waarden nodig: 1) Leden, 2) Niet Leden en 3) Leden en Niet Leden. Op basis daarvan filter je dan het formulier. Een keuzelijst met de in het formulier aanwezige records baseer je toch op de Recordsource van dat formulier? Ga je toch niet apart filteren?

En dat formulier filter: dat filtert dus ofwel op Leden (Ja), Niet leden (Nee) of alle leden (geen filter). Dus ik blijf gewoon achter mijn antwoord staan :).
 
Ander idee: in plaats van met een Iif te werken kan je de switch optie misschien proberen:
Switch("Leden",Ja,"Niet leden", Nee, "Allen", NULL)
Je kan zo een paar opties uitproberen, wie weet werkt er een.
 
Ja Sytse1 het is ook een beetje dubbelop, een veld met ja/nee en een tekstveld waarin Leden of Niet Leden of Leden en Niet Leden staat.

Men is lid of geen lid daaraan voldoet het ja/nee, anders is de keuze alles, oftewel geen filter.

Maak een keuzelijst met invoervak.

Rijbron "Alles";"Leden";"Niet Leden"
type rijbron lijst met waarden

na bijwerken krijg je dan

Code:
Dim strFilter As String

Select Case Me.Jouwkeuzelijstnaam

    Case "Alles"
    strFilter = ""

    Case "Leden"
    strFilter = "[Lid/Niet lid] = true"   ''''[Lid/Niet lid] is de naam van het ja/nee veld in de tabel

    Case "Niet Leden"
    strFilter = "[Lid/Niet lid] = false"

End Select

Forms!JouwFormulier.Filter = strFilter
Forms!JouwFormulier.FilterOn = True


Bij openen van je formulier de code

Code:
Forms!Jouwformulier.FilterOn = False
Me.Jouwkeuzelijst = "Alles"


Gr. Cor
 
Dat zou ik dan toch zo doen:

Code:
    Select Case Me.cboFilter
        Case "Alles"
            strFilter = ""
            bFilter = False
        Case "Leden"
            strFilter = "[Lid/Niet lid] = True"   ''''[Lid/Niet lid] is de naam van het ja/nee veld in de tabel
            bFilter = True
        Case "Niet Leden"
            strFilter = "[Lid/Niet lid] = False"
            bFilter = True
    End Select
    With Me
        .Filter = strFilter
        .FilterOn = bFilter
    End With

En maak een keuzelijst die de waarden van het formulier filtert. Die pakt automatisch de actieve recordset. Kun je zo met de Wizard maken.
 
Het kan nochtans perfect met een query, zie screenshot en voorbeeld DB:
 

Bijlagen

  • Ledenquery.JPG
    Ledenquery.JPG
    68,9 KB · Weergaven: 19
  • _test.zip
    _test.zip
    50,7 KB · Weergaven: 13
Mijn tekst is toch niet duidelijk geweest.
Ik heb mijn toepassing gestript en bijgesloten.
Wellicht wordt dit dan duidelijker.
Selecteer.png

In het formulier wordt op basis van de keuzeknoppen rechts bepaald welke leden of niet leden of beiden worden getoond.
De keuzelijst toont op basis hiervan een selectie. Behalve dan alle wel en niet leden.
Door de eerste letter(s) van de te zoeken naam in te toetsen wordt de naam in de keuzelijst direct gevonden.
Als de naam is gevonden wordt direct dmv Enter direct naar de naam in de onderliggende tabel gesprongen.
Denk aan dat er een aantal mensen voor je staat.
Je wil de aanwezige(n) dan direct , zo snel mogelijk, selecteren uit je bestand.
Misschien is dit duidelijker.
(Hetzelfde maak ik op achternaam)
 

Bijlagen

De voorbeeld query die ik gaf kan je gebruiken als voorbeeld voor de basisquery van je combobox :) in plaats van basisquery voor een subformulier zoals in het voorbeeld
 
Laatst bewerkt:
NoellaG,
In een vorig formulier zijn de mensen al ingevuld met naam enz.
Tevens of ze lid zijn Ja of Nee.
In het formulier wat ik geplaatst heb gaat het alleen om te selecteren dat iemand aanwezig is.
Naderhand wordt op basis van de selectie automatisch wedstrijdschema's gemaakt.
Het kan zijn een wedstrijd zijn voor b.v. 50 mensen.
Hun aanwezigheid wil je dan snel kunnen registreren.
Het kunnen wedstrijden zijn voor alleen leden of niet leden of beiden.
Eendaags toernooien of maand of kwartaal toernooien. b.v. elke zaterdag. Enz.
Dit wordt door een vereniging zelf bepaald. (Uiteraard zit er ook puntentellingen overzichten op internet e.d. bij)
Het gaat dan in dit formulier ook er om, om eerst de aanwezigen zo snel mogelijk te registreren.
Je bouwt een lijst van namen op maar niet iedereen komt telkens weer.
In mijn toepassing kunnen er zeg maar 45 of 76 of 89 aanwezig zijn.
Dan moet je niet in een lijst steeds scrollen en zoeken.

In jouw voorbeeld heb je het over een subform. Mijn formulier heeft dit niet.
Ik ga om het simpeler te maken 2 keuzelijsten maken. 1 met leden en niet leden en 1 met beiden.
De actuele wordt dan getoond en de andere is hidden.
 
Ik snap het Sytse, maar het subformulier is alleen een voorbeeld, je kan dezelfde query methode gebruiken om een combo box te vullen en dan hoef je in je allereerste vraag alleen de query waarin je nu iif gebruikt te vervangen door een switch (of zelfs de iif die je nu gebruikt) en er een OR instructie aan toevoegen voor het geval je iedereen wil zien. Een beetje zoals in #3, maar dan natuurlijk met de juiste syntax. De syntax in#3 was niet bedoeld als een werkende code, maar een idee om je op de juiste weg te zetten, net zoals het voorbeeld dat ik gegeven heb. Maar je allereerste idee is wel degelijk doenbaar, je moet alleen de juiste namen/syntax invullen.
 
Sytse,

U hoeft uw base niet te veranderen, met de knopen werkt het zo ook goed.

Om te zoeken op voornaam kunt u beter ook de achternamen weergeven, immers er zijn meer mensen die Pietje heten.

Verander dit in uw keuze lijst

Aantal kolommen 6
Kolombreedte 0cm;0cm;0cm;4cm;0cm;4cm

Code:

Code:
Private Sub KeuzelijstVoornaamNL_AfterUpdate()
  ' De record zoeken die overeenkomt met het besturingselement
    Me.Id.SetFocus
    DoCmd.FindRecord Me.KeuzelijstVoornaamNL.Value, acEntire
    'Me.Naam.SetFocus 'Kan er ook nog bij is beterzichtbaar dan Id
End Sub

Probeer de ingebouwde marco's te vergeten.
Vroeg of laat geeft dit problemen.


Gr. Cor
 
Pieter, het bijgesloten db was maar een proefmodel.
Natuurlijk wordt er een complete naam getoond.
Ook na de naam ingaven wordt het record gevonden.
Zoals uit mijn eerdere uitleg blijkt ging het om een keuzevenster waar op drie verschillende manieren de records getoond moeten worden.
Ondanks alle aanwijzingen zoals Switch, Case enz die ik op verschillende manieren heb geprobeerd is het mij niet gelukt. En dat ligt ongetwijfeld aan mij.
Ik heb het nu opgelost met twee op elkaar liggende keuzevensters. Waarvan 1 de twee mogelijkheden Ja of Nee laat zien. De andere alle records. Waarbij gebruik gemaakt wordt van verbergen en tonen.
Bedankt voor alle suggesties.
Sytse
 
Omdat ik niet langer kan aanzien hoe je aan het prutsen ben (twee aparte keuzelijsten die je naar behoeven verbergt? Voor zo'n simpel probleem?) Als je het hier vraagt, is er altijd wel iemand die het even voor je kan maken. Maar ja, dan moet die vraag wel komen :). Omdat de Sint weer in het land is, ben ik wat milder dan normaal, dus hierbij de uitwerking. Kijk vooral goed naar wat er niet​ op het formulier staat. Je hebt namelijk helemaal niet veel nodig voor deze vraag.
 

Bijlagen

AccessGuru,

Heel hartelijk bedankt.

Ik kan soms dagenlang prutten zonder de juiste (goede) oplossing te vinden.
Wellicht is het dan niet de goede, mooiste, efficiëntste, maar het werkte wel.
Mijn motto is: Learning all the time.
En inderdaad weer wat geleerd.
 
Leren is uiteraard altijd goed :). Zelf zou ik de actie op de keuzelijst gebruiken om te filteren, niet om naar het record te gaan. Dat werkt visueel wat makkelijker. Vind ik :). Filter kun je daarna wel weer uitzetten, of daarna de volgende record uit de keuzelijst kiezen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan