Toon posts:

[Access] drie gerelateerde keuzelijsten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik bouw een database in Access voor een bedrijf dat zich bezig houdt met muziekproducties. Er zitten o.a. relaties (leveranciers, opdrachtgevers en artiesten) in het systeem. In 1 van de tabellen wordt vastgelegd wat voor soort relatie het betreft (een relatie kan verschillende soorten hebben). Het soort relatie wordt in 3 niveaus vastgelegd met keuzelijsten. Als niveau1 gekozen is, moet de keuzemogelijkheid voor niveau2 en niveau3 beperkt worden. De keuzelijsten zijn dus aan elkaar gerelateerd.

Het lukt mij niet om deze constructie aan de praat te krijgen. Ik ben al wel zo ver dat ik niveau2 kan laten afhangen van niveau1. Maar onbedoeld worden alle records bijgewerkt. Voorbeeld: je kiest voor een eerste soort artiesten/zang/sopraan (dit gaat goed). Vervolgens een tweede soort arrangeurs/klassiek. Dit gaat ook goed, alleen nu is zang in de eerste rij veranderd in allround.

Weet iemand van jullie of ik iets over het hoofd zie?

Hier de gegevens:

Tabel TabRel050 (soort relatie):
code:
1
2
3
4
5
VELDNAAM    TYPE        OMSCHRIJVING
relnr       numeriek    relatienummer
niveau1     numeriek    hoogste niveau waarmee soort relatie wordt beschreven
niveau2     numeriek    onderverdeling van niveau1
niveau3     numeriek    verdere specificatie


Tabel TabRel051 (omschrijving soort relatie):
code:
1
2
3
4
5
VELDNAAM    TYPE
niveau1     numeriekl
niveau2     numeriek
niveau3     numeriek
omschrijving    tekst


Voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
NIVEAU1 NIVEAU2 NIVEAU3 OMSCHRIJVING
1       0       0       arrangeurs
1       1       0       allround
1       2       0       pop
1       3       0       jazz
1       4       0       klassiek
2       0       0       artiesten
2       1       0       zang
2       1       1       sopraan
2       1       2       alt
etc.

Formulier:
Afbeeldingslocatie: http://web.inter.nl.net/users/ebakker/Erik/form.jpg

Recordsource niveau1:
code:
1
2
3
SELECT DISTINCTROW TabRel051.omschrijving, TabRel051.niveau1
FROM TabRel051
WHERE (((TabRel051.niveau2)=0) AND ((TabRel051.niveau3)=0));


Recordsource niveau2:
code:
1
2
3
SELECT DISTINCTROW TabRel051.omschrijving, TabRel051.niveau2
FROM TabRel051
WHERE (((TabRel051.niveau1)=[Formulieren]![FrmRel280]![niveau1]) AND ((TabRel051.niveau3)=0));


Recordsource niveau3:
code:
1
2
3
SELECT DISTINCTROW TabRel051.omschrijving, TabRel051.niveau2
FROM TabRel051
WHERE (((TabRel051.niveau1)=[Formulieren]![FrmRel280]![niveau1]) AND ((TabRel051.niveau2)=[Formulieren]![FrmRel280]![niveau2]));

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Misschien kun je een filter toepassen op het moment dat een keuze gemaakt wordt op een niveau 'hoger'

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
In feite doe ik dat al. De WHERE clausule van het SELECT statement in de recordsource van de drie keuzelijsten is eigenlijk een filter.

Het probleem is: hoe zorg ik ervoor dat het filter alleen op de juiste keuzelijst wordt toegepast? Bij mij worden alle keuzelijsten opnieuw gevuld.

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 04:34
Ik wil dit topic toch een schop geven. Ik heb deze database geprobeerd na te bootsen en kom op dezelfde problemen uit. Ongetwijfeld heeft het te maken met een verkeerd datamodel (een parent-child tabel (zo-eentje die je naar zichzelf joint :P) lijkt me beter), maar ik vraag me af hoe je dit nu het makkelijkst modelleert, zodat je ook een makkelijk-te-gebruiken formulier overhoudt.

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Verwijderd

KL1 heeft een vaste keuzelijst. Na wijzigen van KL1 maak je KL2 en KL3 leeg. Komt de Focus op KL2 dan wijzig je de query en doe een KL2.requery. Na wijzigen van KL2 maak je KL3 leeg. Krijgt KL3 de Focus dan wijzig je de query op basis van KL1 en KL2 en doe een KL3.requery.

Verwijderd

Kun je niet je recordset ophalen (per list) en dan add of remove item doen op basis van de geselecteerde join??

Dus bijvoorbeeld

Visual Basic:
1
2
3
4
Do until rs1.eof
List1.addItem rs1!text, rs1!textID
rs1.moveNext
Loop



rs2 (alles ophalen)
Bij click op list1 :
1. List2 alle items verwijderen
2. rs2 filteren op Indexwaarde van het gekozen item (dus niet opnieuw ophalen)
3. List2 opnieuw vullen vanuit je gefilterde recordset


etc.

Verwijderd

Topicstarter
Ik dacht dat er niet meer gereageerd werd. Maar nu zie ik toch een paar bruikbare reacties. Ik heb deze paasdagen zo mijn familieverplingen. Maar tweede paasdag heb ik misschien wel tijd om jullie ideeën uit te proberen. Ik hou je op de hoogte.

Thnx alvast.
Pagina: 1