Afhankelijke keuzelijsten

Status
Niet open voor verdere reacties.

quirina

Gebruiker
Lid geworden
17 dec 2014
Berichten
9
Hallo,

Ik heb een db gemaakt waarbij de gegevens via een invulscherm in een tabel worden gebracht.
Nu heb ik een doorlopen formulier gemaakt waar ik de verschillende records wil filteren gebruik makend van 2 keuzelijsten met invoervakken waarbij de tweede afhankelijk is van de eerste. Ik heb alles gedaan zoals het staat in de handleiding Hoofdstuk 8 maar het wil maar niet werken.
De records worden perfect gefilterd met elke keuzelijst afzonderlijk, maar wanneer ik eerst filter met de eerste keuzelijst om dan de bekomen records nogmaals te filteren met de tweede keuzelijst, lukt het niet. Het resultaat hiervan is net hetzelfde als dat ik zou filteren met de tweede keuzelijst alleen.

Het doorlopend formulier heeft als recordbron een selectiequery waarin onder andere de velden 'Persoon adres Postcode Gemeente' en 'Persoon Aard' zijn opgenomen.
De eerste keuzelijst (keuzelijst217) filtert op 'Persoon adres Postcode Gemeente'
De tweede keuzelijst (keuzelijst 219) filtert op 'Persoon Aard'.

De rijbron van de eerste keuzelijst is : SELECT DISTINCT [Query opzoeken persoon].[Persoon adres Postcode Gemeente] FROM [Query opzoeken persoon];

De rijbron van de tweede keuzelijst is : SELECT DISTINCT [Query opzoeken persoon].[Persoon Aard], [Query opzoeken persoon].[Persoon adres Postcode Gemeente] FROM [Query opzoeken persoon] WHERE ((([Query opzoeken persoon].[Persoon adres Postcode Gemeente])=[Formulieren]![Opzoeken Persoon met criteria]![Keuzelijst217]));

De code bij 'Na bijwerken' van de eerste keuzelijst is :

Private Sub Keuzelijst217_AfterUpdate()
' De record zoeken die overeenkomt met het besturingselement
Dim rs As Object

Set rs = Me.Recordset.Clone
Me.Filter = "[Persoon adres Postcode Gemeente] = '" & Me![Keuzelijst217] & "'"
Me.FilterOn = True
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

De code bij 'Na bijwerken' van de tweede keuzelijst is :

Private Sub Keuzelijst219_AfterUpdate()
' De record zoeken die overeenkomt met het besturingselement
Dim rs As Object

Set rs = Me.Recordset.Clone
Me.Filter = "[Persoon Aard] = '" & Me![Keuzelijst219] & "'"
Me.FilterOn = True
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

De code bij 'Bij kiezen' van de tweede keuzelijst is :

Private Sub Keuzelijst219_Enter()
Me.Keuzelijst219.Requery
End Sub

Wat heb ik verkeerd gedaan of wat ontbreekt er, wie kan mij helpen?
Alvast bedankt.
 
ik denk dat er bij de tweede keuze lijst nog gefilterd moet worden op wat je de eerste keer hebt gekozen iets met een where functie.

Me.Filter = "[Persoon Aard] = '" & Me![Keuzelijst219] & "'" WHERE "[Persoon adres Postcode Gemeente] = '" & Me![Keuzelijst217] & "'"

dit leest niet goed maar zoiets.
 
niet gelukt

De oplossing die door jwaque werd aangeboden werkt helaas niet. Waarschijnlijk ergens een punt of comma verkeerd?
Heb al van alles geprobeerd om het te laten werken maar het lukt me niet.
Ik heb ook het forum afgeschuimd op zoek naar een oplossing maar ook daar kom ik niet verder.
Heeft nog iemand een oplossing?
 
Laatst bewerkt:
Ingewikkeld, ingewikkeld.... Volgens mij is dit een stuk simpeler. Overigens moet je de 2e keuzelijst dan geen Rijbron geven.
Rijbron voor Keuzelijst217:
Code:
    strSQL = "SELECT DISTINCT [Persoon adres Postcode Gemeente] FROM [Query opzoeken persoon];"

Code:
Private Sub Keuzelijst217_Click()
Dim strSQL As String
    
    If Not Me.Keuzelijst217 & "" = "" Then
        Me.Filter = "[Persoon adres Postcode Gemeente] = """ & Me.Keuzelijst217 & """"
        Me.FilterOn = True
        strSQL = "SELECT DISTINCT [Persoon Aard] FROM [Query opzoeken persoon] " _
            & "WHERE [Persoon adres Postcode Gemeente]= """ & Me.Keuzelijst217 & """"
    Else
        Me.Filter = ""
        Me.FilterOn = False
        strSQL = "SELECT DISTINCT [Persoon Aard] FROM [Query opzoeken persoon] "
    End If
    Me.Keuzelijst219.RowSource = strSQL
    Me.Keuzelijst219.Requery

End Sub

Code:
Private Sub Keuzelijst219_AfterUpdate()
    
    If Not Me.Keuzelijst217 & "" = "" Then
        Me.Filter = "[Persoon Aard] = """ & Me.Keuzelijst219 & """"
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If

End Sub
 
Hallo OctaFish,

Bedankt voor uw reactie, ik had de hoop op een oplossing al bijna opgegeven.
Ben al twee dagen en een nacht aan het zoeken maar blijf maar sukkelen. Ingewikkeld is het zeker

Ik heb alles in de db geplaatst zoals door jou voorgesteld.
Nu krijg ik een foutmelding, bij klikken op de 1° keuzelijst :

De recordbron strSQL=SELECT DISTINCT [Persoon adres Postcode Gemeente] FROM [Query opzoeken persoon]; die is opgegeven op dit formulier of in dit rapport, bestaat niet.
U hebt de naam verkeerd getypt, de bron is verwijderd of de bronnaam is gewijzigd in de huidige database, of de bron komt voor in een andere database.
Open in de ontwerpweergave of de indelingsweergave voor formulieren of rapporten het eigenschappenblad door op de knop Eigenschappen te klikken. Stel vervolgens een bestaande tabel of query in bij de eigenschap RecordSource(Recordbron)

Kan dat te maken hebben met die 'strSQL' ?

Alles ik juist gespeld, de query bestaat en werkt.
 
De nachten zou ik zeker voor iets anders gebruiken als ik jou was :).
Ik wijs queries dus bij voorkeur via VBA toe aan een keuzelijst, en dan gebruik je een stringvariabele zoals in het voorbeeld. De query zelf begint altijd met SELECT, dus ook nog eens zonder de quootjes.
Overigens gebruik je veuls te lange veldnamen :).
 
Je hebt zeker gelijk.
Ik heb mij iets op de hals gehaald om een collega uit de nood te helpen terwijl ik zelf amper tijd heb (ben woning aan het verbouwen).
Ik heb mezelf tijd gegeven tot vrijdag om de db af te krijgen, op welke manier dan ook o.a. onbezoldigd nachtwerk :(.
De db op zich is al in gebruik (met front end en back end) en het enige wat nog moet bijgevoegd worden zijn de opzoek (filter) mogelijkheden.
Wat je zopas schreef is voor mij latijn, ik ben een leek in Access. Vandaar de dommigheden als te lange veldnamen en werken met één tabel waar alle gegevens in opgenomen worden.
Ik heb al gedacht om gewoon een hoop query's en formulieren aan te maken, voor elke zoekopdracht één.
Is zeker niet zoals het hoort, maar ik vrees dat ik niet anders zal kunnen.
 
Probeer het eens op mijn manier; zou namelijk moeten werken. De Rijbron voor de 1e keuzelijst krijgt dus deze SQL code:
Code:
SELECT DISTINCT [Persoon adres Postcode Gemeente] FROM [Query opzoeken persoon]

Overigens: als je maar één tabel hebt, waarom haal je de gegevens dan niet gelijk uit die tabel? Ik vermoed dat die tabel dan Personen heet. En het samenvoegen van al die velden heeft ook niet zoveel zin; je zoekt toch op persoonsnaam. Zet de aparte velden dus gewoon in je keuzelijst in een eigen kolom. Stel de keuzelijst dan nog wel in op 4 kolommen! Je krijgt dan:
Code:
SELECT DISTINCT Persoon, adres, Postcode, Gemeente FROM Persoon
.
En daarmee vul je de tweede keuzelijst als volgt:

Code:
Private Sub Keuzelijst217_Click()
Dim strSQL As String
    
    If Not Me.Keuzelijst217 & "" = "" Then
        Me.Filter = "Persoon = """ & Me.Keuzelijst217.Value & """"
        Me.FilterOn = True
        strSQL = "SELECT DISTINCT [Persoon Aard] FROM Persoon " _
            & "WHERE Persoon = """ & Me.Keuzelijst217 & """"
    Else
        Me.Filter = ""
        Me.FilterOn = False
        strSQL = "SELECT DISTINCT [Persoon Aard] FROM Persoon "
    End If
    Me.Keuzelijst219.RowSource = strSQL
    Me.Keuzelijst219.Requery

End Sub

Code:
Private Sub Keuzelijst219_AfterUpdate()
    
    If Not Me.Keuzelijst217 & "" = "" Then
        Me.Filter = "[Persoon Aard] = """ & Me.Keuzelijst219 & """"
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If

End Sub

Kom je er niet uit: maak even een voorbeeldje :).
 
Hoi OctaFish,

Ik heb het geprobeerd maar het resultaat blijft het zelfde.
De reden dat ik de query gebruik is dat de tabel (HTWB) niet alleen gegevens bevat van personen maar ook van bedrijven (met bv. de coördinaten van de maatschappelijke zetel, de exploitatiezetel, de eigenaar, contactpersoon enz...), ook de gegevens van personen die een vrij beroep uitoefenen, van evenementen, buurtinformatienetwerken enz... Ik had inderdaad meerdere tabellen moeten gebruiken ipv die ene maar zoals reeds gezegd...leek :rolleyes:

Per item gebruik ik dus een query om sneller de nodige velden te kunnen kiezen (query persoon, query bedrijf, query evenement enz... en ook om al een eerste filter te zetten). Met dat laatste bedoel ik dat elke registratie begint met een keuze uit "Aard registratie". Dit gebeurt met een groepsvlak. Hierdoor krijgt de registratie van een persoon als "Aard registratie" het nr. 9 mee, een groot bedrijf het nr. 1, een KMO nr. 2 enz. Aan de hand van dat nummer filter ik dus de query's.

Neem ik nu de query "Query opzoeken persoon", dan zijn daar enkel de velden in opgenomen die betrekking hebben op de registratie van een persoon. Personen worden ingedeeld in een viertal categorieën (de categorie persoon, de categorie Vertrouwenspersoon, de categorie Sleutelpersoon en de categorie Andere persoon). De laatste categorie wordt nogmaals ingedeeld in een (voorlopig) drietal categorieën (ik noem ze hier categorie A, B en C)

Met het eerste keuzevak filter ik dus de personen op woonplaats ttz. gemeente of stad (=Persoon adres Postcode Gemeente). En dat werkt prima.
Met de tweede keuzelijst wil ik vervolgens die lijst (per gemeente of stad) verder filteren op de eerste categorie zijnde persoon, vertrouwenspersoon... (=Persoon Aard).
Er zou nog een derde keuzelijst moeten komen die filtert op een derde niveau zijnde A, B en C (=Persoon Reden)

Ik stel dus de vraag (bijvoorbeeld): "Toon mij alle personen uit een bepaalde gemeente die behoren tot de "Sleutelpersonen" of nog "Toon mij alle personen uit een bepaalde gemeente die behoren tot "Andere personen" en met als reden A (of B of C)

Wanneer ik met het eerste keuzevak de personen heb gekozen die wonen in Tielt, geeft de tweede keuzelijst nog twee mogelijkheden om te filteren (Persoon en Andere persoon). En dat klopt want er zijn geen Vertrouwenspersonen of Sleutelpersonen geregistreerd uit Tielt.

Wanneer ik met het eerste keuzevak de personen heb gekozen die wonen in Ruiselede, geeft de tweede keuzelijst drie mogelijkheden om te filteren (Persoon, Sleutelpersoon en Andere persoon). En dat klopt ook.

Het probleem blijft echter nog steeds dat wanneer ik de lijst die gegenereerd wordt met de eerste keuzelijst verder wil filteren met de tweede, ik als resultaat een nieuwe lijst krijg met alle personen maar dan enkel gefilterd op de tweede keuzelijst en niet meer op de eerste.

De keuzelijsten werken elk afzonderlijk dus prima (waarvoor oprechte dank) maar het getoonde resultaat na de tweede of derde filtering is niet wat het moet zijn.

Ondertussen ben ik begonnen met de zoekmogelijkheden zelf te bepalen, deze op te bouwen met afzonderlijke query's en te laten weergeven met afzonderlijke formulieren. Dus elke zoekvariant zal aan een eigen opdrachtknop toegewezen worden die een bepaald formulier zal openen. Als je bedenkt dat de database draait rond zes gemeenten, er per gemeente twaalf verschillende soorten registratie zijn (persoon, bedrijf, KMO, evenement ...) en er per registratie nog tal van onderverdelingen zijn, zie je wel wat mijn probleem is hé :(

Ik heb gisteren nog de opzoekmogelijkheden voor personen uitgewerkt. Resultaat : 7 query's (1 per gemeente en 1 voor de zes gemeenten samen) en 21 formulieren. En ik moet nog beginnen aan de rapporten! Mochten die keuzelijsten nu toch eens het beoogde resultaat geven.

Toch bedankt voor de moeite die je doet. Ondertussen blijf ik maar verder doen.

Grts
 
Ik snap dat je er niet uitkomt, maar ik snap niet waarom je er niet uitkomt. Want de beschreven tecnieken zijn in weze hardstikke simpel. En ik kan nog wel 10 voorbeelden maken, maar die krijg je dan vermoedelijk ook niet werkend. En waar het probleem bij jou zit kan ik, zonder de db erbij te zien, echt niet zeggen. Dus de enige oplossing is om de db met wat dummyrecords mee te posten.
 
Dat wil ik best doen. Is db met frontend en backend.

Heb geprobeerd om db bij te voegen maar is blijkbaar te groot.
Ook als zip lukt het niet
 
Laatst bewerkt:
je kunt ze op een fileshare zetten als wikisend, of comprimeren en zippen. Met winrar kun je er deelbestanden van 100kb van maken, als de gezipte versies te groot zijn. Laatste redmiddel: je zou 'm ook mogen mailen.
 
Liefst per mail, kwestie van gevoeligheid inhoud db.
 
Laatst bewerkt:
Ik heb je een mail gestuurd; je kunt je mail adres beter weghalen i.v.m. spammers.
 
Ik zit je db te bekijken, en ik verbaas me hogelijk. Deze opzet haalt je ongelooflijk veel werk op de hals, en is nauwelijks te bouwen/onderhouden. Kijk bijvoorbeeld alleen maar eens naar de verschillende Detail tabellen. Dat hoort gewoon allemaal in één tabel thuis. Met een extra veldje [Categorie]. Dan de tabel [HTWB]. Daar zitten al die detailvelden in; er uit en een koppeling maken met een aparte tabel [HTWB_Sector]. En idem dito voor de verenigingsvelden. Er uit, en koppelen met een tabel [HTWB_Vereniging].
Dit is echt geen doen zo, en zo kan ik nog wel even doorgaan (velden bedrijf) :). En dan heb ik het niet over wat je van ons vraagt, maar wat je jezelf aandoet :D.
 
Je hebt gelijk. Jammer voor mij maar ik moet er nu mee verder doen. Later, als ik wat meer tijd heb...
 
De tijd die je nodig hebt om het alsnog goed te doen is vele malen korter dan de tijd die je er nu in gaat steken om dit monstertje drijvende te houden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan