Gegevens uit Leden tabel meerder malen op Formulier Taken plaatsen met zoeken.

Status
Niet open voor verdere reacties.

theojanissen

Nieuwe gebruiker
Lid geworden
6 jun 2016
Berichten
3
Een uitdaging als aspirant Access ontwerper. Veel lukt maar één probleem lukt me niet en daarom vertaald naar de essentie met een eenvoudig voorbeeld. De file is bijgevoegd en hulp wordt zeer gewaardeerd.

Het lukt me leden uit een Leden-tabel meerdere malen in een Taken-tabel in te voeren.
Vanuit de Taken-tabel genereer ik dan een Taken-formulier per weeknummer waarbij ik bij elke taak één lid een taak laat uitvoeren, waarbij leden verschillende taken kunnen moeten uitvoeren.
Onder elke taak moet dan na de selectie van het lid (Voornaam) automatisch de Achternaam ingevoegd worden.

Het lukt me niet om de juiste Achternaam te verkrijgen behorende bij de betreffende taak m.u.v. Taak 1.

Hoe kan ik dit probleempje oplossen?
 

Bijlagen

Allereerst welkom bij HelpMij!
Ik heb even naar je db gekeken, en ik vind de constructie een beetje onlogisch in elkaar zitten. Het belangrijkste probleem: je tabel [Taken] is niet genormaliseerd. In zo'n tabel heb je m.i. een TaakID nodig (elke taak identificeerbaar op basis van de ID), een datum voor de taak (en niet een weeknummer), en een persoon die de taak uitvoert. [Taak_Id] heb je, maar géén datumveld maar een weeknummer. Dat zóu nog wel kunnen, maar dan moet je ook een jaar meegeven lijkt mij. Anders is de tabel alleen voor het huidige jaar bruikbaar. Want je kunt in de huidige situatie geen onderscheid maken tussen taken in 2015 en 2016. In beide jaren komt immers hetzelfde weeknummer voor. Dus ik pleit voor een datumveld, dan weet je namelijk ook gelijk het weeknummer (=afgeleide van datum).
Maar het echte probleem ligt dus in de velden [Taak 1] t/m [Taak 4]. Dat zijn in mijn ogen 3 velden teveel. Je zou genoeg moeten hebben aan één taakveld. Dat heet dan natuurlijk gewoon [Taak].

Daarnaast gebruik je in de tabel Taken Keuzelijsten met invoervak, en als je mijn berichten een beetje zou volgen, dan zou je weten dat ik daar een gruwelijke heb. Keuzelijsten met invoervak horen niet in een tabel thuis, maar op een formulier.
En dat brengt me bij het laatste deel van je vraag: in de tabel Taken sla je het [Leden_Id] op, meer niet. Dat doe je nu namelijk ook. Alleen besef je dat waarschijnlijk niet, omdat je de Voornaam ziet. En dat komt dan weer doordat je keuzelijsten in tabellen gebruikt.
Ik heb in de bijlage een oplossing gemaakt zoals ik het zou doen. Daarbij zie je dus zowel een weeknummer op basis van een datum, en de achternaam op basis van de keuzelijst Naam. Beide waarden worden dus niet opgeslagen in de tabel.
 

Bijlagen

Bedankt voor de reactie,......maar.....

Dag Tera,

Bedankt voor je snelle reactie. Ik begrijp je antwoord maar het lost helaas mijn probleem niet op. Ik wil graag op 1 form 4 x mensen kunnen selecteren uit een formulier en dat de aanvullende gegevens van die mensen op het formulier zichtbaar worden. In het originele formulier zie je dat dat lukt voor Taak 1, maar niet voor Taak 2 t/m 4 (rode tekst velden) omdat deze steeds weer refereren naar dezelfde tabel als voor Taak 1 gebruikt. Ik denk dan ik moet ergens in Access deze link toch kunnen veranderen. (Zie ook de relaties) taak 1 hangt aan Leden, taak 2 aan Leden_1 enz. Hoe knoop ik taak 2 aan Leden_1 i.p.v. Leden?

Ik hoop dat dit helpt? :)

N.b. dit is niet de echte database waarin het probleem voor komt maar een eenvoudig voorbeeld om het probleem duidelijk te maken.

Groet Theo.
 
Als je mijn antwoord zou begrijpen, zou je ook zien dat dat je probleem wél oplost. Het kan niet op de door jou voorgestelde manier. Althans: alleen heel omslachtig. En op een manier die je niet zou moeten willen, omdat je db totaal niet genormaliseerd is op deze manier. En dat houdt dan weer in dat je de meest idiote problemen tegen gaat komen. Moet je niet willen.
Taken toekennen doe je op basis van noodzakelijkheid. Als in week 12 2 taken zijn, dan maak je voor die 2 taken 2 records aan. Heb je in week 14 6 taken, dan moet je zonder problemen in de database 6 taken kwijt kunnen. Jouw tabel is voor beide voorbeelden ongeschikt: in het eerste geval heb je 2 nutteloze vakken, in het tweede geval kom je er 2 tekort. Bovendien kun je nooit en te nimmer goed rapporteren op deze tabel.

Wat is dan wél de goede insteek? Om te beginnen mijn takentabel natuurlijk, waarbij ik me kan voorstellen dat je meer velden gaat toevoegen. Zo kan ik mij niet voorstellen (maar ik ken jouw omstandigheden uiteraard niet) dat elke taak altijd precies één week duurt. En dat je Pietje dus op een taak hebt gezet die 5 werkdagen duurt, en dat het nooit gaat voorkomen dat Klaasje in deizelfde week twee taken kan uitvoeren. En áls je (al dan niet in de toekomst) taken gaat krijgen met verschillende looptijd, dan wil je de starttijd en eindtijd per taak kunnen vastleggen. Jouw systeem ligt dan al gelijk op zijn achterste... In mijn voorbeeld voeg je 2 datumvelden toe, en je bent klaar.

Daarnaast kan ik mij levendig voorstellen, even uitgaande van het systeem waarbij elke taak precies één week duurt, en elke persoon altijd dezelfde tijd nodig heeft voor die taak (namelijk één week) dat het onwenselijk is dat je één persoon op 4 taken in dezelfde week inplant. In jouw db is dat een fluitje van een cent: vul een weeknummer in en in de velden [Taak 1] t/m [Taak 4] dezelfde persoon. Niemand die daar een haan naar kraait, zeker de database niet, die vindt dat best. In mijn db zou ik een unieke index maken op [weeknummer] en [Leden_Id] en het probleem is opgelost; het is gelijk onmogelijk om één lid aan meer dan één taak per week te hangen. Daarnaast zou ik er dan ook voor zorgen (ook een fluitje van een paar centen) dat je in je formulier alleen maar personen kunt kiezen die die week nog geen taak hebben. Dan is het niet alleen databasetechnisch onmogelijk, maar ook nog eens praktisch.

Hoe ziet dat er dan in de praktijk uit? Heel simpel, met een doorlopend formulier. Eventueel maak je een hoofdformulier met subformulier gebaseerd op weeknummers (zie je de taken per week) en een een hoofdformulier met subformulier gebaseerd op taken (zie je de weken per taak). Of een hoofdformulier op basis van leden en subformulier op basis van taken.
Het maximale aantal taken kun je op zo'n formulier ook simpel tackelen door het aantal records per week te tellen. Heb je er 4 (of een ander getal natuurlijk), dan kan je niks meer invoeren.
 
in bijlage een (bescheiden) poging:
me baserend op het oorspronkelijke bericht
"... waarbij ik elke taak één lid een taak laat uitvoeren..."
"... waarbij leden verschillende taken kunnen moeten uitvoeren ..."
UNIEKE indexen gemaakt op enerzijds week / taak en anderzijds week / lid / taak
indien niet juist, kunnen we de indexen wijzigen / uitbreiden ...
mijn interpretatie is dus minder strikt dan die van Octafish, maar op dit eigenste ogenblik staat er nog geen reactie
van de vraagsteller op de bemerkingen van Octafish; daarom nog even ?!?! bij mijn interpretatie gebleven.
het hoofdformulier en de bijhorende subformulieren zijn hier nog niet gemaakt, maar je kan wel de formulieren
LEDEN en/of TAKEN openen en klikken op het icoontje uiterst links van elke record. je krijgt dan alle gerelateerde records
te zien van dat lid of die taak.
ook het probleem van de ieder jaar terugkerende weeknummers is hier nog niet ondervangen.
daarom is het ook maar een ONTWERP(je) :)

@Octafish
heb dus geen rekening gehouden met je laatste bemerkingen wegens nog geen antwoord van vraagsteller op dit ogenblik.

mvg,
Duke of Earl
 

Bijlagen

Hallo Tera & DukeOfEarl,

Bedankt beiden voor de input. Geeft mij nieuwe inzichten en ik ge ermee aan de slag. :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan