Afhankelijke keuzelijst

Status
Niet open voor verdere reacties.

a1mat

Gebruiker
Lid geworden
13 jul 2001
Berichten
208
Hallo Anne-Marie,

Ik ben ook geinteresseerd in een afhankelijke keuzelijst en heb getracht deze te maken met jouw demo, maar het lukt niet.
In jouw demo heb ik de veldnamen aangepast voor mijn toepassing, maar ergens zit nog een foutje.
Zou jij eens willen kijken en aangeven waar de fout zit?
Bij voorbaat mijn dank.

Met vr. gr.
Math.
 

Bijlagen

  • afhankelijke keuzelijst gilde.zip
    42,8 KB · Weergaven: 70
Aangepast

De kolommen stonden niet goed ingesteld en de query en code verwees naar niet bestaande controls.
Ik heb de kolommen allemaal zichtbaar gehouden zodat je kan zien wat er gebeurd, wanneer je ze niet allemaal wil zien stel je de kolombreedte van de niet gewenste kolom in op 0 (nul).
De bedoeling van het textveld was me niet duidelijk dus daar moet je zelf maar eens naar kijken.
 

Bijlagen

  • afhankelijke keuzelijst gilde.zip
    28,9 KB · Weergaven: 115
Spoedcursus keuzelijsten

Even voor de lezer een korte beschrijving van je database. Je hebt een formulier [Frm TOTAALINFO]. Je hebt een veld [activiteit] en je tweede veld is [groep]. Beide zijn keuzelijst met invoervak. Iedere activiteit heeft een volgnummer ( 01 t/m 03) en bevat meerdere groepen. In de tabel groep is een veld opgenomen dat verwijst naar het volgnummer in de tabel activiteit. Zodra in het formulier een activiteit wordt geselecteerd (bv fietsen) wordt in het 3e veld [opzoeknrcategorie] het bijbehorende volgnummer opgezocht in de tabel activiteit (bv 01). Dit is gedaan met de Dlookup functie (=DLookUp("[volgnr]";"ACTIVITEIT";"Activiteit = Forms![Frm TOTAALINFO]!Activiteit"). De waarde in het veld [opzoeknrcategorie] wordt gebruikt bij criteria in de querie die onder het tweede veld [groep] hangt. Zo worden na selectie van activiteit in het veld [groep] alleen de aan de activiteit gekoppelde groepen getoond.

1. Als eerste ontbreekt in het veld [activiteit] bij de gebeurtenis na bijwerken: Me.Opzoeknrcategorie.Requery. Dit zorgt ervoor dat de waarde in het veld [Opzoeknrcategorie] iedere keer ververst wordt als je een andere activiteit kiest.
2. Nu moet je ervoor zorgen dat deze waarde ( in jouw geval 01, 02 of 03) het criteria vormt in de querie die onder de tweede keuzelijst hangt (in jouw geval Querie groep). Dit doe je door in het betreffende veld [activiteit] in de Querie groep bij criteria te vermelden [Forms]![Frm TOTAALINFO]![Opzoeknrcategorie]. Nu staat er ipv het laatste OpzoeknrActiviteit!!!
3. Vervolgens moet je nu ervoor zorgen dat ook deze querie, nadat je een andere hoofdcategorie kiest, een requerie krijgt na bijwerken (zie onder 1). Dus in de gebeurtenis na bijwerken zet je: Me.GROEP.Requery
4. Het volgende probleem zit dan nog in je tweede keuzelijst. Je hebt ingesteld dat de afhankelijke kolom de 1e is maar de breedte van deze kolom staat op 0. Zet deze op 1cm;2 en de lijstbreedte op 3,5 cm en het ziet er stukken beter uit.

Om het tenslotte echt mooi te maken zet je in de gebeurtenis “na bijwerken” van het veld [activiteit] de waarde van het veld [groep] op null. De gebeurtenis komt er dan in het totaal ongeveer zo uit te zien:

Private Sub AANVRAGER_AfterUpdate()
Me.Opzoeknrcategorie.Requery
Me.GROEP.Value = Null
Me.GROEP.Requery
End Sub

Als dit allemaal werkt verberg je het veld [Opzoeknrcategorie] door de eigenschap zichtbaar ( of visible) op nee te zetten. Suc6
 
Nog een bonustip

Er zullen ook wel andere manieren zijn ACCESS kennende. Op de door mij beschreven wijze kun je ook andere formulieren makkelijk aansturen iets wat ik heel vaak doe. In jouw geval zou je een ( doorlopend) formulier kunnen maken gebaseerd op de tabel groep (Frm groep). Hierin 3 velden (naam groep, Activiteit, uniekvolgnr). In het veld Activiteit zet je bij standaardwaarde= Forms![Frm TOTAALINFO]!opzoeknrcategorie. In je Frm TOTAALINFO zet je bij dubbelklikken van het veld [groep] dat het betreffende Frm groep geopend moet worden en specifieke gegevens gezocht moeten worden:

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Frm groep"

stLinkCriteria = "[Activiteit]=" & "'" & Me![Opzoeknrcategorie] & "'"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Nadat je een activiteit gekozen hebt kun je dubbelklikken op het veld groep. ACCESS laat dan alleen de aan deze activiteit gekoppelde groepen zien. Maar je een nieuwe groep aan vult ACCESS automatisch het volgnummer van de activiteit in. Wil je dat je een nieuwe groep gelijk ziet in je “querie groep” als je Frm groep sluit zet dan een STOP-knop op Frm groep met de gebeurtenis klikken Activeform.refresh ( of zoiets). Op deze wijze kun vanuit 1 formulier al je bewerking uitvoeren.
 
Hallo Anne-Marie en cbhonda,

Hartelijk dank voor jullie snelle reactie.
Ik zal er nu wel uitkomen.
Groetjes Math.
 
Thnx voor deze topic, na al die jaren nog steeds heel zinvol :)
Ik heb gezien dat het op formulieren werkt, maar kan je dit ook rechtstreeks op de tabellen testen dus zonder dat je een formulier aanmaakt??

Ik zie dat deze topic is gemaakt voor een "oudere" versie van Access, maar ik gebruik Access 2010.
 
Ik kende deze behoorlijk oude topic niet, maar de techniek zoals uitgelegd werkt nog, ook in Access 2010. Dus je kunt het voorbeeld probleemloos openen en bekijken. Overigens hebben we in de afgelopen 8 jaar (en eigenlijk weet ik het alleen van de laatste 2) behoorlijk wat vragen over afhankelijke keuzelijsten (al dan niet met invoervak) gehad, en dus ook regelmatig allerlei voorbeelden. Die je ook rustig boven water kunt halen, want er zijn inderdaad meerdere technieken dan deze, die ik zelf zoveel mogelijk vermijd overigens (want er zijn inderdaad betere).
Gezien de leeftijd van de topic, en het feit dat je een andere vraag stelt, zou ik voor willen stellen dat je een eigen topic aanmaakt...
 
Hi Octa,

ik zal een nieuw topic maken indien ik geen betere oplossing kan vinden.

Nog wel een vraag voor jou. Je zegt dat je bepaalde technieken wilt vermijden, maar welke techniek prefereer jij voor zo'n oplossing?
 
Ik geef er de voorkeur aan om geen opgeslagen queries te gebruiken voor keuzelijsten (zoals in het voorbeeld) en de Rijbron van de keuzelijst via VBA te maken.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan