Access relatie twee tabellen

Status
Niet open voor verdere reacties.

lnwortel

Gebruiker
Lid geworden
22 okt 2002
Berichten
45
Ik heb 2 tabellen waarbij ik een koppeling wil maken om waarden uit de ene tabel toe te voegen. Concreet:
Tbl Productie bevat de volgende velden en gegevens:
Sublgr Subtype Legs Blkhrs Dep
A00 733 10 20 8
A00 734 20 30 15

Tbl Costcat bevat de volgende velden en gegevens:
Costcat Costdriver
11A Blkhrs
20B Legs
20C Dep

Bedoeling is dat in een querie bij bijv.
Sublgr Subtype Costcat Quant
A00 733 11A 20
A00 734 11A 30
A00 733 20B 10
A00 734 20B 20 enz komt te staan
Ik heb dit nu steeds opgelost door voor iedere costcat een aparte querie te maken welke dan een specifieke waarde ophaalt. Maar het zou toch ook dynamischer kunnen?
Ik kom er niet uit.
Misschien iemand die een oplossing weet (evt via VB)?
Alvast bedankt
Luigi:rolleyes:
 
Bartuls zei:
Moet je even in deze cursus kijken: http://tp.hen.nl/softwijs/Access2000-B.pdf
In hoofdstukken 9 en 10 wordt uitgelegd hoe je dit met tabellen en queries kunt oplossen.
In dit document wordt een gewone relatie beschreven.
Ik zoek eigenlijk een dynamische relatie waarbij ik obv een tekst veld een koppeling wil leggen met een numerieke veldnaam.
Als de waarde in tabel costcat = blkhrs, dan moet de waarde opgehaald worden uit de kolom blkhrs uit de Prod tabel.
Ik heb al van alles geprobeerd, maar tot nu toe geen oplossing
Maar in ieder geval bedankt voor de moeite
 
Je hebt het over tabellen, niet over formulieren.
Ik ga je dus een oplossing geven voor tabellen. Als je het op een formulier wilt doen is de oplossing een heel andere.....

Wat jij beschrijft zul je moeten doen met een lookup.
Dat doe je door in ontwerpmodus van de betreffende tabel in het veld te gaan staan. Kies het tabje Opzoeken en kies het besturingselement dat je wilt gebruiken (meestal combobox) en vul de overige rubrieken in.

Bovenstaande vereist wel een genormaliseerd datamodel. In hoofdstuk 13 van de cursus die ik al eerder noemde wordt daar meer over uitgelegd.

Het zoeken op basis van een tekst zoals jij dat wilt is niet verstandig. Je moet aan je tabel CostCat een betekenisloze sleutel toevoegen (veld type autonummer). Dit veld gebruik je dan in je andere tabellen om te verwijzen.

Als je er niet uitkomt post dan je mdb even. Het is een stuk eenvoudiger om de oplossing daar in te zetten.
 
Laatst bewerkt:
Bartuls zei:
Je hebt het over tabellen, niet over formulieren.
Ik ga je dus een oplossing geven voor tabellen. Als je het op een formulier wilt doen is de oplossing een heel andere.....

Wat jij beschrijft zul je moeten doen met een lookup.
Dat doe je door in ontwerpmodus van de betreffende tabel in het veld te gaan staan. Kies het tabje Opzoeken en kies het besturingselement dat je wilt gebruiken (meestal combobox) en vul de overige rubrieken in.

Bovenstaande vereist wel een genormaliseerd datamodel. In hoofdstuk 13 van de cursus die ik al eerder noemde wordt daar meer over uitgelegd.

Het zoeken op basis van een tekst zoals jij dat wilt is niet verstandig. Je moet aan je tabel CostCat een betekenisloze sleutel toevoegen (veld type autonummer). Dit veld gebruik je dan in je andere tabellen om te verwijzen.

Als je er niet uitkomt post dan je mdb even. Het is een stuk eenvoudiger om de oplossing daar in te zetten.

Ik heb eea bekeken zoals je voorstelde, maar ik kom er toch niet echt uit.
Zoals ik jouw voorstel begreep kan ik nu een keuze maken, maar obv het tekstveld zou ik willen dat de juiste NUM waarde uit betreffende kolom gehaald wordt
Hoe kan ik de MDB naar je toe sturen (ik kan geen mailadres vinden)?
 
Op dit forum is het niet de bedoeling dat je iets naar iemand mailt. Vragen en antwoorden zijn voor iedereen bedoeld. Ook iemand anders kan iets leren van jou vraag en het antwoord wat erop gegeven wordt.
Je kunt je mdb zippen en posten op het forum.
Hiervoor is onder het veld waar je je reply in tikt een sectie Overige Opties.
Hier vindt je de knop Beheer Bijlagen in het vakje Bestanden Toevoegen.
 
Bartuls zei:
Op dit forum is het niet de bedoeling dat je iets naar iemand mailt. Vragen en antwoorden zijn voor iedereen bedoeld. Ook iemand anders kan iets leren van jou vraag en het antwoord wat erop gegeven wordt.
Je kunt je mdb zippen en posten op het forum.
Hiervoor is onder het veld waar je je reply in tikt een sectie Overige Opties.
Hier vindt je de knop Beheer Bijlagen in het vakje Bestanden Toevoegen.

Het is nog fraaier dan ik dacht.
Bijgesloten mijn MDB. Ik hoop dat je er iets me kunt
In ieder geval bedankt voor de moeite
 

Bijlagen

De query die jij in je mdb hebt staan is ook de enige die ik met de gegevens die je verstrekt hebt kan verzinnen.
Wat je als resultaat van de query krijgt zijn alle mogelijke combinaties uit de twee tabellen.
In jou geval betekent dat 4 records in tabel CostStat maal 4 records in tabel prod geeft 16 records in je query.
Ik heb de indruk dat dat niet is wat je nodig hebt, maar kan ik kan uit je omschrijvingen ook niet opmaken wat je wel nodig hebt.
Wel zie ik aan je tabelvulling dat je je datamodel niet genormaliseerd hebt. Dat gaat later in ieder geval problemen opleveren. Wat normaliseren is kun je in het document dat ik in mijn eerste post genoemd heb vinden.

Kun je misschien eens zonder technische termen (dus zonder woorden als tabel, query, veld etc.) uitleggen wat je wilt maken in access?
Ik heb namelijk het idee dat je je database eerst goed moet ontwerpen. Dat moet je doen op basis van de functionele specificaties die je moet maken.
Als je nu de functionele specificaties kunt uitleggen dan kan ik je misschien helpen met een goed database ontwerp.
 
ProdCost

Ik zal proberen uit te leggen wat de bedoeling is.
De mdb is een klein uittreksel van een complexere materie.
Aan de ene kant ontvang in een bestand met productie getallen welke ik laad in de tabel Prod. Hierin staan verschillende kwantiteiten zoals LEG-BLKHRS-DEP AMS etc.
Aan de andere kant heb ik een tabel waarin staat COSTCAT en COSTDRIVER
Feitelijk is er nog een 3e tabel met tarieven (deze heb ik nog niet klaar)
Obv de costcat-costdriver moet er een productie-waarde aan toegevoegd worden.
Dus igv de costdriver is blkhrs, dan moet er een veld quantity gevuld worden met de waarde uit de tabel PROD.
Dit veld quantity wordt later weer gebruikt om kosten te berekenen, door de waarde van quantity te vermenigvuldigen met een tarief per costcat / per sublgr / subtype
Het tarief is dus gebaseerd op een eenheid (in dit geval blkhr)
Op dit moment heb ik wel 80 verschillende kwantiteiten en 5000 verschillende tarieven.
Ik heb nu per costcat een querie gedefinieerd waarbij het veld quantity wordt gevuld.
Echter, volgens mij moet dit in 1 query kunnen.
Hopelijk snap je de bedoeling al is het altijd lastig om dit soort specifieke requirements kort samen te vatten. Wellicht weet je nu een oplossing?
Thanks
 
ProdCost

Ik heb in de querie een extra veld gedefinieerd Quantity welke nu obv IIF statements gevuld wordt. Probleem is achter dat ik meer dan 30 verschillende costdrivers heb, waardoor dit niet meer te vangen is in een IIF statement (max 9 nestingen toegestaan)
Ik zal de aangepaste versie extra bijsluiten
Alvast bedankt, hoop doet leven
 

Bijlagen

OK, nu snap ik je probleem.

Je probleem wordt veroorzaakt doordat je je datamodel niet genormaliseerd hebt.
Eigenlijk geef je zelf al aan waar je probleem zit: je hebt zo'n 80 quantiteiten en het wordt een hoop werk en onoverzichtelijk als je die allemaal als aparte velden in je Prod tabel opneemt.
De oplossing ligt natuurlijk voor de hand: zet ze niet als aparte velden in je prod tabel. Dat bereik je dus door je datamodel te normaliseren.

Met de gegevens die je verstrekt hebt zul je dit als volgt moeten doen:

Tabel CostDriver
ID (Autonummer)
fldDriver (Text)

Tabel CostCat
ID (Autonummer)
fldCostCat (Text)
IDCostDriver (Numeriek, lange integer)
fldTarkey (Text)

Tabel Prod
ID (Autonummer)
fldSublgr (Text)
fldSubType (Text)
IDCostdriver (Numeriek, lange integer)
fldQuantity (Numeriek, lange integer)

Dit betekent wel dat je het vullen van je Prod tabel zult moeten aanpassen.
Met bovenstaande tabel structuur kun je wel met simpele queries bereiken wat je wilt.

Over normaliseren kun je in dit document meer informatie vinden: http://tp.hen.nl/softwijs/Access2000-B.pdf
 
Bartuls zei:
OK, nu snap ik je probleem.

Je probleem wordt veroorzaakt doordat je je datamodel niet genormaliseerd hebt.
Eigenlijk geef je zelf al aan waar je probleem zit: je hebt zo'n 80 quantiteiten en het wordt een hoop werk en onoverzichtelijk als je die allemaal als aparte velden in je Prod tabel opneemt.
De oplossing ligt natuurlijk voor de hand: zet ze niet als aparte velden in je prod tabel. Dat bereik je dus door je datamodel te normaliseren.

Met de gegevens die je verstrekt hebt zul je dit als volgt moeten doen:

Tabel CostDriver
ID (Autonummer)
fldDriver (Text)

Tabel CostCat
ID (Autonummer)
fldCostCat (Text)
IDCostDriver (Numeriek, lange integer)
fldTarkey (Text)

Tabel Prod
ID (Autonummer)
fldSublgr (Text)
fldSubType (Text)
IDCostdriver (Numeriek, lange integer)
fldQuantity (Numeriek, lange integer)

Dit betekent wel dat je het vullen van je Prod tabel zult moeten aanpassen.
Met bovenstaande tabel structuur kun je wel met simpele queries bereiken wat je wilt.

Over normaliseren kun je in dit document meer informatie vinden: http://tp.hen.nl/softwijs/Access2000-B.pdf
 
De bedoeling is duidelijk, ik zal komende dagen eens kijken wat ik hiermee kan realiseren
Mag ik je heel erg bedanken voor je advies en moeite en als het me gelukt is dan laat ik het nog even weten:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan