Twee tabellen vergelijken en nieuwe toevoegen

Status
Niet open voor verdere reacties.

elagas

Gebruiker
Lid geworden
16 mei 2006
Berichten
104
Hallo allemaal,

Ik zit met een klein probleempje, ik heb 2 bijna identieke tabellen, nu wil ik een query maken die dus kijkt naar de 2 tabellen en alleen de records van tabel 2 die niet in tabel 1 staan toevoegd. Je zou bijna zeggen dan neem je toch lekker tabel 2 maar er zit meer achter.
tabel 1 is een accesstabel en tabel 2 is een gekoppelde tabel. Nu wil ik alvast werken in tabel 1, en na een tijd wil ik kijken of er in de gekoppelde tabel nieuwe records zijn toegevoegd en deze toevoegen aan tabel 1.

Ik hoop dat er iemand mij kan helpen.

Bij voorbaat dank
 
Dat is een relatief simpele klus:

Eerst moet je bepalen welke records er in tabel 2 voorkomen die niet in tabel 1 zitten, want dat zijn de records die je wilt toevoegen. Je kunt dat doen met de Wizard Niet-gerelateerde records; hierbij laat je Access een selectie maken op de tabel (tabel 2) die records bevat die niet in tabel 1 voorkomen.

Vervolgens maak je een Toevoegquery, door een nieuwe query te maken en in de Ontwerpmodus, en selecteer je Tabel 2, en de zojuist gemaakte Query als bron. Nu ga je naar het menu Query en kies je de optie Toevoegquery. Access vraagt gelijk aan welke tabel je de records wilt toevoegen, en dat is dan uiteraard Tabel 1.
Vervolgens controleer je eerst of de sleutelvelden uit tabel 2 en de query aan elkaar gekoppeld zijn; is dat neit het geval, dan sleep je het ID veld van tabel 2 naar de query, of andersom.

De volgende stap is, het toewijzen van de velden uit tabel 2 en ze toewijzen aan het corresponderende veld in tabel 1. Als de veldnamen hetzelfde zijn, dan zal Access de namen gelijk overnemen, anders zul je ze zelf moeten selecteren.

Je kunt de gegevens controleren, door eerst op de knop Beeld te klikken; als je het goed hebt gedaan, zitten er alleen records in die nog niet in tabel 1 zitten.

Mocht je er niet uitkomen: zet een voorbeeldje neer, dan help ik je verder!

Michel
 
Hier is het bestandje.Hij moet in feite kijken naar de query"qryMailing" en deze moet hij vergelijken met de tabel "tblMailing". Alle records die extra staan in "qryMailing" moeten in "tblMailing" worden toegevoegd.

Alvast bedankt dat je me wil helpen.
 

Bijlagen

Hallo Elagas ,

onderstaande query is een mogelijkheid die ja kan gebruiken .

Code:
INSERT INTO tblMailing ( dbo_PERS_NAAM, VOORL, EMAIL, CODE, dbo_OBJALG_NAAM, IS_ARCHIVED )
SELECT qryMailing.dbo_PERS.NAAM, qryMailing.VOORL, qryMailing.EMAIL, qryMailing.CODE, qryMailing.dbo_OBJALG.NAAM, qryMailing.IS_ARCHIVED
FROM qryMailing
WHERE (((Exists (Select * FROM tblMailing WHERE tblMailing.EMail = qryMailing.Email))=False));

Hierin gebruik ik als criteria het email adress , normaal is deze uniek voor elke persoon , maar dir echter niet voldoende zijn kun je de Where criteria uitbeiden .


Groetjes
en succes
 
Hoi Elagas,

Ik neem aan dat de db in 2003 is gemaakt, want ik krijg hem in 2k niet open; dus vanavond zal ik er ook een blik op werpen.

Michel
 
Mijn variant:

Code:
INSERT INTO tblMailing ( dbo_PERS_NAAM, VOORL, EMAIL, CODE, dbo_OBJALG_NAAM, IS_ARCHIVED )
SELECT qryMailing.dbo_PERS.NAAM, qryMailing.VOORL, qryMailing.EMAIL, qryMailing.CODE, qryMailing.dbo_OBJALG.NAAM, qryMailing.IS_ARCHIVED
FROM qryMailing
WHERE ((qryMailing.dbo_PERS.NAAM Not In (select dbo_PERS_NAAM from tblMailing)) AND (qryMailing.EMAIL Not In (Select Email from tblMailing)));

Het effect is hetzelfde, de insteek is een klein beetje anders. Deze query gebruikt een subquery (Select Email from tblMailing) om de emailadressen uit te sluiten met <Not In> die niet in de selectie zitten. Hetzelfde gebeurt met het veld Pers.Naam, om daar de dubbele records uit te sluiten. Het is een techniek die ook door de wizard Niet-gerelateerde records gebruikt wordt om a.h.w. een voorselectie te maken, in dit geval op email adres.

Ik zou ook aanraden om met een betere sleutelwaarde te werken, al kun je met de <Not In> constructie uiteraard meer dubbele records uitsluiten.

Michel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan