Nieuwe unieke records aan tabel toevoegen vanuit andere tabel

Status
Niet open voor verdere reacties.

anietje62

Gebruiker
Lid geworden
1 dec 2006
Berichten
38
Op mijn werk (geen ict-er) :) ben ik bezig met een database in access.
Vanuit een groot excel-tabel worden er een groot aantal records in een acces DB verwerkt. Het is me grotendeels gelukt om de DB naar onze wensen op te zetten met de diverse tabellen, formulieren etc.

Waar ik nu tegenaan loop is dat er iedere maand er een paar honderd records bijkomen vanuit de exceltabel, waarvan honderd nieuwe patienten en ook een paar honderd al geregistreerde patienten.
Ik importeer de tabel in access en Ik wil nu graag dat alleen de nieuwe patienten toegevoegd worden aan de tabel Patient. Ik heb daarvoor een toevoegquery gemaakt, eigenschappen op unieke records gezet. Dus een rij in het excel bestand heeft deze velden: Datum - Patientnr-patientnaam-gebdatum-geslacht- nog verschillende andere velden. Tabel Patient: Id-- Patientnr-patientnaam-gebdatum-geslacht
De eerste keer lukte dit ook goed, alleen nu met het onderhouden van de db voegt hij op een of andere manier toch alle patienten toe ipv de nog niet “bestaande”
Ik ben er al zo’n beetje de hele dag mee bezig. Heb al in de acces-handleiding gekeken, en ook hier op diverse fora maar kom er maar niet uit.

Weet iemand wat ik fout redeneer? Zie bijlage voor de query.
 

Bijlagen

  • accessdb.png
    accessdb.png
    18,2 KB · Weergaven: 168
Weet iemand wat ik fout redeneer? Zie bijlage voor de query.
Dat is simpel uit te leggen. De eigenschap <Unique Records> kijkt alleen naar de bron van je query, en kijkt of die records uniek zijn of niet. De Eigenschap kijkt dus niet naar de doeltabel. Dat zou ook geen zin hebben, want stel dat hij dat wel deed: het resultaat zou zijn dat de query alsnog wordt uitgevoerd op records die uniek voorkomen in die doeltabel. En creëert dan dus alsnog dubbele records. Er is maar één oplossing: records die al in de doeltabel zitten wegfilteren uit je bron.
Overigens speel je gevaarlijk spel, door nu met een Cartesisch product te werken. De tabel [Molis Import] moet je koppelen aan de tabel [Patiënt]. Dat zou dan moeten op het veld [Patiëntnummer].

Dat is echter niet genoeg, want dan kopieer je de records die identiek zijn. Je wilt juist het omgekeerde. Dubbelklik dus op de lijn tussen de twee tabellen, en kies voor optie 2 of 3. Welke, is nu niet te zeggen, hangt van Access af. Kies in ieder geval de optie die alle records uit [Molis Import] laat zien, en de gekoppelde uit [Patiënt]. Nu heb je, als je de gegevens zou bekijken (met het veld [Patiëntnummer] uit [Patiënt] erbij) gevulde patientnummers, en lege. De lege zitten wel in [Molis Import] maar niet in [Patiënt]. En dat zijn de records die je wilt importeren. Om alleen die records te filteren, moet je het veld filteren op de waarde Is Null. Nu zie je de juiste records, en die kun je toevoegen. Zou je dat 1 keer doen, dan zijn alle tabellen weer identiek. Voer je de query dus nog een keer uit, dan zijn er geen records met de waarde Null, en wordt er niks meer toegevoegd.
 
Dank je wel!Ook voor de snelle reactie :).
Na wat uitproberen is het nu inderdaad wel gelukt. Omdat de nieuwe gegevens ook dubbele waarden bevatten kon ik nog een group by toevoegen en daarna kwam er precies uit wat ik moest hebben.
bijlage2.JPG

Ik liep daarna tegen een volgende probleem aan wat er mee verband houdt. Alle gegevens worden geladen in de verzameltabel gegevens. Van ieder patnr wil ik in de eerste record, dus de eerste datum bijhouden dat het een nieuwe patient is en ik heb daarom een veld NieuwePatient (ja/nee). Het lukt me om deze records te sorteren (zie volgende afbeelding), maar daarna niet meer om het aanvinken te automatiseren (het gaat in dit geval om ruim 6000 records, dus handmatig vinken vond ik geen eerste optie).
Heb al geprobeerd om diverse velden toe te voegen met verschillende jointtypes. Ook de gegevens naar een nieuwe tabel (Nieuwe patient) op te laden en van daaruit de tabel "Gegevens" te vullen, maar ook dat lukt niet. (een keer bleef acces rekenen tot er geloof ik zo'n 200000 records te voorschijn kwamen :confused: Dus nu ook weer de vraag:
Wat zie ik over het hoofd en wat kan ik hier anders aan doen.
De query werkt wel met de totalen, maar het bijwerken van veld NieuwePatient kan dan niet meer.
bijlage3.JPG
 
Bijwerkqueries werken niet op een Totalen query, wat ook wel logisch is. Je moet dus op de complete set werken. Alleen: dat wil je uiteraard niet. Overigens ben ik van mening dat je dat vinkje helemaal niet nodig hebt, omdat je de informatie (wanneer is een patiënt nieuw) toch al wel uit de db kunt halen. Simpel, zoals je nu al doet: door te filteren op de eerste datum.... Dus wat voegt een vinkje dan toe? toch helemaal niks? Maar als je dat toch wilt, zul je dus een criterium moeten maken op het PatientId. Met een subquery.
 
Overigens ben ik van mening dat je dat vinkje helemaal niet nodig hebt
Tja, dat had ik ook al zitten bedenken.
Heb het idd alleen nodig voor een rapport en dan zou ik het er ook uit moeten krijgen.
Ik ga het eens op die manier proberen, mocht ik er (weer) niet uitkomen dan maak ik wel weer een nieuw bericht aan. Eerst maar eens rondkijken of ik ergens iets kan vinden.
Nogmaals bedankt voor de hulp Michel.:thumb:

Anita
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan