Gegevens met invoervak wijzigen als ander invoervak wordt gewijzigd

Status
Niet open voor verdere reacties.

ongenae

Gebruiker
Lid geworden
20 okt 2010
Berichten
124
Hallo

Ik zit met een probleem;
ik heb een tabel met namen (zowel -per als -vk) en een tabel met kosten (zowel -per als -vk als zonder) en ik zou graag willen als ik in mijn formulier een naam selecteer bv "Piet-per" dat hij dan bij kosten alle kosten weergeeft die eindigen op "-per" alsook degene met niets aan (dus gewoon die met "-vk" niet weergeven).
En idem omgekeerd.

In bijlage zit een voorbeeld van mijn probleem.
dit is niet de originele databank want er zitten teveel persoonlijke gegevens in.

Bekijk bijlage voorbeeld.zip


detaila.jpg
 
Laatst bewerkt:
Owké, dank u; als ik mij niet vergis is het dit wat het hem doet:

Code:
strSQL = "SELECT code, kost, IIf(InStr(1,[kost],'-')>0,Mid([kost],InStr(1,[kost],'-')+2," _
    & "Len([kost])-(InStr(1,[kost],'-')+1)),'') AS Ext FROM kosten "
strSQL = strSQL & "WHERE (((IIf(InStr(1,[kost],'-')>0,Mid([kost],InStr(1,[kost],'-')+2," _
    & "Len([kost])-(InStr(1,[kost],'-')+1)),''))='" & Me.cboPersoon.Column(2) & "'));"
Me.cboKost = ""
Me.cboKost.RowSource = strSQL
Me.cboKost.Requery

Maar kan je mij dat een beetje uitleggen, het is lang geleden dat ik nog met access gewerkt heb
 
Uitleg kun je uiteraard altijd krijgen:
Je hebt een naam met een code als toevoeging. Op basis van die toevoeging wil je een tweede keuzelijst vullen. De truc is dus, om die toevoeging te isoleren uit het veld Kost. Dat gebeurt met een Instr functie: IIf(InStr(1,[kost],'-')>0 kijkt of er een koppelteken in de tekst staat. Als dat zo is, komt er een getal uitrollen, de tekenpositie va het koppelteken. Je kijkt dus of de formule een getal is dat groter is dan nul, want dan heb je een teken gevonden.
Vervolgens wil je dat teken apart in een veldje, zodat je daarop verder kunt werken. Dat gebeurt in de regel Mid([kost],InStr(1,[kost],'-')+2, Len([kost])-(InStr(1,[kost],'-')+1)),'') AS Ext. Met de functie Mid zoek je het laatste blokje op, beginnend vanaf het koppelteken. Kijk in de Help van Access wat de specifieke functies doen, als je ze niet kent.

Op de eerste keuzelijst is ongeveer hetzelfde gedaan met het veld Naam, zodat ook daar drie kolommen in staan, met als laatste veld de uitgefilterde code.

OK, we hebben dus een keuzelijst met drie velden: code, naam en Ext(ensie). Daarom is de keuzelijst ook aangepast, naar 3 kolommen. We gaan nu het derde veld uit de query Kost vergelijken met de derde waarde uit de keuzelijst Naam. Dat stuk begint bij WHERE (((IIf(InStr(1,[kost],'-')>0 .... -(InStr(1,[kost],'-')+1)),''))='" en dat moet gelijk zijn aan de derde kolom uit de keuzelijst: & Me.cboPersoon.Column(2)

En dat is dus wat er gebeurt: de eerste keuzelijst heeft een extra kolom die de extensie uitleest. Deze extensie wordt vervolgens ook gemaakt op de brontabel voor de tweede keuzelijst. De twee extensies worden vervolgens met elkaar vergeleken, en als ze gelijk zijn: Bingo!
Het ziet er ingewikkeld uit, door de Instr, maar als je er goed naar kijkt, zie je dat hetzelfde stukje code steeds terugkomt. Zo af en toe wordt er een 1 of een 2 bij opgeteld, en dat is vanwege de spaties in de tekst. Instr. geeft je het de plek van het teken, bijvoorbeeld positie 8. Je wilt echter het teken zelf niet hebben, dus je telt er dan 1 bij op. Of 2, als er ook nog een spatie achter staat die je niet wilt.
Duidelijker?
 
Owké, dank u wel

Ik zal het proberen toe te passen, mocht het niet lukken dan hoor je nog van mij :p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan