Ik heb een formulier in access met daarop een listbox, ook wel keuzelijst met invoervak genoemd. Vanuit deze listbox wil ik een persoon selecteren en heb daarom als rijbron opgegeven:
Dit werkt prima. Nu wil ik dat een aantal tekstvelden gevuld worden, op het moment dat een persoon in de listbox gekozen wordt. Het gaat hier om velden als Voornaam, achternaam etc. Dit doe ik met een vb scriptje die ik neerzet bij 'Na bijwerken' in de listbox. Deze ziet er zo uit:
En ja, de velden worden netjes gevuld. Nu wil ik deze gegevens ook nog opslaan in de tabel Persoonsgegevens (dezelfde tabel als waar de gegevens vandaan komen, maar dan aangepast). Bij het saven maakt deze echter een nieuwe Persoon_id aan, met als gevolg dat deze persoon er twee keer in staat. Dit wil ik niet. Normaal gesproken zou je dan gewoon een update query kunnen bakken, maar nu weet ik het niet. Het is namelijk niet altijd een bestaande persoon, je moet ook een nieuwe persoon kunnen toevoegen. Hierbij wordt er dus niks geupdate. Verder staan er nog meer velden op het formulier, die gebruik maken van meerdere tabellen en toch grotendeels afhankelijk zijn van elkaar. Het is de bedoeling dat het hele formulier in één keer opgeslagen wordt.
Toen bedacht ik me dat ik ook best een tekstveld erbij kon zetten, waarin het persoonsid komt te staan, nadat een persoon in de listbox is geselecteerd. Als ik dit tekstveld dan invisible maak, ziet niemand het en kan ik toch de gegevens hier uit halen, zodat ik hiermee kan saven. Het is niet netjes natuurlijk en werkt ook nog is voor geen meter, tenzij ik het besturingselement van het tekstveld weghaal(Persoon_Persoons_id), maar dan saved (update) ie weer niet goed. Hij kan dus niet een waarde geven aan een tekstveld dat als besturingselement een primary key heeft met auto nummering. Kortom: Ik ben een access noob. Help mij.
SQL:
1
2
3
4
5
6
7
8
9
10
| SELECT Persoon.Persoon_id, Persoon.Achternaam, Persoon.Voornaam, Persoon.Tussenvoegsel FROM Persoon ORDER BY [Achternaam], [Voornaam]; |
Dit werkt prima. Nu wil ik dat een aantal tekstvelden gevuld worden, op het moment dat een persoon in de listbox gekozen wordt. Het gaat hier om velden als Voornaam, achternaam etc. Dit doe ik met een vb scriptje die ik neerzet bij 'Na bijwerken' in de listbox. Deze ziet er zo uit:
code:
1
2
3
| Private Sub Keuzelijst_met_invoervak_AfterUpdate()
Me.Voornaam = DLookup("Voornaam", "Persoon", "Persoon_id=" & [Keuzelijst met invoervak])
Me.Achternaam = DLookup("Achternaam", "Persoon", "Persoon_id=" & [Keuzelijst met invoervak]) |
En ja, de velden worden netjes gevuld. Nu wil ik deze gegevens ook nog opslaan in de tabel Persoonsgegevens (dezelfde tabel als waar de gegevens vandaan komen, maar dan aangepast). Bij het saven maakt deze echter een nieuwe Persoon_id aan, met als gevolg dat deze persoon er twee keer in staat. Dit wil ik niet. Normaal gesproken zou je dan gewoon een update query kunnen bakken, maar nu weet ik het niet. Het is namelijk niet altijd een bestaande persoon, je moet ook een nieuwe persoon kunnen toevoegen. Hierbij wordt er dus niks geupdate. Verder staan er nog meer velden op het formulier, die gebruik maken van meerdere tabellen en toch grotendeels afhankelijk zijn van elkaar. Het is de bedoeling dat het hele formulier in één keer opgeslagen wordt.
Toen bedacht ik me dat ik ook best een tekstveld erbij kon zetten, waarin het persoonsid komt te staan, nadat een persoon in de listbox is geselecteerd. Als ik dit tekstveld dan invisible maak, ziet niemand het en kan ik toch de gegevens hier uit halen, zodat ik hiermee kan saven. Het is niet netjes natuurlijk en werkt ook nog is voor geen meter, tenzij ik het besturingselement van het tekstveld weghaal(Persoon_Persoons_id), maar dan saved (update) ie weer niet goed. Hij kan dus niet een waarde geven aan een tekstveld dat als besturingselement een primary key heeft met auto nummering. Kortom: Ik ben een access noob. Help mij.
[ Voor 5% gewijzigd door gorgi_19 op 26-08-2004 14:01 ]