koppelen tabellen

Status
Niet open voor verdere reacties.

Ottie

Gebruiker
Lid geworden
19 okt 2009
Berichten
8
Beste Acces kenners,

Het lukt me niet om tabellen te koppelen.

Mijn DB ziet er als volgt uit;
tabel leden
tabel instrumenten
tabel beheer

In de tabel leden staan alle gegevens over de persoon (eigen ID, sleutel). In de tabel instrumenten staan de muziekinstrumenten, eigendom vereniging (eigen ID, sleutel).
In de tabel beheer staan de betaalgevens, maar daar willen we ook het instrument in kunnen zetten. Ieder instrument heeft dus een eigen ID en is dus ook maar één keer uit te lenen.
In de tabel beheer komt ieder lid weer terug; lidnr (ID), naam, schternaam, betaaloptie en instrument. op dit moment heb ik de instrumenten erin geplaatst via een opzoekkolom, maar dan staan een instrument dus niet vergrendeld en zou ik ook toe kunnen wijzen aan een ander persoon.
Verder zou ik dus graag vanuit de tabel instrumenten willen kunnen zien wie het instrument heeft. Er staat nu zo'n kruisje onder, maar als je dat opend krijg je de velden te zien maar geen gegevens...

Hoe krijg ik het voor mekaar?
Wie kan me verder helpen?

Dank.

Groeten, Frank
 
Je moet, om e.e.a. makkelijk werkbaar te houden, je gegevens (in gedachten) in twee groepen splitsen: de basisgegevens, en de muterende gegevens.
Instrumenten in Personen zijn hierbij dus vaste gegevens, je basistabellen.
De Uitleen tabel is een mutatie-tabel: hierin leg je gegevens vast die een wisselende status (kunnen) hebben, zoals: Persoon A leent Instrument C. Daar zitten dus meestal datumgegevens in, en of iets is uitgeleend of niet, en wanneer het is teruggebracht.
In de Uitleentabel moet je dus, behalve de gegevens die slaan op een handeling, ook de gegevens opslaan van Instrument en Persoon.

Als je deze gedachtengang overbrengt naar de noodzakelijke Relaties in Access, dan zie je dus dat je in de tabel Persoon en Instrument een ID veld nodig hebt. Dit gegeven maakt de persoon of het instrument uniek. In de Uitleen tabel sla je dit unieke gegeven dus ook op. In database termen zeg je dan dat er een één-op-veel relatie bestaat tussen (bijv.) Instrument en Uitleen : één instrument kan veel keren worden uitgeleend.

Als je al je tabellen correct hebt opgezet, en je InstrumentID veld in de tabel Instrumenten is bijvoorbeeld een Autonummerveld, dan is het veld InstrumentID in de tabel Uitleen een Numeriek veld, met de instelling <Lange Integer>. Ga je nu naar het scherm Relaties, en je sleept het veld InstrumentID van de tabel Instrumenten naar het veld InstrumentID van de tabel Uitleen , dan zie je in het volgende scherm de optie <Referentiële Integriteit afdwingen>. Deze optie moet je aanzetten, om te voorkomen dat je instrumenten uitleent die je niet hebt. Iets dat in de praktijk uiteraard ook niet mogelijk is...

Deze handelingen doe je voor alle tabellen waarin tabel A afhankelijk is van tabel B. Dus ook voor de tabel Uitleen en de tabel Personen, want daartussen bestaat ook een één-op-veel relatie.

Om te kunnen zien welke instrumenten uitgeleend zijn, en welke niet, heb je wat extra werk nodig. Je kunt bijvoorbeeld in de tabel Instrumenten een Ja/Nee veld opnemen met de naam Uitgeleend. Hier kun je dan later op filteren m.b.v. een query, zodat je kunt zien wat uitgeleend is en wat niet.
Probleem is alleen, dat het uitlenen en innemen een handeling is die het Ja/Nee veld moet triggeren: als je iets uitleent, moet het veld op Ja staan (status Uitgeleend), komt het instrument terug, dan moet de status leeg worden gemaakt (Uitgeleend = Nee).
Dit doe je het best op een formulier, waar je alles kan automatiseren, zodat je het uitlenen en innemen foutloos kunt laten verlopen.
 
Bedankt Michel,

Een heel groot deel van mijn probleem is opgelost.:thumb:

Ik begrijp alleen niet wat je bedoeld met 'automatiseren in formulieren'. Wat zou ik kunnen automatiseren?

Als je me dat nog zou kunnen verduidelijken...

Dank

Groeten, Frank
 
Mooi dat de basis nu duidelijk is :thumb:
Wat ik bedoel met automatiseren van het formulier is eigenlijk het volgende:
Zoals ik in het vorige antwoord al zei, wil je bijhouden welke instrumenten weg zijn, en welke niet. De nog aanwezige instrumenten zijn uitleenbaar, de uitgeleende zijn dat uiteraard niet. Een instrument heeft dus een Status: het is aanwezig, of niet. Dat houd je bij in de tabel Instrumenten.
Daarnaast heb je de uitlening zelf: daarvoor vul je een uitleendatum in, een persoonsID, welk instrument etc. Op het formulier Uitlenen is het logisch, dat je alleen kunt kiezen uit instrumenten die niet zijn uitgeleend. Daarvoor kun je een keuzelijst gebruiken, die alleen de aanwezige instrumenten laat zien. Dat doe je door te filteren op het veld Uitgeleend in de tabel Instrumenten.
Als je een instrument hebt geselecteerd om uit te lenen, dan moet de status van het instrument worden aangepast: het is immers niet meer in huis. Eigenlijk wil je dat niet zelf hoeven te doen: je zal het maar een keer vergeten aan te klikken; dan kun je een uitgeleend instrument nog een keer selecteren. Loop je dus wel voor niks naar het instrumentenrek!

Je wilt dus, dat bij het uitlenen van een instrument automatisch het selectievakje in de tabel Instrumenten wordt omgezet, zodat je die fout niet kunt maken.
Het omgekeerde geldt uiteraard ook: je hebt een instrument uitgeleend, dus het selectievakje staat aangevinkt. Als je een retourdatum invult op het formulier, dan wil je het liefst dat het selectievakje ook wordt aangepast, omdat het instrument nu weer uitgeleend kan worden.

Dat bedoel ik dus met automatiseren van een formulier: het plaatsen van acties onder bepaalde handelingen die ervoor zorgen dat je gegevens correct blijven, en de kans op het maken van fouten zoveel mogelijk wordt beperkt.

Als je dit soort zaken wilt gaan inbouwen, heb je waarschijnijk nog wel vragen... Daarvoor weet je inmiddels de weg :D
 
Nogmaals bedankt voor de duidelijke uitleg!
Ik begin het te begrijpen. De opzet is fantastisch, je hebt mijn 'probleem' goed begrepen..

Ik ga ermee aan de slag, maar ik verwacht niet dat ik dit vanavond nog klaar zal hebben.
Dus voor nu sluit ik de vraag als beantwoord, maar ik zal er zeker nog op terug komen via een andere vraag (denk ik zo)

Groeten, Frank
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan