Je hebt nog recht op de uitleg waarom jouw query niet werkt, en hoe je hem werkend kunt maken.
SELECT
t_Agenda.agendaID,
t_Agendaonderdeel.agendaonderdeelID,
t_Agendaonderdeel.agendaonderdeel,
t_Onderdeel.onderdeelID,
t_Onderdeel.onderdeelnaam,
t_Agenda.agenda,
t_Agenda.agendadatum,
t_Agenda.agendatijd,
t_Agendaonderdeel.weekdag,
t_Frequentie.frequentieID,
t_Frequentie.frequentie,
FROM
| SELECT
t_Agenda.agendaID,
t_Agenda.agendaonderdeelID,
t_Agendaonderdeel.agendaonderdeel,
t_Agenda.onderdeelID,
t_Onderdeel.onderdeelnaam,
t_Agenda.agenda,
t_Agenda.agendadatum,
t_Agenda.agendatijd,
t_Agendaonderdeel.weekdag,
t_Agendaonderdeel.frequentieID,
t_Frequentie.frequentie
FROM
|
Links de velden zoals jij ze hebt toegevoegd aan de query (niet werkend), rechts de versie van mij die wél werkt. Ik zou bijna zeggen: bekijk de verschillen eerst zelf, en probeer te bedenken waarom mijn versie werkt, en die van jou niet. Maar ik vermoed dat je de verschillen wellicht nog wel zult zien, maar niet gelijk zal snappen wat daarbij het verschil maakt. Dus ik geef toch maar gelijk de uitleg erbij.
Als je goed hebt gekeken, zul je hebben gezien dat het verschil zit in de tabellen waarvoor ik de
sleutelvelden gebruik. Ik pak als voorbeeld het tweede en derde veld: jij gebruikt t_Agendaonderdeel.agendaonderdeelID, ik gebruik t_Agenda.agendaonderdeelID. Als je de query uitvoert, zul je geen verschil zien, want ze geven allebei dezelfde waarde weer. Dus waarom werkt de ene wel, en de andere niet?
Heel simpel: je gebruikt het formulier (en de onderliggende tabel t_Agenda) om daarin een record aan te maken voor de tabel t_Agenda. Dat betekent, dat je
alle verplichte velden van die tabel moet invullen. Dat begint dus al met het AgendaID, wat een autonummerveld is. Probleem opgelost. Zou je de tabel t_Agenda handmatig invullen, zou je daar geen probleem mee hebben en probleemloos de juiste waarde invullen. Maar wat gebeurt er als je jouw oplossing in het formulier (de query) gebruikt? Je vult niet een waarde in de tabel t_Agenda in, maar in de tabel t_AgendaOnderdeel! In de tabel t_Agenda blijft dus het AgendaOnderdeelID veld leeg! En dat wil je uiteraard niet.
En er is nóg een fout die optreedt met deze werkwijze: elke waarde die je met jouw query invult voor AgendaOnderdeelID is ofwel een bestaand getal (bekend onderdeel), ofwel een niet-bestaand getal. In het laatste geval ben je dus zélf een waarde aan het invullen in een tabelveld dat al gevuld wordt met een Autonummer. En dat is dus ook een probleem.
Kijk je verder in de query hierboven, dan zie je dat het probleem bij jou óók optreedt met de tabel t_Onderdeel (veld OnderdeelID) en de tabel t_Frequentie. En die laatste is ook weer een leuke, want die gaat dus een niveautje dieper in de fout. En dat komt omdat in t_Agenda geen frequentieID wordt opgeslagen, maar in de tabel t_AgendaOnderdeel. En daarom dus dezelfde constructie, met een andere brontabel.
De velden AgendaOnderdeel, OnderdeelNaam en Frequentie zijn tekstvelden die uit de bijbehorende brontabellen komen. Die kun je dus in beginsel niet fout gebruiken.
Samenvattend: als je in een query records wilt kunnen muteren/toevoegen, dan moet je sowieso uitgaan van een hoofdtabel die je wilt vullen, en daar alle velden van gebruiken. Wil je aanvullende velden uit gekoppelde tabellen zien, gebruik dan
nooit de sleutelvelden uit die tabellen, want die zetten gelijk je query op slot. En nog een tip: als je in je formulier een veld als [Frequentie] verandert, dan verander je de originele waarde in de brontabel. Alle records zien dan dus de 'vernieuwde' waarde. Ik zet dus op het formulier die velden altijd op slot, om te voorkomen dat ze per ongeluk worden veranderd.