Kopieer 4 velden naar alle records

Status
Niet open voor verdere reacties.

CubaLibre

Gebruiker
Lid geworden
4 mei 2020
Berichten
9
Hallo allemaal,

Ik zoek een manier om in een tabel het ID met nr 1 te kopiëren naar alle andere records in dat tabel.

Ik heb een database die eerst een excelblad helemaal importeert en daarna uit een ander excelblad een aantal velden importeert met gegevens die voor alle records gelijk zijn (van 1 tot max 50 records). Die laatste moeten eigenlijk in alle records komen te staan. Kan dit bij importeren of moet het een query worden.

Het leek zo simpel maar na lange avond krijg ik dit nog steeds niet voor elkaar en google help me ook niet voldoende hiermee helaas.

Alvast bedankt,
Ed
 
Het leek zo simpel maar na lange avond krijg ik dit nog steeds niet voor elkaar en google help me ook niet voldoende hiermee helaas.
Daarvoor heb je nu eenmaal HelpMij :). Maar ik snap je vraag niet, wat bedoel je hier mee?

Ik zoek een manier om in een tabel het ID met nr 1 te kopiëren naar alle andere records in dat tabel
ID zou een sleutelveld kunnen/moeten zijn, en dan is het veld uniek, en kun je het niet kopiëren. Maar als je uit een andere tabel (B) een waarde wilt kopiëren naar alle records in tabel A, dan kan dat simpel met een bijwerkquery. Als het om één waarde gaat, hoef je daar die andere tabel niet eens voor te gebruiken, maar kun je de waarde net zo goed intypen. Bij meerdere waarden kan het handig zijn om tabel B en tabel A in de query op te nemen. Principe blijft gelijk: een Bijwerkquery. Maar dan met een veldverwijzing, en geen waarde.
 
Hoi OctaFish,
Ik heb een tabel waar ruim 30 velden in zitten, de eerste 20 import Access uit een Excelbestand in een specifiek Excelblad en deze zijn per ID (records) verschillend. (het zijn 1 tot maximaal 50 records, en mijn ID naam = vel) (dit zijn artikelen en is niet in een relatie met elkaar te brengen omdat er geen relatie is waar ik het vandaan haal.

De andere 10 importeer ik uit hetzelfde excel bestand maar uit een ander excelblad en dit zijn 10 losse cellen die geïmporteerd worden. De losse cellen zijn order gegevens en zijn voor alle records gelijk. Deze worden nu alleen in ID (vel) 1 geïmporteerd maar zou ik eigenlijk via een updatequery over alle records gelijk willen trekken. In filemaker noemde ze dit globale velden volgens mij.

Met een update query krijg ik wel voor elkaar dat alle gegevens verandert worden maar die gegevens moet je dan met de hand invoeren. Ik zal eigenlijk willen dat de update query zijn waarde uit ID (vel) 1 haalt en dan alle records (max 50) verandert of er moet een andere betere manier zijn via VBA.
Hopelijk is het zo duidelijk, ik dacht dat het niet zo lastig zal zijn maar ik kom er niet uit.

Bijvoorbaat dank,
Ed
 
Via VBA gaat het zeker niet beter of sneller, en de vraag blijft dan nog steeds staan: waarom zou je het überhaupt willen? Je hebt blijkbaar een blok records (aparte rijen (max. 50) in je Excel neem ik aan) die je importeert in Access. In Excel heb je daarvan op een ánder tabblad nóg eens 10 velden staan, die in essentie dus gelinkt zijn aan die 50 records. Maar om een of andere reden heb je ervoor gekozen om in Excel die gegevens niet bij de artikelen te zetten (wat makkelijk kan, en de meeste Excel gebruikers doen dat ook), maar om ze éénmalig in een rij te zetten. En nu wil je die aanvullende gegevens ook in Access hebben.

Wat mij een beetje verbaast, is dat je de nadelen van Excel (lastig om genormaliseerd te werken) wilt overhalen naar Access! Terwijl je in Excel nu dus een oplossing hebt die (enigszins) genormaliseerd is, want je hebt de herhalende gegevens niet bij je 50 artikelen gezet (waarvoor hulde ;)). Maar nu wil je dus die normalisering in Access vernietigen? Terwijl Access juist optimaal werkt met genormaliseerde gegevens! Sterker nog: als je een vraag had gesteld in de zin van: "ik heb een tabel geïmporteerd waarvan 30 velden uniek zijn, maar waar 10 velden bij zitten met identieke, herhalende gegevens. Hoe haal ik die herhalende gegevens er uit?" dan had je heel snel een goede oplossing gehad. Maar jij wilt dus de omgekeerde weg bewandelen: van genormaliseerde tabellen naar dataredundantie!

Mijn advies: niet doen, afstappen van deze doelloze weg. Importeer dus het tweede tabblad met de 10 velden als een aparte tabel in Access, neem het ID veld uit tabblad 1 daarin ook mee (als dat niet één van de 10 velden is) en koppel de twee tabellen in Access aan elkaar. In een query kun je dat de 40 velden samenvoegen. Maar dus nooit dataredundantie introduceren in tabellen als dat niet nodig is. Er zijn overigens wel redenen om dat wél te doen, zoals velden met veranderlijke gegevens, zoals prijzen. Maar gegevens die niet veranderen, en herhalend voorkomen in je tabel, moet je uithalen en overbrengen naar een aparte, gekoppelde tabel.
 
Beste OctaFisch,

Het zal toch moeten gebeuren anders gaat het niet goed werken, ga zelf nog wel even aanmodderen :)

Thanks in ieder geval.
Ed
 
Het zal toch moeten gebeuren anders gaat het niet goed werken
Het werkt niet goed als je het wél doet :). Er gaat niks boven een keurige, goed genormaliseerde database. Die werkt het beste. Broddelwerk mag uiteraard ook, maar ga niet beweren dat dát het beste werkt :D. En die oplossing heb ik al in bericht #2 gegeven. Met een Bijwerkquery dus. Daarbij kun je de waarden typen, of uit je tabel halen. Maar ik zou toch echt naar het ontwerp kijken, want daar zit iets goed fout.
 
Thanks,

Ik ga verder kijken hoe ik die bijwerkquery voor elkaar krijg, was er al mee bezig geweest maar krijg hem niet zover dat die waarde uit me tabel haalt.

Maar mijn ontwerp is prima, het klinkt alsof je hem bekeken heb. Ik heb wel een netgear model maar denk niet dat je het ontwerp gezien heb.

Ed
 
In een correcte database komt geen dataredundantie voor. Bij jou zitten er minstens 4 redundante velden in, dus dan is je ontwerp weliswaar bruikbaar, maar dat is Excel in dat geval ook (ook niet genormaliseerde tabellen namelijk). Ik heb óók een netgear model, maar in mijn geval is dat een router, geen database :).

Wat betreft die bijwerkquery: je hebt, neem ik aan, je extra gegevens in een aparte brontabel staan, en die bestaat dan ofwel uit één record, ofwel uit meerdere records die je filtert op één waarde. Die brontabel zet je als Cartesisch product in de query met de doeltabel die je bij wilt werken. vervolgens werk je alle velden in de doeltabel bij met de velden uit de brontabel.
 
Creëer een extra tabel Orders waarnaar je alle 10 de orderwaarden in aparte velden in één record zet. Geef die tabel een autonumber veld, en haal na import van de 10 velden het nieuwe orderID op.
Maak in je eerste tabel een veld OrderID en update dit na import met het nieuwe orderID. Dan kan je in een query de 2 tabellen via orderID koppelen en ben je van de data redundantie af.
 
@noella: Ik krijg de indruk dat TS niet op dat soort tips zit te wachten, want cubalibre vindt dat het ontwerp geen redundantie heeft :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan