Tabellen selectief updaten

Status
Niet open voor verdere reacties.

patricw

Gebruiker
Lid geworden
27 mei 2009
Berichten
229
Beste allemaal,

Ik heb de volgende situatie:

Elke week krijg ik van een firma een aangepaste excel file met data (diverse tabbladen). Ik ben ooit begonnen om deze data middels een UPDATE query in corresponderende tabellen te zetten. Dat gaat allemaal prima totdat in de Excel file bij oudere records enkele gegevens er niet meer staan (de klant gooit in Excel op bepaalde tabbladen regels weg omwille van de grootte van de file en dan functioneren enkel lookup functie's in de file niet meer) met als gevolg dat door de UPDATE query de desbetreffende gegevens ook niet meer in de Access tabellen komen.

Een oplossing zou kunnen zijn om de bestaande records niet te updaten, echter er zijn velden met data per record die in de loop van de tijd nog wel aangepast worden.

Wie kan mij handige tips geven hoe ik de Access tabellen kan updaten waarbij ik bovenstaand probleem omzeil?

Alvast dank!

groet, Patric
 
Tenzij er een moverende reden is om gegevens weg te gooien, bijvoorbeeld een bestandsgrootte die zo groot wordt dat het bestand niet meer verstuurd kan worden, zou ik toch in eerste instantie proberen af te spreken dat er geen gegevens worden weggegooid, juist dus vanwege het feit dat je importscripts niet meer functioneren. Ik kan mij eerlijk gezegd ook niet voorstellen dat het excel bestand dermate groot wordt dat het niet meer kan worden aangeleverd...
Om de importproblemen te omzeilen kun je de corrupte records uitsluiten van de queries, door lege velden uit te sluiten. Dat is dan wel afhankelijk van de leverancier, die dan wel altijd dezelfde velden leeg moet maken. Als ik het verhaal zo lees, vraag ik mij af of dat wel een zinvolle weg is. Want je moet hier toch harde afspraken over kunnen maken.
De aangepaste records kun je dan bijwerken met een query waarbij je de filtering omdraait.
 
Hoi michel,

Dank voor je reactie.

De bestandsgrootte is een issue want de file gaat 2 wekelijks tussen ons (in nederland) en de klant in Japan via E-mail heen en terug.

De excel file is vrij complex en heeft nu, na bijna 2 jaar een grootte van ca. 7 Mb.

Ik zit zelf te denken om (pappen en nathouden oplossing) als de klant data gaat weggooien de formules (vlookup, etc. om product bij projecten te zoeken e.d.) in de verschillende tabbladen om te zetten in harde data (dat is vrij snel te doen) want dan veranderd er toch niets meer.
 
Hoi michel,

Even een aanvullende vraag waarmee ik misschien het probleem kan omzeilen.

Kun je in een query als criterium opgeven dat de records waar 1 van de velden een #N/A heeft (dat is dus het geval in de Excel file) niet moeten worden geselecteerd? Want #N/A is geen tekst string, maar wat wel?
 
Een foutmelding vanuit een Excel formule zou denk ik als tekst moeten worden gezien na importeren. Maar het kan ook zijn dat het veld dan in Access leeg is. Ik zou de voorselectie dus in Excel doen, zodat je in Access alleen de juiste records importeert. Waarschijnlijk maakt het niet zo heel veel uit in welk pakket je de selectie maakt, of wel?
 
Waarom koppel je de excelbladen niet? Dus het excelbestand als gekoppelde tabel invoegen. Vervolgens ga je vanuit de gekoppelde tabellen met query's werken. Van D en VLookup krijg ik altijd de kriebels omdat het zo ontzettend gevoelig is. Tevens heb ik het idee dat je met 1 actie alle data wil bijwerken. Mijn tip, stap daar vanaf.

Ik werk ook met enorme bestanden (GB's) en controleer altijd vooraf de integriteit van de aangeleverde data:
- Welke data staat er in,
- welke niet,
- welke is onlogisch gewijzigd enz enz.
Alle niet integere data gooi ik in aparte tabellen voor aanvullende controle's.
Daarna wordt de data stap voor stap verwerkt.
Zo'n beheersysteem is niet 1-2-3 te bouwen maar bespaard uiteindelijk enorm veel tijd. De eerste versies heb ik volledig met macro's gemaakt en dat werkte al aardig.

Mocht de hoeveelheid data echt groot worden dan kan je overwegen om Access op de voorkant te zetten en een mySQL als back-end waar je de data in kiepert.
Wanneer je veel queries laat runnen gaat Access flink bloaten (expanderen). Dit kan je omzeilen door de queries vanuit VBA uit te voeren. Ondanks dat er bij mij GB's aan data door mijn database heen rollen blijft Access stabiel op 5MB draaien.
Mocht je meer specifieke info willen dan zie ik het hier wel.
 
Laatst bewerkt:
Wanneer je veel queries laat runnen gaat Access flink bloaten (expanderen). Dit kan je omzeilen door de queries vanuit VBA uit te voeren

Off topic, waar haal je die kennis vandaan?
Het lijkt mij eerder andersom, VBA zal eerder tot bloating leiden dan het gebruik van queries (los van het feit dat queries sneller zijn dan VBA).
Ben heel benieuwd :)

Tardis
 
Floor E, dank voor je input. Kun je iets gedetailleerder zijn over het koppelen van bladen in Excel voordat je het Excel bestand naar Access overbrengt?

Overigens update ik elk blad uit Excel apart met een aparte update query waarbij alle queries met 1 knop worden uitgevoerd (dit is historisch zo gegroeid en werkt prima).
 
Op zich is een werkblad koppelen uit Excel hetzelfde als een tabel koppelen uit een andere Access database. Of, om het bij Excel te houden, het importeren vanuit een Excel bestand.
Als je een werkblad importeert, worden de cellen met de foutmelding leeg gelaten door Access. Je ziet de foutmeldingen dus niet meer terug. Als je het werkblad koppelt, zie je deze wel staan, omdat je de gegevens nu in Excel format bekijkt. Dat levert dus als voordeel op, dat je nu kunt filteren op waarden die geen foutmelding hebben. Of juist wel....

Overigens heb ik een testje gedaan met een koppeling en importeren, en de praktijk is eigenlijk identiek. Het gekoppelde werkblad met foutmeldingen laat die foutmeldingen inderdaad wel zien. Records filteren met foutmelding doe je dan met het criterium Is Null, en een selectie van records zonder wordt dan: Is Not Null. En guess what? Dezelfde criteria op de tabel met de geïmporteerde waarden leveren exact dezelfde resultaten... Het maakt dus niet zo heel veel uit of je de tabel importeert of koppelt, behalve voor de bestandsgrootte van de db, die bij importeren logischerwijze een stuk groter zal zijn. Als je de database dus klein wilt houden, maak je een koppeling met je Excel bestanden. Je bespaart jezelf daarmee ook wat werk, als je steeds met hetzelfde (aangepaste) bestand werkt, want de koppeling doet het dan altijd wel. Je hoeft dus maar één keer een importprocedure te maken.
 
Hoi Michel,

Dank je wel. Ik ben ook niet volledig geweest, ik heb namelijk een koppeling naar de verschillende bladen, dus ik update het gekoppelde blad naar een tabel.

Ik werk niet graag rechtstreeks met de gekoppelde tabellen omdat het Excel bestand elke 2 weken naar Japan wordt gestuurd en weer terug komt en de formattering wil dan nog wel eens roet in het eten gooien (Japanners :mad: )

Ik denk dat ik met jullie info wel verder kom!

Thanks.
 
Ik heb nog een aanvullende vraag n.a.v. de update query; nu is het zo dat als er records worden toegevoegd met de update query er de datum van toevoegen achter komt te staan, maar als van een bestaand record met bv 10 velden er 1 veld wijzigt kun je dan hier automatisch een datum aanhangen?
 
Die vraag snap ik niet helemaal: bij de toevoegquery voeg je ook een datum toe, dat snap ik wel. Bij een bijwerkquery kun je dat datumveld dan toch overschrijven met een nieuwe datum?
 
Ik gebruik de bijwerkquery (update query, we hebben de engelse versie hier :) ) om aan de bestaande tabel zowel nieuwe records toe te voegen als bestaande bij te werken. een enkele keer worden bepaalde velden van een record na een paar maanden nog veranderd (b.v. een levering van een oudere batch). Ik wil dan niet de datum van toevoegen veranderen, maar wel zien wanneer een veld in dit record voor het laatst is gewijzigd.
 
Ik durf het bijna niet te zeggen, maar hoe doe je dat dan? Eén query als bijwerkquery en toevoegquery? Volgens mijn handboeken is dat onmogelijk....
Maar je kunt in de bijwerkquery neem ik aan wel een criterium maken waarin je de bij te werken velden vergelijkt met de waarden uit de oude tabel. Indien ze gelijk zijn, wordt er niks bijgewerkt, en zijn ze anders, dan heb je dus een update, en he je een nieuwe datum nodig.
 
:P

Ik update de tabellen met de data uit de gelinkte excel sheet. Bij elke sheet is minimaal 1 kolom met een uniek veld, bestaat deze nog niet dan wordt ie toegevoegd, bestaat die wel dan wordt ie overschreven (want de laatste excel file heeft per definitie de recente en dus juiste gegevens).

Eigenlijk een "ordinair" overschrijven van de tabellen met de meest recente data. Aangezien het om erg veel data gaat (9 sheets met in totaal 50 kolommen) ga ik niet eerst de data vergelijken of er wat veranderd is voordat ik ze update.
 
Hellup?!?

Zo te lezen zijn jullie hier erg handig in. Ik heb nu een probleempje met het volgende:
Ik ben bezig met het uitrekenen van werktijden. Ik heb een begintijd en een eindtijd ingevoerd. Het aantal gewerkt uren deze heb ik met een formule =(C3-B3+(C3<B3))*24 om laten zetten naar het GETAL van het aantal uren dus niet bv: 7:30 maar 7,50. Maar als ik nu de tijd aanpas dan verspringt mijn aantal uren kolom niet vanzelf. ik moet op de formule balk gaan staan en dan op enter drukken wil hij het nieuwe getal uitrekenen. Dat is bij 1 dag niet zo erg maar 31 dagen wordt toch wat veel werk! Heeft iemand enig idee hoe ik dit kan oplossen?

Groetjes, Carola
 
Carola, ik denk dat het handig is om een nieuw topic te starten met je vraag.

;)
 
En zo te zien heb je een Excel probleem. Dit is het Accessforum. Het is dus handiger om je vraag in het Excelforum te stellen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan