Update query vraag

Status
Niet open voor verdere reacties.

patricw

Gebruiker
Lid geworden
27 mei 2009
Berichten
229
Beste allemaal,

Om data uit een Excel in Access te krijgen maak ik gebruik van een update query, zie onder.

Code:
UPDATE [TEP shipment] RIGHT JOIN [TEP shipment link] ON ([TEP shipment].[Shipment date] = [TEP shipment link].[Shipment date]) AND ([TEP shipment].[Label lot] = [TEP shipment link].[Label lot]) SET [TEP shipment].[Label lot] = [TEP shipment link]![Label lot], [TEP shipment].[Shipped pcs] = [TEP shipment link]![Shipped pcs], [TEP shipment].[Shipment date] = [TEP shipment link]![Shipment date], [TEP shipment].[Remaining pcs] = [TEP shipment link]![Remaining pcs], [TEP shipment].[TEP label Code] = [TEP shipment link]![TEP label Code], [TEP shipment].Specification = [TEP shipment link]!Specification, [TEP shipment].Customer = [TEP shipment link]!Customer, [TEP shipment].[overall yield] = [TEP shipment link]![overall yield], [TEP shipment].[Shipment month] = [TEP shipment link]![Shipment month], [TEP shipment].[Shipment week] = [TEP shipment link]![Shipment week]
WHERE ((([TEP shipment link]![Label lot]) Is Not Null) AND (([TEP shipment link]![TEP label Code]) Is Not Null) AND (([TEP shipment link]![Customer]) Is Not Null) AND (([TEP shipment link]![Specification]) Is Not Null));

Nu komt het wel eens voor dat er in 1 van de velden waar WHERE criterium op zit in Excel #N/A staat a.g.v. missende referentie in Excel. Dit is normaal alleen hoe kan ik ook deze velden uitsluiten van de update? (gewoon " and is not #N/A" toevoegen aan de WHERE criteria?).

groet, Patric
 
Nog afgezien van het feit dat je zo te zien nogal wat dataredundantie aan het maken bent door gegevens van de ene tabel over te hevelen naar de ander, zitten er ook nog eens overbodige velden in zoals [TEP shipment].[Shipment month], [TEP shipment link]![Shipment month], [TEP shipment].[Shipment week]en [TEP shipment link]![Shipment week] want die gegevens kun je te allen tijde herleiden uit één veld: [TEP shipment link].[Shipment date].
Ik zou toch in eerste instantie in het Excel bestand voorkomen dat je de foutmelding krijgt, dat is veruit het makkelijkst. Dus de formule die de fout genereert uitbreiden met =ALS(ISFOUT(hier de formule;"";hier de formule). Staat netter in Excel, en jij hebt geen probleem meer. Anders dan je dataredundantie :).
 
Beste Michel,

Deze opzet is "onvermijdelijk". De Excel file (bestaande uit 8 sheets die een chronologische verwerking van ons produkt bevatten) wordt uitgewisseld met Japanse collega's. Toen we de Dbase hebben opgezet waren er grote problemen met de (formattering van) data als je louter een gelinkte tabel gebruikte. Om dit te voorkomen hebben we destijds vanuit de gelinkte tabel de data "netjes" overgezet in een andere tabel middels een update query. Dit loopt op zich prima.

Daarnaast heb je uiteraard gelijk dat e.e.a. afgeleid kan worden uit een datum/tijd veld, echter ook hier zijn dit gegevens die onze Japanse collega's gebruiken en er niet zomaar uit kunnen.

Dus we worden hier "geleefd" door de historie ;) , maar de Dbase functioneert verder prima, ik kan veel van mijn collega's snel en makkelijk data voor diverse analyses aanleveren.

Maar jou tip om de fout in Excel af te vangen is wel nuttig. Dat ga ik even inbouwen.

Thnx!
 
Daarnaast heb je uiteraard gelijk dat e.e.a. afgeleid kan worden uit een datum/tijd veld, echter ook hier zijn dit gegevens die onze Japanse collega's gebruiken en er niet zomaar uit kunnen.
Dat wil nog niet zeggen dat je de aangeleverde gegevens in je eigen systeem hoeft te blijven gebruiken natuurlijk. Zodra je een datum hebt, weet je de rest ook. Lekker laten staan in Excel dus die maand- en weekvelden, en weggooien uit je Access tabel :).
 
Nu update de update query het veld naar 0. En dat moet dus niet want deze 0 is afkomstig van niet aanwezige data.

Doordat "oude" data vanwege de grootte van het bestand worden geschoond in de Excel file mag niet alles zomaar worden ge-update. Dan raken we data kwijt.

Dus eigenlijk wil ik de check toch bij de import van de data tijdens mijn update query.
 
Ik snap je niet; als je een update query draait en je wilt niet alle records bijwerken, dan moet je die er uit filteren. Maar wat is daar het probleem dan bij?
 
Ik zal het proberen uit te leggen:

Een record bevat o.a. een lotnummer en bijbehorende gegevens. Als die een eerste maal zijn toegevoegd (update query) veranderen die niet meer. Bij deze gegevens horen nog inspectiegegevens, maar die kunnen in de loop der tijd nog veranderen (tot een paar maanden na de eerste entry) omdat niet al het materiaal dat bij 1 lot hoort meteen geinspecteerd wordt.

Ik wil dan dus alleen die veranderde gegevens bijwerken, maar als er (incidenteel) een veld in Excel is gevuld met een error (#N/A) moet het veld niet worden bijgewerkt. Dan ben ik mijn gegevens kwijt.

Ik filter dus al op het feit of de kerngegevens aanwezig zijn en de data verder wel aanwezig zijn (is not null). Eigenlijk moet daar dus een extra filter bij (is not #N/A).

Deze constructie zit in 4 verschillende tabellen.

Ik hoop dat het een beetje duidelijk is.
 
Behalve dat je in je eerste zin waarschijnlijk Toevoegquery bedoelde i.p.v. bijwerkquery zie ik weinig nieuwe informatie. Ik snap al dat je bepaalde gegevens wilt bijwerken, en dat je die koppelt aan een veld (Lotnummer). Maar als je de foutmelding in Excel elimineert (ben je mee bezig :) ) dan ben je dat probleem dus al kwijt. Maar dan nog: je zou eerder minder gegevens hebben dan meer. Wil je de records die nu een foutmelding geven weg filteren, en ben je bang dat je die records straks niet meer ziet omdat de foutmelding weg is, dan zou ik in Excel daar een aparte code gebruiken. Ik gaf zelf een voorbeeldje om bij de foutmelding de cel leeg te laten, maar je kunt daar natuurlijk een specifieke code of melding inzetten. Dus als IFERROR waar is, dan niet "" maar 99999 o.i.d. Dan kun je in Access weer filteren op 9999.
 
Ik ben niet bang dat ik de records niet meer zie in Access maar als er nu een yield getal staat en dat verdwijnt a.g.v. een update omdat in Excel een onzin getal staat dan ben ik dus dat yield getal kwijt.

Dus als ik filter tijdens de update zal dat niet gebeuren. Dit is natuurlijk ook logisch, je wilt geen onzin getallen in je velden. Ik wil alleen getallen updaten als ze ook zinnig zijn (Wie niet :D)

Dus kom ik weer bij mijn eerste post: een WHERE criterium op het veld YIELD om de #N/A gevallen eruit te filteren zou de oplossing kunnen zijn?
 
Daarom moet je filteren op de waarde die je niet wilt bijwerken. En niet op #N/A, want die moet je vervangen door een code die jij herkent als zijnde: niet meenemen.
 
Misschien mis ik hier iets (overkomt me gelukkig wel vaker) maar #N/A herken ik als : niet meenemen.
 
En als je in Excel in een cel bij de functie ISERROR iets neerzet als =IF(ISERROR(VLOOKUP(...));"ERR9999";VLOOKUP(...)) dan heb je alle mogelijke foutmeldingen in Excel afgevangen, en kun je in Access netjes filteren op "ERR9999". Ik geef maar een voorbeeld. Wat is daar zo lastig aan?
 
Hahaha, ik denk dat we een beetje langs elkaar op praten.

Wat jij suggereert is ook niet lastig, kan ik zo maken.

Maar in de bestaande file staat al #N/A, dus waarom zou ik daar niet op filteren? Heb je daar een bepaalde reden voor?
 
Omdat een foutmelding in Excel blijkbaar niet te filteren is in Access. Verbaast me niks want het hekje (#) is de aanduiding voor een datum. Dus je wilt filteren op een beschermd teken. Lukt niet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan