De opgegeven wijzigingen zijn niet aangebracht in de tabel omdat daardoor dubbele waa

Status
Niet open voor verdere reacties.

BouwersJ

Gebruiker
Lid geworden
29 mrt 2013
Berichten
15
Goedenavond,


Ik ben al lange tijd bezig met het oplossen van mijn eigen vraagstuk, maar ik kom er niet uit. Ik moet eerlijk bekennen dat ik nog maar een Access-beginner ben..:o

Situatie:
Ik probeer in Access 2010 bij te houden welke werkzaamheden er worden uitgevoerd voor klanten. Hiervoor heb ik een tabel 'Klanten', waarin alle klantgegevens staan. Ook heb ik een tabel 'werknemers' waarin alle (momenteel maar 2) werknemers staan die werkzaamheden kunnen uitvoeren voor klanten. In de tabel 'update' wil ik bijhouden welke werkzaamheden zijn uitgevoerd voor de klant. Hierbij maak ik gebruik van het unieke klantnummer uit tabel 'Klanten', en het unieke medewerkers nummer uit de tabel 'medewerker'. Ook krijgt elke opdracht die ik in deze tabel wil opnemen een nieuw uniek 'opdrachtnummer' door autonummering en de datum waarop de werkzaamheid is uitgevoerd.

Ik ben hiermee een aantal weken geleden begonnen, en dit werkt(e) vrij aardig. Het probleem is nu dat het moment is aangebroken dat er klanten zijn die opnieuw werkzaamheden laten uitvoeren. Hierdoor komt dus in de tabel 'update' vaker een bepaalde klant voor. Ook kan het zo zijn dat dezelfde medewerker deze klant heeft geholpen. Het kan zelfs zo zijn dat alle opmerkingen (die ook in de tabel worden opgenomen) hetzelfde zijn. Echter is altijd het unieke opdrachtnummer ander, en ook de datum van uitvoering is meestal anders.

Toch kan ik deze klanten niet opnieuw toevoegen. Ik krijg dan de melding
'de opgegeven wijzigingen zijn niet aangebracht in de tabel omdat daardoor dubbele waarden ontstaan in index, primaire sleutel of relatie. Wijzig de gegevens in het veld of de velden met dubbele gegevens, verwijder de index of definieer de index opnieuw zodat dubbele gegevens zijn toegestaan. Probeer het vervolgens opnieuw'

Ik heb naar mijn idee alle indexen al veranderd en ook de relaties gewijzigd. Ook als ik de tabel probeer op te bouwen zonder de relatie met de tabel 'Klanten' en de tabel 'werknemers' krijg ik dezelfde melding.


Ik hoop dat iemand mij hiermee kan helpen.

Alvast hartelijk dank!

Met vriendelijke groet,
Jan

Ps. in verband met klantgegevens heb ik geen bijlage bijgevoegd. Hopelijk heb ik mijn vraag duidelijk genoeg kunnen omschrijven, en zie ik iets 'simpels' over het hoofd. Als we er zo niet uit komen zal ik proberen een database na te bouwen die dezelfde foutmelding geeft.
 
Je opzet lijkt in eerste instantie in orde te zijn, al zou ik zelf niet voor een tabelnaam 'update' hebben gekozen, maar eerder 'Werkzaamheden'. Een tabel(naam) zou een afspiegeling moeten zijn van waar de tabel voor staat, en updaten lijkt mij een andere activiteit dan werkzaamheden uitvoeren. Ik weet niet of je de Access cursus in de Handleidingen sectie al hebt gelezen, maar daar kun je de volledige verklaring wel in terug vinden, althans: als ik denk wat het is dat je fout doet.

Hoe zou het moeten zijn? Je hebt twee brontabellen: Klanten en Werknemers. In deze tabel is elke klant uniek (Uniek ID veld) en elke werknemer ook. Voor deze klanten en werknemers ga je handelingen registreren. Daarbij geldt de regel: elke klant mag meerdere werkzaamheden laten uitvoeren, en elke werknemer mag meerdere werkzaamheden uitvoeren. Tussen de tabellen Klanten en Werkzaamheden bestaat dus een één-op-veel relatie (1 klant > ## werkzaamheden) en tussen Werknemer en Werkzaamheden ook (1 werknemer > ## werkzaamheden). Die relaties leg je in het Relatievenster. Daarbij moet je er ook voor zorgen dat de optie <Referentiële Integriteit afdwingen> is aangevinkt. Als de relaties goed liggen, zie je aan de kant van Klant en Werknemer een 1 op de lijn staan, en aan de kant van Werkzaamheden een liggende 8. Dat laatste staat voor het oneindig teken.

Hoe zit het bij jou? Ik gok er op dat je een één-op-één relatie hebt gemaakt tussen de tabellen. En ja, dan mag elke klant maar één actie laten doen, en elke werknemer mag ook maar één handeling uitvoeren. Dat schiet natuurlijk niet op, tenzij je makkelijk aan personeel kan komen en een (voor jou) gunstige afvloeiingsregeling hebt :). Misschien heb je de relaties nog wel goed gelegd (één-op-veel) maar heb je een unieke index gemaakt van KlantID en WerknemerID. Dat schiet ook niet erg op, want nu mag elke werknemer maar één keer iets doen voor elke klant. Scheelt je wel geld, want je hoeft, als je genoeg klanten hebt, de mensen minder snel de straat op te schoppen. Maar nog steeds niet erg handig!
Met indexen moet je sowieso uitkijken; maak er niet teveel want je db wordt dan trager i.p.v. sneller. Zet ze dus alleen op (combinaties van) velden waarvan je zeker weet dat ze nut hebben.
 
Bedankt voor het meedenken en de uitleg!!
Mijn vraag is opgelost.

Met vriendelijke groet,
Jan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan