Gewijzigde records

Status
Niet open voor verdere reacties.

Sjoef

Gebruiker
Lid geworden
12 mei 2009
Berichten
270
Hallo, ik heb in het forum gezocht maar niet de oplossing kunnen vinden. Ik heb 2 tabellen tblOud en tblNieuw. In tblOud staan records van bijv de maand januari. In februari komt er een nieuw bestand in tblNieuw. Nu wil ik alleen de records die gewijzigd zijn zien. Dus bijv een adreswijziging of als er bijv een partner bij gekomen is. Het gaat om een kleine 60000 records. Ik had een into query op het forum gevonden maar die staat 2 dagen te draaien. Wat die ik fout of wie weet een simpele (en snelle) manier?

JoZ
 
Zonder de query kunnen we natuurlijk niet zoveel zeggen. 60000 records is overigens niet overdreven veel voor een Access tabel. Dus die zou geen twee dagen hoeven te zuchten en steunen... Een Select Into query is gewoon een toevoegquery; ik neem aan dat je dat bedoelt?
 
Hi Michel, hier mijn brouwsel. Maar die werkt van geen kanten.....

strSQL = "SELECT * INTO tblTemp FROM tblNieuw WHERE (((tblNieuw.primairesleutel) Not In (SELECT tblNieuw.primairesleutel " & _
"FROM tblNieuw, tblOud " & _
"WHERE tblOud.veld1=tblNieuw.veld1 and tblOud.veld2=tblNieuw.veld2 enz enz ))); "

enz enz zijn nog een stuk of 10 velden die vergeleken moeten worden. Maar het liefst wil ik kijken of een record in zijn totaal gelijk is gebleven of dat er een veld gewijzigd is.

JoZ
 
Als je een gewone selectiequery maakt van tblOud en tblNieuw waarbij je alle te vergelijken velden koppelt (dus niet op primairesleutel wat je normaal zou doen), is die dan ook zo traag?
 
Ik heb 2 tabellen tblOud en tblNieuw. In tblOud staan records van bijv de maand januari. In februari komt er een nieuw bestand in tblNieuw.
Hier klopt iets niet:
Nu wil ik alleen de records die gewijzigd zijn zien. Dus bijv een adreswijziging of als er bijv een partner bij gekomen is.
Waar komen die gewijzigde gegevens vandaan?
In tblOud staat een status quo van Januari
In tblNieuw staat een status quo van Februari (records die (al) gewijzigd zijn)

Is er sprake van een derde bestand ("kopieOud") waarin wijzigingen worden aangebracht?
En die vervolgens wordt hernoemd/gekopieerd naar tblNieuw?
Anders kan ik bovenstaande niet verklaren.



Als je met een database werkt, ligt het voor de hand dat in één tabel de bestaande gegevens gewijzigd worden.
Daarvoor zijn drie manieren:
  1. je laat de oude gegevens staan met een ingevulde einddatum en je maakt een nieuw record met de gewijzigde gegevens en een ingangs-datum
  2. je overschrijft de oude gegevens direct met de nieuwe gegevens (niet handig!)
  3. je maakt een hulptabel met wijzigingen (kun je eerst nog checken) en vanuit die hulptabel verander je de bestaande gegevens (ook niet handig).

2 en 3 hebben hun beperkingen
 
Je SQL klopt qua logica in ieder geval niet.
Kijk eens of 1 van deze varianten sneller werkt

Variant 1

Code:
strSQL = "SELECT * INTO tblTemp FROM tblNieuw WHERE tblNieuw.primairesleutel Not In (SELECT tblOud.primairesleutel " & _
"FROM tblOud " & _
"WHERE tblOud.veld1=tblNieuw.veld1 and tblOud.veld2=tblNieuw.veld2 enz enz );"

Variant 2

Code:
strSQL = "SELECT * INTO tblTemp FROM tblNieuw WHERE NOT EXISTS (SELECT tblNieuw.primairesleutel " & _
"FROM tblOud " & _
"WHERE tblNieuw.primairesleutel = tblOud.primairesleutel AND tblOud.veld1=tblNieuw.veld1 and tblOud.veld2=tblNieuw.veld2 enz enz );"

Tardis
 
in de eerste instantie bedankt voor de reacties. Maar ik geloof dat ik redelijk de weg kwijt ben. Wat ik wil is een lijst met records die gewijzigd zijn in tblNieuw t.o.v tblOud. Ik dacht die in een tussentabel te proppen om zodoende een export te kunnen maken. Vandaar de tabelmaakquery. (later gaat de inhoud van nieuw naar oud en krijg ik via een import nieuwe gegevens die dan weer vergeleken dienen te worden) Ik kom er niet meer uit, dus als het kan een stukje code als voorbeeld....:thumb:

Joz
 
Ik zie het nut van een tussentabel niet, eerlijk gezegd; je wilt volgens mij alleen maar gegevens kunnen vergelijken. Bovendien lijkt mij dat de gegevensbron dynamisch is, en een tijdelijke tabel is dat niet. Een simpele selectiequery waarbj je de oude tabelgegevens aan de nieuwe tabelgegevens koppelt (velden slepen dus) is dan al genoeg om een lijst te maken van de identieke records; die dus niet zijn gewijzigd. Deze query gebruik je als om in een nieuwe query de tabel te filteren Dat doe je al dan niet met een subquery; je kunt ook een Outer join maken tussen tabel en query en op Null filteren. De laatste variant is in ieder geval grafisch een stuk overzichtelijker dan een subquery.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan