Gegevens (wel) overnemen

Prijzen hebben de nare eigenschap te veranderen (meestal in opwaartse richting). Dat kan in Access een probleem opleveren. Stel dat in een database waarin we verkopen registreren de (verkoop)prijs vastligt in de artikeltabel. De prijs die bij verkoop geldt is uiteraard de dan geldende prijs. Latere prijswijzigingen hebben daar geen invloed op. Wat we eigenlijk willen is dat op het moment dat we een verkoop registreren, de actuele prijs in het verkooprecord wordt overgenomen (zie voor een geavanceerdere manier van het registreren van prijzen het voorbeeld prijshistorie).

Om dit voor elkaar te krijgen gaan we als volgt te werk. Het artikel vullen we op het verkoopformulier via een keuzelijst-met-invoervak in. Met behulp van de eigenschap rijbron zorgen we er voor dat in die keuzelijst ook de prijs van het artikel beschikbaar is. De rijbron wordt dan:
SELECT ArtikelID, Artikel, Verkoopprijs FROM Artikel ORDER BY [Artikel];

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

De prijs van het artikel is nu beschikbaar, maar moeten we nog in het prijsveld op het formulier (en daarmee het verkooprecord) zien te krijgen. We maken daartoe een gebeurtenis na bijwerken (after update) op het artikelveld. In die gebeurtenis zetten we:
Private Sub ArtikelID_AfterUpdate()
  Me.Prijs = Me.ArtikelID.Column(2)
End Sub

Daarmee nemen we de inhoud van de derde kolom (verkoopprijs) over in het prijsveld van het formulier/record. Merk op dat Access in dit geval begint te tellen bij nul.

Klik hier om de voorbeelddatabase te downloaden.

N.B.
In veel gevallen is het juist niet aan te bevelen gegevens van de ene naar de andere tabel te dupliceren. Een klant heeft vast ook een adres, maar dat leggen we niet nog eens vast in het verkooprecord. We willen juist weten waar de klant nu woont en als hij verhuist willen we dat maar op één plek hoeven te wijzigen. Om dit te illustreren heb ik ook een voorbeeld gemaakt waarin de (adres)gegevens wel getoond worden op een ander formulier, maar niet worden opgeslagen in een andere tabel.