Even samenvatten: je hebt eigen tabellen ('brontabel' en 'Mutaties') in Access en een gekoppelde tabel ('HR tabel'). In de Mutaties heb je niet altijd een Personeelsnummer, maar wel mutaties. En nu wil je alle mutaties kunnen koppelen aan een persoon?
Dat wordt een beetje lastig, zeker omdat je niet teveel informatie geeft. In beginsel zou de situatie natuurlijk niet voor mogen komen; alle mutaties zouden een PersID moeten hebben. Dat zou afgedwongen moeten zijn in de Relaties. Als je de situatie straks gerectificeerd hebt, zou ik dat ook gelijk doen om toekomstige problemen te voorkomen. Maar voordat je dat kan doen moet je dus eerst de ontbrekende PersID's invullen.
Hoe kun je te werk gaan? Zoals ik al zei geeft je wat te weinig informatie.
Mijn brontabel bevat voor veel regels een personeelsnummer, maar niet alle mutaties bevatten een personeelsnummer.
Heb je in je brontabel voor elk personeelslid een personeelsnummer? Of ontbreken ze alleen bij sommige records in de mutaties?
In essentie is het niet zo moeilijk als het om ontbrekende personeelsnummers in de brontabel gaat. Je zult dan een match moeten maken op ándere gegevens uit de brontabel. Ik doe dat dan door velden te combineren in één veld. Bijvoorbeeld de velden Achternaam, Voornaam (en/of Voorletters) en Tussenvoegsel. Dezelfde constructie moet je ook kunnen maken met de gegevens uit de HR tabel, al hoeven daar de veldnamen niet hetzelfde te zijn. Als de output maar identiek is.
Welke combinatie je moet maken hangt dan af van de hoeveelheid records in je tabel. In een bedrijf met 20 werknemers is de kans dat je 2 'Jan Janssen's hebt een stuk kleiner dan in een bedrijf van 2000 mensen. Om te controleren of je dubbele vergelijkingsvelden hebt, kun je een query maken met alleen dit samengestelde veld, waarbij je groepeert op dit veld en op een ander veld de functie <Aantal> zet. Als het goed is, heb je voor elke combinatie dan maar één record. Die query kun je dan nog filteren op het criterium >1 zodat je heel snel de unieke namen (die dus goed zijn) niet ziet, en de dubbele namen wél. Uiteraard moet de query leeg zijn als je hem uitvoert, ten teken dat alle naamcombinaties uniek zijn.
Als dat niet zo is, moet je het veld dus uitbreiden. Welk veld je dán toevoegt, kan ik zo niet zeggen, want ik weet niet wat je opslaat in je db. Heb je bijvoorbeeld de geboortedatum (een logisch gegeven om te hebben in een HR) dan kun je die er bij zetten; "Jan Janssen_11-03-1982" is dan niet hetzelfde als "Jan Janssen_27-01-1987". En daarmee is de combinatie weer uniek en dus geschikt.
Als je de unieke combinatie hebt kunnen maken, kun je hem in een query gebruiken om de Brontabel te matchen met de HR tabel. Die 2 tabellen koppel je nu aan elkaar (op basis van PersID) maar die koppeling moet dus weg. De 2 tabellen ga je namelijk koppelen op basis van een criterium. Daarbij gebruik je de eerder gemaakt formule als
veld en de overeenkomende variant uit de HR tabel als
criterium. Als je dan de velden Personeelsnummer uit beide tabellen ook in het raster zet, krijg je een keurig overzicht van de personen in je Brontabel met de bijbehorende Personeelsnummers. Die dus uit de HR tabel komen.
De vervolgstap zou dan bij mij zijn om de brontabel bij te werken met de op deze manier verkregen personeelsnummers. Kwestie van de selectiequery omzetten naar een Bijwerkquery en het veld Personeelsnummer vullen vanuit de HR tabel. Ik zou dan nog wel filteren op de lege velden in de brontabel, om te voorkomen dat je de bestaande personeelsnummers vervangt. Dat hoeft niet, omdat je die a) al hebt en b) je query er trager van wordt. Je wilt immers alleen de lege records bijwerken.
En daarna dus de relatie tussen Brontabel en Mutaties aanpassen!