Koppeling werkt niet

Status
Niet open voor verdere reacties.

JJZijlstra

Gebruiker
Lid geworden
26 nov 2013
Berichten
283
Beste lezer(s)

In de bijlage mijn oefenbestandje "Goederen". Hierin probeer ik alle mogelijkheden van Access uit die ik in de afgelopen dagen heb bestudeerd. Zoals je ziet een "een-op-veel"-relatie gemaakt.
Het bestand bestaat uit de tabellen tblKLANT, tblARTIKEL en tblORDER. Alle 3 tabellen zijn van gegevens voorzien.
Als ik een query maak met de tabellen tblKLANT en tblARTIKEL dan werkt het overzicht goed, maar wanneer ik er ook tblORDER erbij toevoeg dan zie ik niets. Dit geldt ook als ik de tabellen tblKLANT en tblORDER open, ook dan zie ik niets.
Wat heb ik fout gedaan in het bijgevoegde bestand?

Vriendelijke groet,
Toby
 

Bijlagen

  • Goederen.zip
    37,8 KB · Weergaven: 39
Laat ik beginnen met stellen dat je geen één-op-veel relatie hebt liggen tussen tblKLANT en tblARTIKEL. En ook niet tussen tblARTIKEL en tblORDER. Je hebt het wel geprobeerd, maar de belangrijkste stap, <Referentiële Integriteit afdwingen>, heb je niet aangevinkt. En daarmee is je relatie tussen de tabellen volkomen onzinnig en waardeloos. Je had net zo goed een 'relatie' kunnen leggen tussen [Postcode] en [Prijs], die had óók 'gewerkt'. (Ik zeg gewerkt, maar hij werkt uiteraard voor geen meter).

Het leuke is: de relatie die volgens jou níet werkt, is wél correct te maken (tussen tblARTIKEL en tblORDER dus) en de andere (tblKLANT en tblARTIKEL) niet. En dat komt, omdat de data in het veld KlantID in de tabel tblOrders niet deugt: daar staan waarden in die níet in de tabel tblKlant staan, en dus kun je de relatie niet leggen. Waarom zitten er verkeerde waarden tussen? Omdat je een standaardwaarde (0) gebruikt voor het veld, en dat is dus precies een KlantID die niet bestaat. Gevolg: de relatie kun je nooit meer leggen. Eerst zul je dus die waarden moeten veranderen in een getal tussen 1-5, de huidige KlantID's in je klantentabel. Hetzelfde geldt overigens voor het veld ArtikelID; daar staan ook alleen de waarde 0 in. En die bestaat dus niet.
Doe je dat, dan zul je vervolgens zien dat je prima relaties kunt leggen mét Referentiële Integriteit, en dat je query het ook ineens prima doet. Mits je uiteraard ook nog de juiste relaties legt; KlantID hoort niet thuis in Artikelen (hooguit een leverancierID) dus de juiste relaties zijn:
PHP:
tblKlanten.KlantID --> tblOrders.KlantID
tblArtikelen.ArtikelID --> tblOrders.ArtikelID
Met deze inrichting, en de juiste waarden, doet je db het prima.
 
@OktaFish

Hartelijk dank voor je uitgebreide uitleg.
Het feit dat er nullen staan in tblARTIKEL had ik zo gauw nog niet gezien anders had ik ze direct verwijderd.
Ik zal helemaal opnieuw gaan beginnen met het opzetten van een database en kritisch kijken naar het leggen van de relaties.
Mag ik uit jouw antwoord de conclusie trekken dat, wanneer de referentiële integriteit werkt, de relatie dan geslaagd is?
Als dit niet zo is, dan heb ik de essentie van het leggen van relaties nog niet helemaal door en zal ik opnieuw in de literatuur duiken.

Vriendelijke groet,
Toby
 
Dat heb je goed begrepen :). Relaties zonder Referentiële Integriteit zijn volslagen nutteloos. Alsof je een drenkeling een roestige ketting met een anker toewerpt i.p.v. een touw met een reddingsboei.
 
Wat een geweldig idee dat referentiële integriteit hét controlemiddel is om voor me zelf te checken of de relatie wel of niet geslaagd is.
Hé OktaFish !! Hier ben ik hééél erg blij mee. :):)
Het laatste antwoord gaf mij de doorslag de materie van relaties te hebben begrepen.
Wat een heerlijk gevoel moet dat voor je zijn dat iemand zoals jij mij op deze manier kan helpen. Compliments!!!

Voor mezelf ga ik de Access-materie in de komende tijd nog verder uitdiepen en als ik vragen heb, weet ik je te vinden.

Vriendelijke groet,
Toby
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan