wat is de beste manier om personen en gebeurtenissen te koppelen via Access

Status
Niet open voor verdere reacties.

sannevanzijl

Gebruiker
Lid geworden
10 dec 2013
Berichten
17
Hallo allemaal,

Jaren terug heb ik regelmatig gewerkt met Access. Ik wil nu na jaren zelfstandig te zijn geweest de arbeidsmarkt weer op en wil daartoe ook mijn Access kennis opfrissen. De kennis die ik had was van Acces 97, nu heb ik Acces 2007, net even anders.

Bij wijze van opfriscursus had ik gedacht een database te maken om mij te ondersteunen in mijn genealogisch onderzoek. Er zijn diverse (gratis) softwarepaketten op de markt om stamboompjes in te bouwen, maar die bieden mij niet de mogelijkheid om uitgebreid onderzoek te doen. Bij de een kan je wel personen aan groepen toewijzen, maar die voorziet dan weer niet in andere dingen zoals een goede rapportage functie of het maken van zeer specifieke selecties.
Appeltje Eitje, dacht ik. Niet dus.

Het maken van een tabel, een selectie query... geen probleem.
Ik heb een prachtige tabel personen met daarin de primaire gegevens van de personen in mijn stamboom (naam geslacht geboorte en overlijden). Ik heb ook schitterende veldjes (var persoon) waarin via een bijwerkquery beschikbare naam-, geboorte en overlijdensgegevens tot tekst worden samengevoegd. Wat heel handig is (of zelfs essentieel) als je personen uit elkaar moet houden bij het onderzoek...

Een persoon heeft relaties met andere personen: partners, kinderen, ouders. Een persoon kan meerdere partners hebben, en ook meerdere kinderen. Een persoon kan maar 2 biologische ouders hebben, maar soms ook stiefouders of pleeg- of wettige ouders (voogd). Ouders van een kind zijn dus per definitie partner van elkaar, maar de manier waarop die relatie benoemd wordt kan verschillen (huwelijk, samen leven, geregistreerd partnerschap, verhouding, geen relatie of onbekend)
Maar het blijft een relatie die moet worden vastgelegd.

PUNT 1 : Ouders



Om de relatie tussen ouders en kinderen vast te leggen dacht ik: er moet een relatie gelegd worden tussen de ouders, zodat je de ouders als koppel aan het kind kunt toewijzen. Dus mijn eerste ingeving:

a. Een tabel [relaties] maken waarin je de man en de vrouw selecteert uit tabel [personen] (op basis van de velden persoon_ID en bovengenoemde var persoon . Op die manier koppel je de ouders aan elkaar en dan kan je in tabel [personen] het juiste koppel als biologische ouders aan een persoon toevoegen. Dit voorondersteld echter dat een persoon altijd 2 ouders heeft, maar die informatie is niet altijd voor handen. Soms heb je alleen een moeder of een vader. Ook is dit een onoverzichtelijke methode omdat je uit vele personen, mannen en vrouwen door elkaar, de juiste personen moet opzoeken.

b. Vervolgens heb ik op tabel [personen] twee selectiequeries gemaakt, om de mannen en vrouwen te scheiden (op basis van Persoon_ID, geslacht en var persoon . Vervolgens zoek je de man en vrouw op in tabel [relaties]. Maar dat maakt het weer lastig met het koppelen aan het kind. Om goed te kunnen koppelen moet ik de namen zien van de ouders, en als ik op tabel relaties een bijwerkquery wil maken om de var persoon van beide ouders samen te voegen dan lukt dat niet omdat alleen de waarden van var Persoon_ID in de opzoekvelden staan. Dit ging dus ook niet werken.

c. Vervolgens bedacht ik dat het misschien beter was om de relatietabel anders te zien: Het kind heeft een vader, zoek de vader uit een keuzelijst en sla op: Persoon_ID (is het kind), vader (Persoon_ID van de vader uit tabel [personen]), rol van de tweede persoon met waarde "vader". Vervolgens ga je de moeder op de zelfde wijze koppelen, dus Persoon_ID (is het kind), moeder - Persoon_ID van de moeder uit tabel [personen], rol van de tweede persoon met waarde "moeder". Dan heb je voor het kind al 2 relaties vast gelegd. Maar nou moeten die relaties ook nog vertaald worden naar beide ouders. Want immers hebben de ouders een relatie met elkaar (ze delen een kind) dus dit zou zich moeten vertalen in 2 nieuwe records namelijk Persoon_ID (van de vader), partner (de moeder) en rol van de tweede persoon met waarde "partner", en het zelfde dus omgekeerd ook voor de moeder. Vervolgens kan je dan met queries weer een heel eind vooruit als je een gezinsoverzicht wilt hebben of iets dergelijks. Deze relatiestabel moet dan uiteraard ook weer gekoppeld worden aan een feitentabel, want je moet gegevens kunnen vastleggen omtrent het partnerschap van de ouders (huwelijksdatum en plaats e.d.) maar ook moet je de datum van de geboorte van het kind naar de ouders kunnen terugleiden om te kunnen vaststellen tot wanneer een persoon minimaal heeft geleefd.

PUNT 2: Feiten

Een persoon heeft in zijn leven heel wat momenten dat er zaken te vertellen zijn. Ook bij onze voorouders is dat zo. Die gebeurtenissen kunnen ons van alles vertellen over een persoon en veel ervan is terug te vinden in DTB boeken, burgerlijke stand, notariele archieven etc. Kortom die feiten wil je vastleggen. Ze helpen je bij je onderzoek. Geboorte overlijden en huwelijk zijn feiten. Maar ook primaire gegevens die een persoon uniek en identificeerbaar maken. Andere feiten zoals doop, begrafenis en bijvoorbeeld scheiding geven daarop aanvullende informatie. Die moeten ook worden vastgelegd, maar moeten wel relateerbaar blijven aan de primaire gegevens waar zij bijhoren. Zo moet je voorkomen dat ondertrouwdatum voor de huwelijksdatum ligt of dat iemand niet voor zijn dood begraven wordt. Dan zijn er nog overige feiten zoals woonplaats, beroep, religie, onroerend goed etc. Ook allemaal feiten.
Ik weet dus niet zo goed of ik alle feiten in 1 tabel moet stoppen of dat ik een scheiding moet aanbrengen. Zo zou ik dopen en begraven ook in tabel persoon kunnen opnemen, en feiten omtrent het huwelijk in de tabel relaties uit optie b. voorbeeld in PUNT 1. Maar wat is wijsheid?

PUNT 3: verschillende stambomen in 1 database

Ik doe onderzoek naar verschillende naamgroepen. Zo onderzoek ik de namen Van Zijl en Oldenborg en Ketelaar. Deze namen komen in mijn eigen stamboom voor, maar ik beperk mij met mijn onderzoek niet tot mijn eigen stamboorm. De naamsvarianten van Oldenborg en van Van Zijl onderzoek ik in de breedste zin, zodat ik hopelijk op enig moment verbanden vind tussen de verschillende stambomen, waardoor ik ze aan elkaar kan knopen.

Nu vraag ik me af of ik gewoon alle personen in 1 tabel moet stoppen (ongeacht de naamsvariant) en ze moet scheiden op basis van toewijzing aan naamgroepen, of dat ik voor Van Zijl en Oldenborg aparte tabellen moet maken? Ik maak al enig onderscheid via de de var stamgroep, waarmee ik de verschillende stambomen Van Zijlen die ik nu heb uit elkaar kan houden. Maar dat zou niet te doen zijn als ik ook alle oldenborgen en ketelaren erin stop, dan wordt het wel een hele lange lijst. Een soort Zoekboom zou in dezen misschien handig zijn. Bijvoorbeeld Selecteer naamgroep Van Zijl, dan worden de stamgroepen voor Van Zijl getoond in var stamgroep, en selecteer ik een andere naamgroep, dan krijg ik andere stamgroepen. Maar kan dit wel?

Ik begrijp dat bovenstaande allemaal wat veel is, en ik ben blij met elke vorm van tips of commentaar. Maar waar ik het meest naar op zoek ben is iemand die me op het juiste spoor kan zetten. Misschien door af en toe wat te chatten via google talk of zo. Ik ben wat automatisering betreft geen groentje, ook al ben ik autodidact, maar Access is voor mij zo lang geleden dat ik er echt weer even opnieuw moet inkomen. Omdenken meer eigenlijk. Ik heb jaren lang voornamelijk met Excel en webtalen gewerkt...

Dus wie kan en wil me wat op weg helpen...
Op verzoek kan ik een voorbeeld bestand opsturen maar daar zit nog niet veel meer in dan brontabellen, de tabel personen en de bijwerkquery om var persoon te maken

Met vriendelijke groet
Sanne van Zijl
 
Wat betreft je Personentabel: ik zou het zelf oplossen door geen aparte tabel te gebruiken voor ouders, maar daar twee velden voor te gebruiken die verwijzen naar een ParentID. Er vanuit gaande dat de ouders ook in de Personentabel staan, Bijvoorbeeld: Vader - PersoonID=31, Moeder - PersoonId=74, dan vul je bij de kinderen in bij VaderID: 31, en bij MoederID: 74. Op die manier kun je eindeloos doorbouwen, want de kinderen met de ID's 521 en 853 kunnen zelf ook weer ouder zijn, zodat de personen met de ID's 2031 en 3541 een VaderID van 521 kunnen hebben. Als je die velden niet verplicht maakt, kun je de velden leeg laten als (een van) de ouder(s) niet bekend is(zijn). Ook als je de ouders pas later achterhaalt, wat bij genealogie doorgaans gebruikelijk is omdat je vanuit een persoon de ouders van die persoon opzoekt, kun je altijd koppelen door op een later moment het ID in te vullen.
Om een tak te zien, kun je op basis van de personentabel een lijn maken door de personentabel te kopieëren in de query, en de parentID's te koppelen. Een flexibele methode dus.

Verder zou ik alle definitiegegevens van een persoon in de persoonstabel vastleggen. Dat zijn dan in ieder geval de geboortedatum en de sterfdatum, er vanuit gaande dat die per persoon maar één keer voorkomen. Alle niet-unieke gegevens leg je vast in een details tabel, waarbij je de datum vastlegt, en het type gebeurtenis. Trouwen bijvoorbeeld kan vaker, en dat hoort dus thuis in die tabel. Eventueel kun je daar dan ook weer een tabel aan koppelen als zo'sn gebeurtenis herhalende gegevens heeft. Denk dan bijvoorbeeld aan bijlagen, zoals foto's en trouwdocumenten die je hebt ingescand.
 
Hallo Octafish

Bedankt voor de reactie. Ik ben op de lijn gaan zitten die je voorstelt. Ik heb na tips die je in andere posts hebt gegeven het formulier voorzien van opzoekvelden zodat ik de ouders bij een persoon kan zoeken. Dus geen opzoekvariabelen meer in de tabel zelf.
Nu vraag ik mij wel het volgende af: Als de ouders al in de tabel staan kun je ze er makkelijk bijzoeken. Maar als ze nog moeten worden aangemaakt dan zul je dus op het formulier PERSOON een knop bij de kop ouders moeten maken om vader danwel moeder aan te maken. Deze komen echter in dezelfde tabel als die waarnaar het formulier persoon verwijst. Levert dat geen problemen op? En hoe pak ik dat het beste aan? Met een dialoogschermpje?

Alvast bedankt voor je reactie!
Groet
Sanne
 
Als je keuzelijsten gebruikt, kun je de gebeurtenis <Bij niet in lijst> gebruiken om nieuwe personen toe te voegen. Ik zou daar dan een apart formulier voor gebruiken, als je dat wilt doen vanaf een bestaand personen formulier. Dat nieuwe formulier kan een kopie zijn vah het bestaande, dat maakt niet zoveel uit. Er komen immers dezelfde gegevens in te staan. Eventueel kun je dan ook bestaande gegevens overnemen, zoals adresgegevens. Altijd handig. Je hebt daar dus geen aparte knop voor nodig, al mag dat natuurlijk wel.
 
Al vrij rap weer terug, ik heb gedaan wat je voorstelt.
Ik kan inderdaad dan netjes een nieuw persoon toevoegen, maar als ik dan de persoon heb toegevoegd en het formulier na toevoegen sluit dan kan ik de nieuwe persoon dus niet selecteren als vader, want die staat nog niet in de geladen tabel voor het oorspronkelijke formulier. Ik hoop dat ik dit niet te vaag uitleg maar goed :)

Ik vermoed dat ik het oorspronkelijke formulier en record moet opslaan en sluiten en dan na het toevoegen van de ouder weer terug moet gaan. Maar dan moet ik dus bijhouden naar welke record ik terug moet als de ouder is ingevoerd en dat formulier gesloten word. Klopt dat? En hoe doe ik dat dan?

Groetjes
Sanne
 
Dat hoeft niet, als je de keuzelijst ververst na het toevoegen. De procedure is als volgt:
1. Persoon staat niet in de lijst --> trigger gebeurtenis <NotInList>
2. Formulier <Nieuwe persoon> wordt geopend in acDialog modus en gegevens toegevoegd.
3. Routine gaat terug naar eerst formulier en keuzelijst wordt bijgewerkt met nieuwe persoon.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan