Aangepast keuzevak

Status
Niet open voor verdere reacties.

Jesse2

Gebruiker
Lid geworden
3 mei 2011
Berichten
340
Het gaat hier over 2 keuzevakken uit een invoerformulier.


nu zou ik graag willen dat de keuze in het 1e vak de keuze in het 2e vak beperkt.

bijvoorbeeld in vak 1 word klimaat gekozen.

nu kan er in vak 2 alleen gekozen worden uit de
opties: temperatuur, zuurstofgehalte, zon uren



Ik ben benieuwt naar de reacties!
 
Het formulier fCategorie_Combobox is precies wat ik zoek.
erg bedankt!
 
Ik heb de tabel de query's en de keuzevakken naar mijn eigen formulier gekopieerd het eerste vak geeft 3 keuzes aan alleen de twee andere vakken doen niks.
de naam van het formulier waar in ik ze heb geplaatst is anders als die in het voorbeeld is dit een probleem en wat heb ik over het hoofd gezien?Bekijk bijlage voorbeeld.rar
 
Je was er bijna.... alsof je na een zeereis vanuit Dover de haven van Scheveningen invaart, en dan tot de ontdekking komt dat de motor stilvalt :)
Wat je nog moet doen: bij de eerste twee keuzelijsten moet de gebeurtenis nog worden gekoppeld. Als je de eigenschappen van de eerste bekijkt, en je kijkt naar de gebeurtenis <Na bijwerken>, dan zie je daar nog niks staan. De code staat er wel (die heb je gekopieerd) maar de keuzelijst 'ziet' hem nog niet. Als je op de knop met de drie puntjes klikt, wordt de code gekoppeld; je ziet dan de code die bij de keuzelijst hoort. Als je dan weer terugschakelt naar het Formulierscherm, zie je bij de gebeurtenis staan: [Gebeurtenisprocedure]. En dan doet-ie het. Deze procedure herhaal je ook voor de tweede keuzelijst; die heeft ook een gebeurtenis <Na bijwerken>.
 
Ik heb ook een soort gelijke vraag gesteld en op het forum zijn vele vragen te vinden die overeenkomen. Waar ik echter benieuwd naar ben is wat het doel is (om vanuit het formulier die in het voorbeeld is geplaatst) van de gevraagde actie namelijk het verkleinen van de mogelijkheden. Wat ik interessant zou vinden dat er bijvoorbeeld een knop op het formulier komt die dan een formulier/lijst opent van de mogelijkheden die geselecteerd zijn in het popup-formulier... ik hoop dat ik duidelijk ben?
 
Bedankt de vakjes werken nu!
Er is nog een klein probleempje als ik de velden een besturingselement geef en de record opsla worden de nummer opgeslagen niet de namen.
bv in dit geval 10 in plaats van windows xp.
 
En dat is ook precies de bedoeling! Je wilt namelijk de (unieke) Sleutelwaarden uit de tabel opslaan, niet de (niet-unieke) omschrijvingen. Dus dat aspect is helemaal correct. In queries is het vervolgens heel simpel: koppel de tabel met de brongegevens aan de tabel met de verwijzingssleutels, en gebruik uit de brontabel het omschrijvingsveld, en je ziet op het scherm weer tekst, i.p.v. getallen. In essentie is dat het werken met een goed genormaliseerde database.
@dirkdrent:
Het nut van gekoppelde keuzelijsten kan op verschillende manieren worden uitgelegd. Eén variant heb je zelf al aangegeven: het terugbrengen van de lengte van een enkelvoudige keuzelijst. Natuurlijk kun je alle records uit het voorbeeld in één keuzelijst laten zien, maar als daar een paar honderd keuzes in zitten, wordt het kiezen er niet makkelijker op. Door de keuzes stelselmatig steeds verder te verfijnen, maak je het werken met de gegevens voor de gebruikers een stuk overzichtelijker.
Dit systeem is ook erg makkelijk te maken als je familieverbanden wilt vastleggen; je kunt onbeperkt kinderen van kinderen van kinderen etc. invoeren, door steeds een verwijzing te maken naar het record van de ouder(s). Idem dito voor partners die qua gegevens uiteraard hetzelfde zijn, maar in een verschillend record worden opgeslagen. Door te verwijzen naar een partner record, kun je die heel simpel koppelen. Voor mij is belangrijk dat je met deze opzet een ongelimiteerd aantal parent-child records kunt maken; zolang je een ParentID invult, heb je een nieuwe laag gemaakt. En geen ParentID is de toplaag. Zo simpel kan het dan zijn.
 
Hoe zit het eigenlijk met het toevoegen van hoofdonderwerpen, Moet er dan een query worden toegevoegd?
 
als ik de naam van het gekozen onderwerp en sub onderwerp probeer weer te geven door de tabellen 2 keer in de zelfde query met elkaar te
koppelen krijg ik een foutmelding in de query.

het veld [Datum] kan naar meerdere tabellen verwijzen.
het gaat hier in dit geval om de volgende code:

wk/dag: Weekcode([Datum])
 
Laatst bewerkt:
Geef de twee tabellen een Alias, en voeg die naam toe aan je formule. De melding is volkomen terecht en logisch; als een veld in twee tabellen dezelfde naam heeft, moet je de tabelnaam er expliciet bijzetten, want Access moet natuurlijk wel weten uit welke tabel de waarde moet worden gehaald. Als je de ene tabel A noemt, en de tweede tabel B, dan krijg je dus in je formule: wk/dag: Weekcode([A].[Datum]) of wk/dag: Weekcode(.[Datum])
 
Laatst bewerkt:
op het moment dat ik de koppeling maak tussen het veld met het nummer en het veld met de naam word het aantal records verdubbeld. ook worden er meerdere namen weergegeven die gekoppeld zijn aan 1 nummer.
ook zijn de records nu niet meer bewerkbaar. wat doe ik hier fout?
Ik wil de keuzevakken gebruiken in een formulier om records toe te voegen, dit is toch wel mogelijk?
 
Laatst bewerkt:
In die query heb je twee records; en dat klopt ook, want je hebt twee records in notities. Om zowel Onderwerp als Subonderwerp te zien, kun je deze query gebruiken:

Code:
SELECT Notities.Id, Notities.Datum, Notities.Onderwerp, Hoofd_Cat.Naam AS Hoofdcat, Notities.Subonderwerp, Sub_Cat.Naam AS Subcat, Notities.[Relevant voor Made], Notities.Ingevoerd, Notities.Opmerking, Weekcode([Datum]) AS [wk/dag]
FROM tCategorie AS Sub_Cat INNER JOIN (tCategorie AS Hoofd_Cat INNER JOIN Notities ON Hoofd_Cat.CatID = Notities.Onderwerp) ON Sub_Cat.CatID = Notities.Subonderwerp;
 
Met die code lukt het niet helemaal maar door een dubbele koppeling te maken in de query lukt het wel.
Maar dan krijg ik nog meer records omdat er in de notities meerdere mogelijkheden zijn.
hoe kan ik dit effectief gebruiken?
Mijn bedoeling is om na het invullen van het invoerformulier 1 record te krijgen met de waarden die zijn gekozen in het invoerformulier.
 
Met mijn query zou dat toch moeten kunnen; die koppelt namelijk de tabel tCategorie twee keer met een Alias op Hoofdonderwerp en Subonderwerp.
Op zich hoef je in je tabel Notities maar één veld te hebben voor je categorie; door de koppeling met de ParentID kun je namelijk altijd in overzichten alle bovenliggende niveau's laten zien. Dat is nu juist het mooie van het systeem! Dus een Hoofdonderwerp en Subonderwerp opslaan is niet alleen overbodig, het kan ook leiden tot fouten, als je achteraf met de hand een hoofdonderwerp verandert in een waarde die niet als ParentID bij het gekozen subonderwerp hoort. Dus zelf zou ik dat nooit doen, en alleen het echte (sub)onderwerp opslaan. Maar die keus is natuurlijk aan jou!
 
De query noemt de tabellen Sub_cat en Hoofd_cat? welke waarden moet ik in die tabellen zetten?
 
Het is heel simpel: je hoeft maar één waarde op te slaan, namelijk het laatst geselecteerde (het laagste niveau) veld (keuzelijst). Als je dus een keuzelijst <Hoofdonderwerp> hebt die de lijst <Subonderwerpen> filtert, hoef je alleen maar de keuzelijst <Subonderwerp> op te slaan. Want op basis van het veld ParentID van die keuzelijst, weet je welke hoofdonderwerp daarbij hoort. Gebruik je 3 niveau's, dan sla je <SubSubonderwerp> op, want op basis van het SUbSubonderwerp weet je het Subonderwerp (subsubonderwerp heeft ParentID), en op basis daarvan weet je het hoofdonderwerp (subonderwerp heeft ParentID) en ook het Hoofdonderwerp (onderwerp heeft geen ParentID). En die relaties kun je dus allemaal in één query blootleggen. Ergo: je heb maar één veld nodig voor ofwel Hoofdonderwerp, Subonderwerp of SubSubonderwerp!
 
Bekijk bijlage voorbeeld.rar

ik snap niet precies hoe ik de query zou moeten toepassen.
Zou je misschien even naar mijn voorbeeld willen kijken?
ik heb de query QKoppeling genoemd.
 
Laatst bewerkt:
Je query werkt niet, omdat het veld Onderwerp een tekstveld is en geen numeriek veld. Maar zoals ik al zei: dat veld kan ook helemaal weg... Bijvoorbeeld zo:

Code:
SELECT Notities.Id, Notities.Datum, Notities.Subonderwerp, Sub_Cat.Naam AS Subcat, Hoofd_Cat.CatID, Hoofd_Cat.Naam AS Hoofdcategorie, Notities.[Relevant voor Made], Notities.Ingevoerd, Notities.Opmerking, Weekcode([Datum]) AS [wk/dag]
FROM (tCategorie AS Sub_Cat INNER JOIN Notities ON Sub_Cat.CatID = Notities.Subonderwerp) LEFT JOIN tCategorie AS Hoofd_Cat ON Sub_Cat.ParentID = Hoofd_Cat.CatID;
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan