Meerdere tabel records aanmaken in 1 form

Status
Niet open voor verdere reacties.

pweijden

Gebruiker
Lid geworden
16 okt 2009
Berichten
9
Hallo allemaal,

ik probeer een rooster applicatie te maken om snel en overzichtelijk onze wekelijkse roosters te kunnen maken. Ik heb (denk ik) de tabellen zo ingedeeld zodat ik uiteindelijk overzichten kan maken van planning per werknemer, en planning per werkplek per week.

Wanneer ik een rooster ga aanmaken zou ik graag in 1 formulier de datum, werkplek en eventuele opmerking willen invoeren en daaronder een rij van max 15 werknemers en hun starttijd willen invoeren. Als resultaat zou ik dan graag per ingevoerde werknemer een record in de tabel zien met eerder geselecteerde datum en werkplek. Ik weet niet of dit uberhaupt kan, of dat mijn denkwijze niet handig is?

Ik hoop dat jullie me kunnen helpen. Ik heb m'n database voor zover ik ben gekomen bijgevoegd.

Gr. Paul
 

Bijlagen

Eerst even wat algemene zaken. En dat betreft dan het veld [p_WerknemersID\ dat in [Personeel] van het type Autonummering is (dus een getal van type Lange Integer) en in tabel [Beschikbaarheid] een tekstveld. En dat kan natuurlijk niet: een tekstveld kun je nooit koppelen aan een getalveld. Je hebt dat wel geprobeerd in je Relaties, maar je kunt dan nooit Referentiële integriteit afdwingen, en daarmee is je relatie op slag waardeloos. Kun je net zo goed p_Email koppelen aan av_Datum. Werkt namelijk volkomen identiek (dus waardeloos). Idem dito voor [Personeel] en [Rooster], al klopt daar de veldeigenschap wel, maar nu kun je niet koppelen omdat je in Rooster waarden hebt staan die niet in Personeel staan. Resultaat: weer geen Referentiële integriteit. Zorg er dus voor dat die tabellen wél met Referentiële integriteit aangevinkt zijn te koppelen, of koppel ze niet.

Dan je formulier Rooster. Hierop staan 11 identieke velden (p_Naam, rst_Tijd) en dat kan natuurlijk nooit werken. Als je een rooster maakt, heb je voor een rooster standaard gegevens, zoals Periode (2 datumvelden vermoedelijk, of een jaartal en weeknummer) en Werkplek. Maar niet én jaartal én week én datum.
Sowieso moet je nooit 11 velden van hetzelfde op een formulier zetten. Als dat ogenschijnlijk onvermijdelijk is, dan deugt de basisopzet niet. In jouw geval zou ik dus een aparte tabel maken voor Rooster_Medewerker waarin je een RoosterID koppelt aan een MedewerkerID en waarin je ook de datum en tijd selecteert. Die datum en tijd haal je dan uit keuzelijsten waarbij de datums en tijden alleen blokken laten zien die nog niet zijn ingevuld. Dus als je op uurbasis wilt registreren, dan maak je een keuzelijst voor de uren (8:00-9:00, 9:00-10:00 etc) en als je dan op een dag al hebt ingeroosterd voor 11:00-12:00 en 14:00-15:00 dan zijn die blokken niet meer aanwezig in de keuzelijst als je een nieuw record maakt voor dezelfde dag.

Kortom: ik zou de opzet nog eens heroverwegen, en vooral kijken naar de dataredundantie die je nu hebt ingebouwd.
 
Beste OctaFish,

super bedankt voor je reactie, zeer leerzaam. Ik ga direct met de algemene zaken aan de slag.
Voor het formulier rooster nog wat achtergrond:
De datum redundantie komt uit het feit dat we rapporteren en terug willen zoeken op basis van week nummer, en ik heb eigenlijk nog nooit een goede (lees: makkelijke;-) manier gevonden om een weeknummer van een datum te herleiden. Je hebt natuurlijk gelijk dat wanneer ik al een datum heb het jaar volstrekt redundant is. Denkfout van mij!!
Voor wat betreft het inroosteren: We hoeven alleen maar een starttijd in te roosteren. Wat ik graag zou willen bereiken is dat wanneer ik ga roosteren ik in 1 formulier de datum (en weeknr) en werkplek kan selecteren, en vervolgens daaronder de juiste mensen kan invullen. De ene zijn er dat maar 2, maar dat kunnen er ook 12 zijn. Als ik dat in 1 formulier kan doen, zie ik dus direct wie ik al geroosterd heb, en hoef ik niet 12 keer hetzelfde in te vullen (datum/week en werkplek). Of maak ik hier ook een denkfout?

Super bedankt alvast!!
Paul
 
... en ik heb eigenlijk nog nooit een goede (lees: makkelijke;-) manier gevonden om een weeknummer van een datum te herleiden.
En toch is dat heel simpel. Je kunt eens googlen op de term ISOWeeknumber, en dan kom je een prachtige functie tegen die het weeknummer genereert op basis van ISO normen. Een iets minder betrouwbare formule kun je met DatePart toepassen:
Code:
Weeknummer: DatePart("ww";[av_Datum];2;2)
Deze formule genereert eens in de 400 jaar een fout, en is derhalve niet aan te raden ;). Althans: je leest overal dat je toch vooral niet met DatePart moet werken, maar met de eerder genoemde functie. Die overigens prima werkt, en die je dan in een module zet en dan overal kunt gebruiken.
Voor het inroosteren heb je dus die aparte tabel nodig waar ik het eerder over had, en die koppel je dan aan Rooster. De extra tabel zet je als subformulier op Rooster, en je bent helemaal klaar. Ik zou dan in het subformulier een keuzelijst maken voor de medewerkers waarbij je filtert op personen die al zijn ingeroosterd op die dag, zodat je ze maar één keer kunt inroosteren.
 
Ik heb 'm opnieuw opgebouwd en hopelijk de algemene zaken zo beter voor elkaar. Met name de koppeling van de extra tabel aan rooster weet ik niet zeker of ik dit nu goed gedaan heb. Als dit in de basis een goed fundament is, kan ik verder met de weeknummering en de extra's zoals het alleen kunnen selecteren van mensen die nog niet zijn ingeroosterd.Bekijk bijlage RoosterQ1.rar
 
Ik ben denk ik een heel eind gekomen, maar:

Ik zou dan in het subformulier een keuzelijst maken voor de medewerkers waarbij je filtert op personen die al zijn ingeroosterd op die dag, zodat je ze maar één keer kunt inroosteren.

hier loop ik vast. Ik weet niet hoe ik de "Naam" drop-down list in m'n sub-formulier kan filteren op basis van of die naam al bestaat in een ander roosterID met dezelfde datum.
Zou je me hier nog even de goede richting in kunnen helpen?

Tnx,Paul
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan