filteren unieke codes

  • Onderwerp starter Onderwerp starter scw
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

scw

Gebruiker
Lid geworden
5 jun 2009
Berichten
530
Hallo,

Ik heb een Excel bestand met een paar honderd rijen. 1 kolom bevat een bepaalde code, welke meerdere malen voor kan komen in de rijen. Het gaat om ongeveer 20 codes. Nu wil ik deze codes in Access binnenhalen. Maar dan niet honderd keer, maar alleen Grouped By. Dat is op zich geen probleem...

Maar nu gebeurt het ook dat er een 21ste en een 22ste code bij komen. De lijst kan dus veranderen, er kunnen ook codes verdwijnen. Mijn vraag is wat is de makkelijkste oplossing om dit up-to-date te houden? Nu heb ik gemaakt het volgende:

DB 1:
een tabel Codes
een Importquery vanuit Excel
een Verwijderquery (welke tblCodes leeghaalt voor het updaten)
een Append-to query naar --> tblCodes

DB 2:
een gekoppelde tabel van tblCodes
een query Grouped By

Op zich is zou het wel werken, maar het volgende doet zich voor: zodra de verwijderquery tblCodes heeft leeggehaald in DB 1, dan werkt de Append-to query niet VOORDAT ik Comprimeren & Herstellen heb gedaan :confused: Anders krijg ik een run-time error 3349. Anders werkt het wel.

Bovendien lijkt me het nogal een omslachtige oplossing, mogelijk zien jullie wat ik makkelijker zou kunnen doen??:rolleyes:
 
Als ik het goed begrijp heb je een Excel bestand, dat aan veranderingen onderhevig is: er komen bestaande records bij, zodat je een dubbele code krijgt, en er komen nieuwe records bij?
Dan zou ik een koppeling in je db maken met het Excel bestand, en daar een Totalenquery op draaien die je codes uniek ophaalt. Vervolgens maak je op basis daarvan een Toevoegquery, die alleen de nieuwe codes toevoegt aan je hoofdtabel.
Het probleem waar je nu tegenaan loopt wordt misschien veroorzaakt doordat je met Autonummering werkt. En omdat je steeds met een lege tabel werkt, moet je die nummering steeds resetten door C&H uit te voeren. Het probleem heb je niet als je mijn manier gebruikt.
 
Inderdaad zou de autonummering een plausibele verklaring zijn voor het niet willen bijwerken, het heeft er immers alle schijn van :thumb:

Graag wil ik je vragen of je iets gedetailleerder kunt zijn, hoe ik deze queries op kan stellen? De totalenquery is toch de gewone selectiequery, vervolgens die extra velden ziet verschijnen wanneer je totalen selecteert, en vervolgens je dan Group By selecteert. Moet dan Group by nog bij bepaalde vakken weggehaald worden in de query, want dan werkte de query namelijk niet bij mij. Maar hoe geef ik aan in de query dat die alleen van deze code de unieke er uit moet vissen. Bovendien, als er codes verdwijnen uit de lijst, wordt dit dan ook 'herkent' door de query.

Zoals je ziet, ben ik erg benieuwd!

Maar alvast vriendelijk bedankt voor het eerdere advies ook al.

Gr. scw
 
ohja,

ook stuit ik nog op het probleem dat Access een bepaald veld bij de import linked table automatisch omzet naar nummer. Hierdoor geeft die bij velden waar een letter in voor komt, de melding : #NUM!

Nu heb ik in Excel alles op 'General' gezet al, dus tekst zou ook moeten worden geaccepteerd. Desalniettemin, blijft Access het veld omzetten naar nummer, terwijl er geen mogelijkheden zijn om dit te veranderen zo ver ik kan zien :confused:
 
Waarschijnlijk moet je eerst een Importspecificatie maken, als je de gegevens tenminste importeert. In die importspecificatie leg je vast wat het gegevenstype moet zijn van de velden. Deze sla je dan op, en gebruik je elke volgende keer weer als je de gegevens importeert.
Doe je de import via een macro of met VBA, dan geef je hier aan dat je een bepaalde importspecificatie gebruikt, zodat je daar verder geen omkijken naar hebt.
De totalen query die je maakt klinkt qua opzet goed, maar als je toch dubbele codes krijgt, heb je velden in de query staan die unieke waarden bevatten. Dat kan uiteraard voorkomen, maar moet je bij je import zien te voorkomen. Meestal treedt dit op bij velden die eigenlijk niet horen in de tabel waarin je de codes wilt vastleggen. Voorbeeldje: als je in Excel klantgegevens vastlegt, met een KlantID, en in dezelfde tabel adres- en verhuisgegevens vastlegt, kan het voorkomen dat je bij een persoon meerdere adresregels hebt. Aangezien je er bij een klant vanuit mag gaan dat hij één adres heeft, zou je kunnen stellen dat de adressen thuishoren in een AdresHistorie tabel. In feite wil je alleen het laatste adres opslaan. In je query groepeer je dan op KlantID, Naam etc, en kies je bij Adresvelden de optie Laatste. Dit doe je bij alle velden die voor dubbele records zorgen.
Kortom: in je query bekijk je welke velden de dubbele records veroorzaken, en die gooi je er uit (ook een optie) of je kiest een functie die een bruikbare waarde oplevert.
Op basis van deze query maak je dus een Toevoegquery, die alle velden toevoegt aan de brontabel. Om te voorkomen dat je dubbele gegevens toevoegt, zet je op het Sleutelveld een criterium.
In het geval van KlantID, zoals in mijn voorbeeld, ziet dat er als volgt uit:
NOT IN(SELECT KlantID FROM tKlanten)
OFtwel: het criterium maakt een lijst van Klantid's m.b.v. Select, en filtert vervolgens in de toe te voegen records alle records er uit die in die lijst staan met Not In.
 
Geweldig bedankt voor het vinden van de juiste weg!

Waar ik vast liep is dat ik in Access 2007 (bekend voor mij, dat dit voor jou onbekend is) de Excel naar Access importknop gebruikte. In plaats daarvan moest ik de Saved Imports knop gebruiken, waarbij je WEL de gegevenstypen kunt specificeren. Nu werkt het naar behoren en makkelijk up te daten!

Nu wil ik graag velden toevoegen, welke niet in het Excelbestand voorkomen. Omdat er zo periodiek toch wel de Saved Import gedraaid zal worden (en de tabel dan weer alleen die velden die uit het Excel bestand komen bezit). Wat is het handigst om dit te doen. In een query kun je geen data bewerken. Maar bij de tabellen heb je weer geen mogelijkheid om samen te voegen??

Moet ik dan een nieuwe tabel maken (B) en dan in een query tabel A + B samenvoegen?? :rolleyes:
 
In een query kun je geen data bewerken
Is niet helemaal juist; in beginsel maakt het niet uit of je gegevens bewerkt via een query of een tabel. Al zijn er zat omstandigheden te bedenken waarin het niet werkt. Maar daar gaat je vraag niet over....
Zolang je de gegevens steeds in dezelfde tabel laat importeren vanuit Excel, maakt het niet uit of je nog extra velden wilt of niet. Al kom je denk ik in de problemen met je Importspecificatie, als het bronbestand wijzigt. Maar je hebt het erover dat je de aanvullende gegevens in een aparte tabel hebt staan? Die kun je natuurlijk gewoon aan je Toevoegquery koppelen, en dan verder toevoegen aan de doeltabel.
 
in beginsel maakt het niet uit of je gegevens bewerkt via een query of een tabel.
Stom van mij, inderdaad kan het natuurlijk wel, maar is het vaak niet wenselijk.

Zolang je de gegevens steeds in dezelfde tabel laat importeren vanuit Excel, maakt het niet uit of je nog extra velden wilt of niet.
Ja ik laat het wel steeds in dezelfde tabel importeren, maar wanneer ik nu velden toevoeg in Access, dan overwrite Access ze weer bij het uitvoeren van de Saved Import. Access vraagt dan wel of ik ze wil overschrijven, maar klik ik dan op NEE: gebeurt er verder niets meer, klik ik op JA: overwrite die de tabel en zijn de velden verdwenen.

Voor de duidelijkheid zou ik dus graag velden willen toevoegen in Access en niet in Excel. Dus als ik je goed begrijp moet ik de Toevoegquery gebruiken om dit te bereiken?
 
Ja; ik krijg het idee dat je een Tabelmaakquery gebruikt?
 
Dat klopt! Aan je toon hoor ik dat ik waarschijnlijk niet op het juiste pad zit :o
 
Dat zou inderdaad niet mijn insteek zijn. Je kunt wel beginnen met een Tabelmaakquery, om de tabel te importeren met een importspecificatie heb je immers een tabel nodig. Daarna zou ik de Tabelmaakquery omzetten naar een Toevoegquery, op de zojuist aangemaakte tabel. Je hebt dan een perfecte match met de huidige veldnamen. Deze tabel pas je dan verder aan met de overige velden die je wilt (laten) invullen.
Om te importeren heb je verder een tijdelijke tabel nodig, die dus steeds overschreven wordt. Deze tabel zou ik steeds dezelfde naam geven, en als je het via een VBA knop doet, kun je hem ook nog rustig laten verwijderen zonder problemen, hij wordt toch wel weer aangemaakt.
De Toevoegquery gebruik je dan om de data in je echte tabel te zetten.
Deze procedure bijvoorbeeld heb ik zelf gebruikt.

De code voor het importeren van Excel bestand:
Code:
Private Sub cmdImportRegulier_Click()
     DoCmd.SetWarnings False
     sUser = Environ("Username")
     sFile = "C:\Documents and Settings\" & sUser & "\Bureaublad\ImportRegulier.xls"
     DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "ImportRegulier", sFile, True
     DoCmd.SetWarnings True
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan