dubbele records met vba

Status
Niet open voor verdere reacties.

Jumping

Gebruiker
Lid geworden
28 mei 2007
Berichten
111
Hallo allemaal,

Ik heb een tabel met daarin ongeveer 28000 records.
In die tabel staan ongeveer 1500 dubbele records. De gegevens worden dagelijks vanuit mijn verschillende kassasystemen ingelezen. Dat betekend dus ook dat die dubbele records dagelijks terugkomen.

Ik wil met VBA ervoor zorgen dat ik uit die 28000 records de dubbele data verwijder. Hoe kan ik dat het beste doen?

Bedankt!
 
Je hoeft niet terug te vallen op VBA.
Dit voorkom je normaal door de primary key.
Mocht de primary key een oplopend nummer zijn dan kan je een extra index aanmaken en dat doe je als volgt:
  • Open de tabel in de ontwerpweergave
  • Klik op Indexen
  • Geef de index een unieke naam
  • selecteer de kolom
  • onderaan de pagina zie de indexeigenschappen. Kies hier uniek: Ja en optioneel Null waarde (lege cellen) negeren.
  • Mocht je een combinatie van kolommen uniek willen hebben dan laat de naam van de index leeg. De kolom valt dan onder de index van de bovenliggende.
Let op: je dient eenmalig de dubbele records te verwijderen. Dit kan heel makkelijk door de tabel te kopieren. Inhoud te wissen (wel opletten met relaties met andere tabellen) en na het aanmaken van de extra index de boel weer terug te kopieren. Er zijn overigens ook andere manieren.
 
Laatst bewerkt:
Hallo Floor,

Dank je wel...
Dat index gebeuren is prima, maar veel handmatig werk.

Ik ben zoekende naar vba code waarmee ik dat kan doen...
En het moet wel qua snelheid te doen zijn, 28000 records doorspitten duurt wel ffkes.

groet!!
 
Je kunt om te beginnen een query maken met de wizard Dubbele Records. Daar zouden de 1500 dubbele records uit moeten rollen. Je zult één van de dubbele records uiteraard willen houden, dus die zul je vervolgens uit de query met de dubbele records moeten vinden. Dat zou je bijvoorbeeld kunnen doen met een Totalenquery, waarbij je groept op het sleutelveld, en met de functie Min de eerste waarde vindt van een veld (mag ook het sleutelveld of een Autonummerveld zijn).
Dan heb je een query die de dubbele records heeft, en een query die uit die records de eerste heeft. Nu heb je een query nodig die uit de dubbele records de overige records selecteert. Dat maak je met de wizard Niet-gerelateerde records. Hiermee zoek je de records op die niet in de query staan met de eerste records. Dat levert een query op met de overige records.
Die queries heb je elke keer nodig, dus die geef je een mooie naam.
Nu komt-ie: op basis van query 3 maak je een tabel aan met het sleutelveld. In deze tabel zitten de recordID's die weg mogen. We noemen deze tabel voor het gemak even Temp. De volgende query wordt dus een Verwijderquery, waarbij je als criterium op het sleutelveld gebruikt: In (Select ID FROM Temp). Voor het gemak ga ik er maar weer even van uit dat het sleutelveld ID heet.
De laatste twee queries zet je in een macro, en klaar ben je. De macro maakt dus eerst de tijdelijke tabel aan, en verwijdert vervolgens de dubbele records.
Heb je dus geeneens VBA voor nodig...
 
Hey octafish...

Mooie oplossing en deze had ik ook zo bedacht, alleen ik wil het allemaal wat 'netter' wegwerken, en dan het liefste met een vba code die ik kan aftrappen middels een button op mijn schakelbord.

Groet!
 
Je kunt alle queries uiteraard via VBA opbouwen en afschieten. Er is wel een andere methode, op basis van het openen van de recordset, maar ik vraag me af of dat sneller is, omdat je dan door alle records moet lopen om te kijken of er een dubbele in zit. Deze oplossing is redelijk snel.
 
Ja precies .. heb het al getracht met een recordsset .. maar dit schiet niet heel erg op ..
Maar denk dat ik dan maar een combi bouw ..

Bedankt voor alle hulp!!
 
Hoe bedoel je? Schiet niet erg op?
 
ik doelde daarmee op de recordset .. als je daarmee door 28000 records loopt schiet het niet op ;-)
 
Je kunt een recordset maken op basis van de 1500 dubbele records, en daarvan het eerste record laten staan en de rest verwijderen.
 
eh ... dan was ik niet duidelijk genoeg ;-) ... ik heb 1500 dubbele records .. dus in totaal 3000 records .. sorry.

Wat ik ga doen .. is een query maken die alle dubbele records in een aparte tabel zet. hier laat ik een recordset op los ... bestaat het record .. delete..
 
Je kan ook je query opslaan en deze via VBA starten.
Simpel en in theorie sneller.

Tardis
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan