Gegevens (niet) overnemen

In bepaalde gevallen wil je gegevens die in de ene tabel zitten zien als je via een formulier gegevens in een andere tabel invoert.
Stel bijvoorbeeld dat we 'meldingen' van klanten aan het invoeren zijn. We zouden dan graag meteen het adres van de betreffende klant willen zien. Het is daarbij niet de bedoeling het adres ook daadwerkelijk in de meldingentabel op te slaan. De adresgegevens staan al in de klantentabel en die willen we uiteraard niet dubbel opslaan. Afgezien van het feit dat het niet zinvol is, werkt het fouten in de hand. Als de klant verhuist zou je het adres op meerdere plaatsen moeten veranderen en dat gaat geheid een keer fout.

Er zijn gevallen denkbaar waarin het juist wel zinvol of noodzakelijk is gegevens over te nemen op het formulier en vast te leggen in een tabel. Zie hiervoor het voorbeeld gegevens (wel) overnemen.

We kunnen het 'overnemen maar niet vastleggen' oplossen door op het meldingenformulier een aantal (drie in het voorbeeld) niet-afhankelijke velden te zetten voor de adresgegevens.
Om die velden gevuld te krijgen gaan we als volgt te werk. De klant voeren we in het formulier in via een keuzelijst-met-invoervak. Met behulp van de eigenschap rijbron zorgen we er voor dat in die keuzelijst ook de adresgegevens van de klant beschikbaar zijn. De rijbron wordt dan:
SELECT KlantID, Klant, Straat, Huisnummer, Plaats FROM Klant ORDER BY Klant;

We willen alleen de naam van de klant in de keuzelijst zien en daarom staat de eigenschap kolombreedten op 0cm;3cm;0cm;0cm;0cm. Ook de eigenschappen aantal kolommen en afhankelijke kolom moeten we correct instellen op 5 (alle vijf de kolommen meenemen) en 1 (de eerste kolom (KlantID) is de afhankelijke kolom).

De adresgegevens zijn nu beschikbaar, maar moeten we nog tevoorschijn toveren in de niet-afhankelijke velden. Om de straat in het betreffende veld zichtbaar te maken zetten we in de eigenschap besturingselementbron van dit veld: =KlantID.column(2).
Daarmee nemen we de inhoud van de derde kolom (straat) over in het veld. Merk op dat Access in dit geval begint te tellen bij nul. Op overeenkomstige wijze kunnen het huisnummer en de plaats vullen op het formulier.

Ook om de adressen in een rapport van alle meldingen te krijgen is het niet nodig de adresgegevens in de meldingentabel over te nemen. In dit geval volstaat het de recordbron van het rapport te definiëren als:
SELECT * FROM Klant INNER JOIN Melding ON Klant.KlantID=Melding.KlantID;
Daardoor zijn alle velden uit de twee tabellen beschikbaar in het rapport.

Klik hier om de voorbeelddatabase te downloaden.