Relaties tussen verschillende tabellen

Status
Niet open voor verdere reacties.

keesbl

Gebruiker
Lid geworden
8 nov 2008
Berichten
694
Hallo experts,
Ik ben bezig met het opzetten van een database om projecten te beheren.
Daartoe heb ik een aantal tabellen gemaakt (zie bijlage).
Ik wil per project kunnen zien wie de opdrachtgever is, wie de aannemer, de projectleider. Ook wil ik kunnen zien welke opdrachtgever, welke aannemer welke projecten heeft.
Bovendien wil ik kunnen zien welke materialen welke aannemer heeft gebruikt.

Kan iemand een voorzetje geven hoe ik de relaties tussen de verschillende tabellen moet leggen?

Alvast bedankt!

Kees
 

Bijlagen

Je was wel goed op weg, maar dan op de parallelweg, en nog niet op de hoofdweg ;)
Foutje één: je had een sleutelveld gemaakt van het veld Naam in de tabel Projectleider. Terwijl je in die tabel ook al een ProjectleiderID hebt... Ik vermoed, dat je verkeerd geklikt hebt? Hoewel de tabel Projecten dat dan weer tegenspreekt:
Foutje twee: in de tabel Projecten heb je de Projectleider, Aannemer etc. wel als velden opgenomen, maar: als tekst. En dat moet je niet doen; je koppelt over het algemeen op basis van een sleutelveld uit de gekoppelde projecten, en die velden zijn bij jou (niet geheel onlogisch) allemaal numeriek. Je moet de velden in Projecten dus ook numeriek maken.
Foutje drie: niet echt een foutje, maar meer een tip... Zorg voor herkenbare veldnamen, dus niet alle sleutelvelden ID noemen, want dan weet je als je verschillende tabellen aan elkaar gaat koppelen, niet meer welke uit welke tabel komt.
Hierbij een aangepaste versie!
 

Bijlagen

Dank je wel Octafish!
Ook voor de algemene tips.
Ik ga met de (aagepaste) tabellen aan de gang. Ik zal ongetwijfeld weer ergens tegenaan lopen, maar dan meld ik me weer.
Hoewel relaties tussen tabellen op gratiscursus.be en ook door jouw heel duidelijk worden uitgelegd, vind ik dit een lastig onderwerp.

Kees
 
Hallo Kees,
Ik snap dat je het hele onderwerp Relaties nog lastig vind. Relaties alleen zijn daarbij niet zaligmakend, maar een (belangrijk) onerdeel van het hele proces van Normaliseren van de database. En dat is een onderwerp waar veel over te vinden is op internet... Steek daar vooral wat tijd in om te bestuderen, want een goed genormaliseerde database gaat een stuk beter werken dan een niet-genormaliseerde!
 
Hallo octafish,

Ik ben even bezig geweest met de project-database.
Als ik nu in de tabel Project een aannemer wil invoeren, moet ik de aannemerId opgeven uit een pulldown menu.
Is het ook mogelijk om in dit pulldown-menu de naam van de aannemer te kiezen?
Dit geldt ook voor de projectleider en de opdrachtgever.

Kees
 
Hoi Kees,
Dat kan uiteraard. Eerst uitleggen waarom je een AannemerID opslaat, en niet een naam van een aannemer: elke aannemer die je aanmaakt in de tabel Aannemer krijgt een unieke Identificator, in dit geval heet dat veld AannemerID. De waarde in dit veld is per record, dus per aannamer, uniek. Als je dus in de tabel Projecten een AannemerID invult, weet je exact welke aannemer dat is, want de waarde die je invult kun je opzoeken in de tabel Aannemers. Omdat het veld AannemerID uniek is, vind je maar één aannemer. Vandaar dat de relatie tussen de tabel Aannemers en Projecten een één-op-veel relatie wordt genoemd: één aannemer (uit Aannemers) kan meedoen aan veel projecten.
Zou je de naam van de aannemer opslaan, dan geldt dit niet, want een aannemernaam kan best meerdere keren voorkomen in de tabel Aannemers.
Om uit een lijst met aannemernamen te kunnen kiezen maak je op een formulier (ik neem aan dat je al formulieren hebt gemaakt voor je tabellen; zo niet, dan kun je er alvast met de wizard wel een paar maken...) een <Keuzelijst met Invoervak>. Doe dat eerst met de wizard, die leidt je netjes door het proces.

Eén voorbeeldje: voor de aannemers kies je de tabel Aannemers als bron voor de keuzelijst. Vervolgens selecteer je het veld AannemerID, de Aannemernaam en bijvoorbeeld ook het adres of de plaats, waarna je door gaat naar de volgende stap. Access zal voorstellen om het sleutelveld te verbergen. Prima, vooral doen! Dat is namelijk het veld AannemerID, en dat wil je niet zien; je wilt eerst de naam zien. Loop verder door de wizard heen, geef de kolommen gelijk maar de juiste breedte, en sorteer bijvoorbeeld op Aannemernaam, dat zoekt wel zo makkelijk.
In één van de laatste stappen wordt nog gevraagd of je de waarde wilt opslaan in een veld. Dat doe je, namelijk in het veld AannemerID. Maak de wizard vervolgens af.
Wat je nu hebt, is een keuzelijst die alle aannemers laat zien uit de tabel Aannemers, waarbij je het veld AannemerID niet ziet, maar dat wel in de keuzelijst zit. Deze waarde wordt vervolgens opgeslagen in de tabel Projecten in het veld AannemerID.
En zo maak je de andere keuzelijsten ook.
Overigens kun je een vergelijkbaar proces ook doen op tabelniveau, maar dat raad ik eigenlijk af, omdat je dan in de tabel niet meer kunt zien wat je nu echt opslaat. Je ziet dan de aannemernaam in de tabel Projecten, en niet het AannemerID. Zelf vind ik dat verwarrend, en onhandig. Ik maak mijn keuzelijsten dus eigenlijk alleen op formulierniveau.
 
Hallo Michel,

Ik heb een formulier gemaakt met de keuze-velden voor de aannemer, enz. volgens je aanwijzingen. dat werkt perfect! Dank.

Als ik nu een aannemer selecteer, dan blijven de andere velden gewoon hetzelfde, dwz de aannemer verandert uiteraard, maar de bijbehorende projecten gaan dan niet mee, Ik wil, als ik een aannemer kies, zijn projecten te zien krijgen, en bij een andere aannemer diens projecten.
kan dat? En zo ja, kun je weer een voorzetje geven?

Alvast dank!

Kees
 
Je hebt nu waarschijnlijk een keuzelijst gemaakt van het aannemerveld in de Detailsectie. En de keuzelijst gekoppelt aan het veld AannemerID. Het resultaat is dan inderdaad dat je bij 'kiezen' van een andere aannemer de aannemer in de tabel verandert. Oftewel: het project wordt ineens door een andere aannemer uitgevoerd.
Op zich is het uiteraard wel handig om via een keuzelijst een aannemer te kiezen voor nieuwe projecten, dus ik zou dat ook niet veranderen. Om de Records te zien van een bepaalde aannemer zul je een extra keuzelijst moeten maken m.b.v. de Wizard. Bij voorkeur maak je die in de koptekst, dus niet in de detailsectie.
Als je de wizard opstart heb je twee of drie opties. In het geval dat je er twee ziet, moet je de bron van het formulier aanpassen: de derde optie zie je alleen als het formulier is gebaseerd op een opgeslagen query, of op een tabel. Als je een query maakt met de functie Opbouwen op het formulier krijg je de derde optie niet. En uiteraard heb je de derde nodig...
Deze optie geeft je de mogelijkheid om Records te Zoeken op het formulier. In dit geval dus records van een bepaalde Aannemer.
Als je die wizard doorloopt, dan ben je al een deel op weg. Daarna kun je de keuzelijst nog aanpassen, zodat je niet zoekt met de keuzelijst, maar filtert. Zodat je alleen records overhoudt van een aannemer.
Overigens hebben we daar onlangs een mooi voorbeeld voor gemaakt, dus dat voorbeeld kun je eventueel dan verder gebruiken.
 
Hallo Michel,

Ik heb een keuzelijst met invoerveld gemaakt in de kop van het formulier. Dat werkt goed, maar in het betreffende formulier krijg ik nu alleen de gegevens van bv de aannemer te zien.
Ik wil echter in het formulier ook de gegevens van de projekten van de betreffende aannemer zien. Hoe doe ik dat?

Je noemt een mooi voorbeeld, waar kan ik dat vinden?


Kees
 
Het voorbeeldje zit in deze draad:
Wat betreft je andere vraag:
Ik weet niet of je alles in een tabel hebt staan, of dat je de projecten in een aparte tabel hebt. In dat laatste geval kun je een Hoofdformulier maken van je Aannemer gegevens, en de projecten in een Subformulier zetten. Anders moet je eerst een query maken voor de aparte projectgegevens.
 
Hallo Michel,

Ik heb inderdaad verschilende tabellen, van projectgegevens, aannemers, opdrachtgevers, enz.
Ik heb nu op het formulier van bv. de aannemer een subformulier gemaakt waarop ik zijn projecten kan zien. En dat werkt perfect!
Ik heb nu diverse subformulieren op 1 formulier gekregen, zodat ik bij het kiezen van een aannemer zowel de opdrachtgever, de diverse projecten van de aannemer en de projectleider kan zien.

Zo wil ik ook nog een formulier met projectnummer maken, met daarop subformulieren voor de aannemer, opdrachtgever, enz. maken.
Moet ik dan de hele rit weer doen, van subformulieren maken, of kan ik het formulier wat nu klaar is als sjabloon gebruiken, en dan de bijbehorende subformulieren veranderen?

Kees
 
Als het dezelfde formulieren zijn, kun je ze best hergebruiken. Ze moeten uiteraard wel te koppelen zijn...
 
Ik kan het definitieve formulier wel kopieren, maar dan moeten de gekoppelde formulieren aangepast worden.
Waar kan de namen vinden, zodat ik je juiste formulieren kan koppelen?

Kees
 
Als je een formulier uit het databasevenster naar het ontwerpscherm van het nieuwe hoofdformulier sleept, dan wordt de koppeling als het goed is automatisch gelegd. Je kunt het ook doen met de Wizard Subformulier. Kom je ook een eind mee.
Alle noodzakelijke gegevens vind je bij de Eigenschappen van het formulier. Op het tabblad Gegevens van het subformulier vind je de velden die je wilt koppelen.
 
Dank je wel Michel,

Met alle hulp en veel geploeter kom ik nu wel tot een bruikbaar en werkbaar eindresultaat!

Kees
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan