Welkom bij HelpMij! Je hebt inderdaad een paar ontwerpfouten in deze db zitten, die je eerst moet oplossen. Sowieso zou ik pas aan formulieren gaan beginnen als de structuur van je db in orde is, en alles werkt zoals het zou moeten werken. Anders blijf je dubbel werk doen, want formulieren nemen altijd de eigenschappen van de tabellen over als je ze maakt, en als je dus later wat in de tabellen verandert, moet je dat ook nog eens in de formulieren doen: dubbel werk dus. Typische beginnersfout trouwens, want een beginner denkt teveel vanuit het
eindresultaatf ('als ik maar een formulier heb, dan kan ik werken") en te weinig vanuit de
basis. En dat moet toch echt als je een database gaat maken. Zie het als het bouwen van een huis: dan begin je ook met het fundament, en nooit met de kleur van het behang
.
Wat mankeert er aan je structuur? Om te beginnen: in de tabellen [Klantgegevens] en [Offerte] heb je een sleutelveld gemaakt van het type Autonummering. Dat kan, al is dat in beide gevallen niet erg handig, want een Autonummerveld is niet erg beschrijvend. Meestal wil je Offertenummers opeenvolgend genummerd hebben, en dat kan niet met een autonummerveld. D.w.z. hij nummert wel oplopend door, maar als je een record aanmaakt en verwijdert, ben je dat nummer kwijt en zit er dus een gat in je nummering. Bij Facturen is dat sowieso niet toegestaan. En Klantnummers wil je misschien op een specifieke manier opgemaakt hebben, en ook dat is lastig met een autonummer.
Veel erger is, dat je in je relaties deze twee ID velden (ik zou ze ook absoluut nooit dezelfde naam geven, want hoe hou je ze uit elkaar straks?) aan elkaar hebt gekoppeld. Daarbij ook nog eens op een manier die volkomen waardeloos (als in: zonder enige waarde) is. Je had net zo goed het veld [Postcode] kunnen koppelen aan het veld [Currency]. Had hetzelfde nut en effect gehad. Net zo erg als dit probleem, is dat je in de tabel [Offerte] de
klantgegevens] hebt opgenomen. Dat is echt een absoluut taboe in databaseland, want daarmee ondermijn je dus zo'n beetje alle normalisatieregels. Onthoud: gegevens die bij elkaar horen, zet je in hun eigen tabel. En
persoonsgegevens horen dus in de
Klantentabel. Uiteraard wil je bij een offerte wel vastleggen voor welke klant die is geweest, en daarom neem je in de tabel [Offerte] dus wél een verwijsveld op naar de tabel klanten. Dat is dan per definitie het
sleutelveld uit [Klantgegevens] (nu het veld [ID]) want in een offerte moet je altijd verwijzen naar één klant. Je maakt dan dus een één-op-veel relatie tussen Klantgegevens en Orders: één klant kan meerdere orders hebben en elke order is gekoppeld aan één klant.
Die correcte relatie krijg je door de optie <Referentiële integriteit afdwingen> aan te zetten. In jouw geval kan dat dus niet, omdat je a) twee sleutelvelden koppelt (kun je hooguit een één-op-één relatie maken) en b) de ID's verschillende waarden vertegenwoordigen, resp. een Klantnummer en een Offertenummer.
Iets vergelijkbaars doe je tussen [Offerte] en [Offerte-inhoud]; het offertenummer komt niet terug in de tabel [Offerte-inhoud]. Daarnaast zitten daarin ook nog eens velden die je kunt uitrekenen, en berekeningen horen óók niet thuis in een tabel.
Kortom: je hebt nog wat huiswerk te doen
. Ik zou zeggen: lees de Access cursus er eens op door, de eerste hoofdstukken gaan over normaliseren, en volgens mij heb je daar nu nog wat te weinig kennis van. Het lijkt mij een goede zaak als je die eerst opdoet voordat je verder gaat.