Een aantal aangeven, afhankelijk van welke kolom er is ingevuld

Status
Niet open voor verdere reacties.

Bizziebie

Gebruiker
Lid geworden
3 jan 2013
Berichten
9
Hallo!

Ik ben een Accessbestand aan het maken en heb daartoe een tabel aangemaakt waarin onder andere velden zijn opgenomen die te maken hebben met gezinsleden. In deze tabel is het mogelijk om de gegevens van maximaal 4 gezinsleden in te voeren. Nu wil ik graag ergens een veldje maken, waarin staat hoeveel gezinsleden er zijn. Dus als de achternaam van gezinslid 1 en 2 is gevuld, zou hier 2 moeten komen staan.

Heeft iemand een idee hoe ik dat voor elkaar kan krijgen?

Marlies
 
In deze tabel is het mogelijk om de gegevens van maximaal 4 gezinsleden in te voeren.
Het aantal gezinsleden is niet afhankelijk van een beperking van Access, dus ik vermoed dat je de tabel niet overdreven jofel hebt ingericht. Zelf heb ik één tabel met persoonsgegevens, met daarin een verwijzingsveld naar de ouders. Je neemt dus elke ouder op in je tabel, en in je tabelontwerp maak je twee velden ParentID, zodat je daarin kunt verwijzen naar de twee ouders. Op die manier kun je een oneindig aantal kinderen toevoegen, en een stamboom opbouwen, omdat een kind natuurlijk ook weer kinderen kan verwekken. Tellen op basis van deze structuur is ook bloedje simpel met een query.
 
Dank je, Octafish.
Je bedoelt dus eigenlijk dat ik alle personen in één tabel moet zetten, ouders en kinderen, en dat ik dan een nieuwe tabel maak voor het gezin??
 
Nee, dat is niet wat ik zeg. Je kunt één tabel houden, waarbij je elke persoon apart opslaat. Ik weet niet waar je de db voor gaat gebruiken, en of het belangrijk is om een volledige stamboom te kunnen opslaan, of de personen die gerelateerd zijn apart te volgen, maar je kunt hier aan denken:

PersID Voornaam Tussenvoegsel Achternaam Partner Ouder1 Ouder2
1 Piet Bos 3
2 Klaas de Hond 5
3 Janneke Bos 1
4 Truus Bos 1 3
5 Harry de Hond 2
6 Vincent Zeegers 7
7 Gerda Zeegers 6
8 Peter Zeegers 6 7
9 Minnie de Hond 2 5
10 Jan Bos 1 3

Op basis van deze structuur kun je onbeperkt doorbouwen aan de structuur; je kunt bijvoorbeeld een persoon koppelen aan een kind van één van de ouderparen, zodat daar ook weer een paar ontstaat. En daar kun je weer kinderen aan koppelen. Alles hangt eigenlijk af van wat je er mee wilt doen.
 
Ja, nu is het me duidelijk. Dus wel alle personen in één tabel.
Dank je wel!!
 
Tellen is een kwestie van een totalen query maken. Interessanter is een query die de gezinsleden in één tabel zet. Op basis waarvan je overigens ook heel simpel de Totalen query kunt maken ;)
Hier een query die de tabel met namen 3 keer gebruikt. D.m.v. een Alias (die je automatisch krijgt als je één tabel meerdere keren in een query zet) kun je logische verbanden leggen.
Code:
SELECT Ouder_1.PersID AS PersID_Ouder, Ouder_1.Voornaam AS Voornaam_Ouder, Ouder_1.Tussenvoegsel AS Tussenvoegsel_Ouder, Ouder_1.Achternaam AS Achternaam_Ouder, Ouder_1.Partner, Partner.Voornaam AS Voornaam_Partner, Partner.Tussenvoegsel AS Tussenvoegsel_Partner, Partner.Achternaam AS Achternaam_Partner, Ouder_1.Ouder1, Ouder_1.Ouder2, Kinderen.PersID, Kinderen.Voornaam, Kinderen.Tussenvoegsel, Kinderen.Achternaam
FROM (Blad12 AS Ouder_1 INNER JOIN Blad12 AS Kinderen ON Ouder_1.PersID = Kinderen.Ouder1) INNER JOIN Blad12 AS Partner ON Ouder_1.PersID = Partner.Partner
ORDER BY Ouder_1.Achternaam, Kinderen.Achternaam;
In deze query heet mijn brontabel [Blad12]. Wil je hem op je eigen situatie gebruiken, dan moet je die naam dus in ieder geval veranderen. Misschien de rest van de veldnamen ook, dat weet ik natuurlijk niet.
PersID_Ouder Voornaam_Ouder Tussenvoegsel_Ouder Achternaam_Ouder Partner Voornaam_Partner Tussenvoegsel_Partner Achternaam_Partner Ouder1 Ouder2 PersID Voornaam Tussenvoegsel Achternaam
1 Piet Bos 3 Janneke van Balkenbrei 4 Truus Bos
1 Piet Bos 3 Janneke van Balkenbrei 10 Jan Bos
2 Klaas de Hond 5 Harry de Hond 9 Minnie de Hond
6 Vincent Zeegers 7 Gerda Zeegers 8 Peter Zeegers
In dit simpele voorbeeld (gebaseerd op bovenstaande tabeltekst) zie je het resultaat van de query.
 
Het lukte me enkele dagen niet om er mee bezig te zijn, maar vandaag kwam ik er weer aan toe...

Wat doe ik fout: ik heb eerst de query gemaakt met alleen de aanvrager en de partner en dan krijg ik inderdaad een resultaat.
Als ik echter gezinslid1 toevoeg, is blijkbaar wel de query goed gemaakt, maar hij geeft geen resultaat.

Ter verduidelijking voeg ik hierbij in de database.

Bekijk bijlage Gezinnen.zip

Wat doe ik fout in de query?
 
Ik kan vanavond pas naar de db kijken i.v.m. versie, maar hier een aangepast voorbeeldje:
Eerst het ledenbestand. Dat kun je kopieren en plakken in Excel. Vervolgens gelijk weer kopieren, en in Access plakken. Je krijgt dan een nieuwe tabel, die je dan Leden noemt.

PersID Voornaam Tussenvoegsel Achternaam Partner Ouder1 Ouder2
1 Piet Bos 3
2 Klaas de Hond 5
3 Janneke van Langebeld 1
4 Truus Bos 1 3
5 Harry de Hond 2
6 Vincent Zeegers 7
7 Gerda Zeegers 6
8 Peter Zeegers 6 7
9 Minnie de Hond 2 5
10 Jan Bos 1 3
11 Willemien Bos 1 3
12 Hanneke Bos 1 4
13 Bernard de Hond 12 2 5
14 Gerard Bos 1 4
15 Maurice de Hond 2

Daarna maak je deze query:
Code:
SELECT Kinderen.PersID, Kinderen.Voornaam, Kinderen.Tussenvoegsel, Kinderen.Achternaam, Ouder_1.PersID AS OuderID, Ouder_1.Voornaam AS Voornaam_Ouder, Ouder_1.Tussenvoegsel AS Tussenvoegsel_Ouder, Ouder_1.Achternaam AS Achternaam_Ouder, Ouder_2.PersID AS PartnerID, Ouder_2.Voornaam AS Voornaam_Partner, Ouder_2.Tussenvoegsel AS Tussenvoegsel_Partner, Ouder_2.Achternaam AS Achternaam_Partner
FROM Leden AS Ouder_2 RIGHT JOIN (Leden AS Ouder_1 RIGHT JOIN Leden AS Kinderen ON Ouder_1.PersID = Kinderen.Ouder1) ON Ouder_2.PersID = Kinderen.Ouder2
WHERE (((Ouder_1.PersID) Is Not Null))
ORDER BY Kinderen.Achternaam;
En die levert dit resultaat:

PersID Voornaam Tussenvoegsel Achternaam OuderID Voornaam_Ouder Tussenvoegsel_Ouder Achternaam_Ouder PartnerID Voornaam_Partner Tussenvoegsel_Partner Achternaam_Partner
14 Gerard Bos 1 Piet Bos 4 Truus Bos
12 Hanneke Bos 1 Piet Bos 4 Truus Bos
11 Willemien Bos 1 Piet Bos 3 Janneke van Langebeld
10 Jan Bos 1 Piet Bos 3 Janneke van Langebeld
4 Truus Bos 1 Piet Bos 3 Janneke van Langebeld
15 Maurice de Hond 2 Klaas de Hond
13 Bernard de Hond 2 Klaas de Hond 5 Harry de Hond
9 Minnie de Hond 2 Klaas de Hond 5 Harry de Hond
8 Peter Zeegers 6 Vincent Zeegers 7 Gerda Zeegers

Mijn eerste voorbeeldje was eigenlijk niet goed, omdat je kinderen aan ouders moet hangen, en niet aan de eerste ouder en de partner wat in de vorige query gebeurde. Zoals je in dit voorbeeldje kunt zien, is Piet Bos van partner gewisseld, en heeft nog wat extra kinderen op de wereld gezet. Die wil je in de lijst natuurlijk bij de juiste ouders terugzien.
Bij elke nieuwe generatie die je wilt toevoegen, zet je de brontabel (Leden in het voorbeeld) er weer twee keer bij, en koppel je ze aan het gewenste niveau (grootouders of kleinkinderen bijvoorbeeld)
 
Ik kom al een eind op weg dankzij jouw hulp; de query is gemaakt, waardoor ik alle gezinsleden in een regel heb staan (maximaal 4, maar dat is goed). Nu wil ik nog graag een veld per regel toevoegen waarin het aantal gezinsleden per gezin wordt geteld, dus in bijgaand voorbeeld resp. 4, 1, 2 en 3. Hoe maak ik dat veld?

Bekijk bijlage Gezinnen.zip
 
Jammer genoeg heb je mijn idee precies verkeerd om uitgevoerd.... Jij gaat uit van een persoon die je koppelt aan (maximaal 3) kinderen. Je moet het dus andersom doen, zoals in mijn voorbeeld. Dan ben je ook van het probleem af dat je een maximum hebt voor de kinderen. En dat was nu exact waarom ik het andersom doe. Het aantal ouders is doorgaans biologisch beperkt tot 2. En dat kun je (behalve in China) niet van kinderen zeggen :)
 
Hallo Octafish,

Dank je wel voor je hulp tot nu toe...
De reden dat ik jouw query juist andersom heb gemaakt, is omdat ik in mijn bestand moet uitgaan van een aanvrager, die wel of geen partner heeft en waarbij het aantal inwonende gezinsleden ook belangrijk is. Dus mijn query is gebaseerd op de aanvrager en van hem of haar moet ik weten met hoeveel mensen hij of zij in een huis woont.

Hopelijk kun je me nog verder helpen met het aantal personen gerelateerd aan de aanvrager?
 
En dan nog zou ik mijn structuur aanhouden; je kunt van een persoon natuurlijk simpel het adres bijhouden, ofwel door het adres te kopiëren, ofwel met een selectievakje [Woont bij ouders]. Er is geen enkele reden te bedenken om een slechte database te maken, als een simpele oplossing, en daardoor een correcte database, eenvoudig voor handen is :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan