Opzoeken waarde met meerde criteria?

Status
Niet open voor verdere reacties.

SimonDonders

Nieuwe gebruiker
Lid geworden
16 dec 2014
Berichten
3
Beste iedereen,

Een vraag van een totalen nieuweling op acces gebied.

Voor een school opdracht (HBO logisitiek 1ste jaars) hebben wij de opdracht een bedrijf op te zetten welke lego torens verkoopt.
Deze torens bestaan uit grondstoffen 11 soorten ( lego blokjes) welke ingekocht moeten worden.
Dit inkopen kan gebeuren bij 4 verschillende leveranciers met elk hun eigen prijs.

Nu heb ik in excel de benodigde schema's gemaakt maar zou ik graag het stapje verder zetten en een formulier in acces opzetten welke een inkoop order produceert en deze in een bestand zet zodat naderhand te zien is hoe ons bedrijf het heeft gedaan.

Stap 1 om het formulier op te zetten met de voor mij benodigde invulmogelijkheden en het feit dat deze terug komt in een bestand is gelukt.
Wat ik nu graag zou realiseren is nadat de order is aangemaakt en dus de gekozen leverancier bekent is hij de totalen inkoopwaarde van de orde uitrekent.

Wat ik heb gedaan is:

een tabel aangemaakt met de gegevens van de grondstoffen zoals hieronder

Grondstof a leverancier 1 3,00
Grondstof b leverancier 1 2,00
Grondstof c leverancier 1 1,00
Grondstof d leverancier 1 2,00
Grondstof e leverancier 1 3,00

Grondstof a leverancier 2 1,00
Grondstof b leverancier 2 2,00
Grondstof c leverancier 2 3,00
Grondstof d leverancier 2 1,00
Grondstof e leverancier 2 1,00

etc

Ik heb ervoor gezorgd dat de leverancier welke is gekozen in het forumulier terug komt in het bestand waar hij de orders optelt zodat deze als criteria kan dienen.

Nu krijg ik het alleen niet voor elkaar om hierin verwerkt te krijgen dat access de prijs van grondstof A voor mij opzoekt in de bovenste tabel met de criteria's ( leverancier en grondstof naam) en deze voor mij wegzet in onderstaande tabel.

Om de totalen inkoopwaarde van een orde te kunnen bereken heb ik simpel een bereken veld gepakt en de expressie ( formule) grondstof aantal* prijs + etc gedaan

wat er dus concreet terug moet komen in het bestand zijn


Datum Leverancier grondstof aantal a prijs grondstof a gekozen leverancier etc totalen inkoopwaarde
gelukt gelukt gelukt ? gelukt


Ik hoop dat jullie me de goede richting op kunnen wijzen.
Excuses voor de zinsopbouw en/of spelfouten dit is helaas niet mijn sterkste punt.

Met vriendelijke groet,
Simon Donders
 
Allereerst welkom bij HelpMij! Je hebt natuurlijk, als nieuw lid, eerst de huisregels doorgeworsteld, en bent deze over hulp bij huiswerk ook vast tegengekomen. Het komt er op neer, dat we bij schoolopdrachten hooguit sturen en aanwijzingen geven, maar dat je het belangrijkste werk toch zelf moet doen. Met dat in het achterhoofd wil ik je uiteraard wel een beetje de goede kant op sturen.

En dat begint dan met het gebruik van de juiste termen, want nu heb ik je vraag toch een paar keer over moeten lezen voordat ik enigszins snap wat je nu precies vraagt :).

... maar zou ik graag het stapje verder zetten en een formulier in acces opzetten welke een inkoop order produceert en deze in een bestand zet
1. Access gebruikt één bestand, met afhankelijk van de versie een .mdb of een accdb extensie. We noemen dat ook wel een database, maar dat is eigenlijk een term die niet klopt omdat er veel meer inzit dan alleen de database. Die bestaat uit tabellen en queries. Daarnaast vind je nog formulieren en rapporten (en modules, maar daar hebben we het voorlopig niet over) in zo'n bestand. Dus als je het over 'bestand' hebt, dan heb je het (na dus een paar keer nalezen) over een 'Tabel'. En in tabellen sla je de gegevens op. Tabellen kunnen een relatie hebben, en die leg je vast in het venster Relaties.
2. Formulieren produceren helemaal niets; dat doet de gebruiker. Formulieren zijn hooguit een laag die bovenop een tabel, of een query (bestaande uit meerdere tabellen) ligt en waarin je records toevoegt of muteert.

Stap 1 om het formulier op te zetten met de voor mij benodigde invulmogelijkheden en het feit dat deze terug komt in een bestand is gelukt. Wat ik nu graag zou realiseren is nadat de order is aangemaakt en dus de gekozen leverancier bekent is hij de totalen inkoopwaarde van de orde uitrekent.
Daar hebben we het ‘bestand’ weer . Maar ook al weten we nu dat je een tabel bedoelt, komen we toch niet veel verder. Wat je (vermoed ik) wilt hebben, is een rapport waarin je alle ordergegevens wilt zien, inclusief de totalen. En dat is niet zo lastig, want zo’n rapport kun je gewoon met de wizard maken. Mits uiteraard de tabellen goed zijn (zie verderop). Je hoeft namelijk de totale inkoopwaarde niet uit te rekenen of op te slaan.

Ik heb ervoor gezorgd dat de leverancier welke is gekozen in het forumulier terug komt in het bestand waar hij de orders optelt zodat deze als criteria kan dienen.
Een criterium is een filtering die je in een query, formulier of rapport gebruikt om de recordset te beperken tot de gekozen selectie. Wat je bedoelt, heeft weer met je rapport te maken waarin je wilt groeperen op leverancier. En eventueel filteren als je één factuur of order voor een bepaalde leverancier wilt afdrukken of mailen. Rapporten dus.

Nu krijg ik het alleen niet voor elkaar om hierin verwerkt te krijgen dat access de prijs van grondstof A voor mij opzoekt in de bovenste tabel met de criteria's ( leverancier en grondstof naam) en deze voor mij wegzet in onderstaande tabel.
En hier raak je me toch weer kwijt, want hierboven heb je net verklaard dat het je wél gelukt is om het formulier werkend te maken!

Om de totalen inkoopwaarde van een orde te kunnen bereken heb ik simpel een bereken veld gepakt en de expressie ( formule) grondstof aantal* prijs + etc gedaan
Doe jezelf een plezier, en gooi dat berekende veld gelijk weg. In een goed opgezette database heb je geen berekende velden nodig. Eén van de hoofdwetten van een goede database is, dat je geen gegevens opslaat die afgeleid (of berekend) kunnen worden uit andere gegevens. En dat is nu exact wat jij aan het doen bent. Berekeningen maak je in queries of in rapporten.

Om je écht te kunnen helpen, moeten we de database erbij hebben, want alles staat of valt bij een goed ontwerp. En als ik het zo lees, ben je veel te vroeg begonnen met het bouwen van formulieren. En dat doe je eigenlijk pas als laatste, als de basis van de db goed is. En dat zijn dus je tabellen. Die tabellen horen alleen je gegevens te bevatten, en geen berekeningen. Opzoeklijsten in tabellen? Ook niet doen. Hooguit voor lijsten die je zelf typt, zoals een veld [Aanhef] of [Geslacht], waar je geen tabel voor hoeft te gebruiken omdat er maar een paar opties te bedenken zijn.
Zijn de brontabellen gemaakt, en hebben ze de juiste sleutelvelden (mis ik ook in jouw voorbeelden) dan ga je de tabellen aan elkaar koppelen. Daarbij gebruik je het sleutelveld uit je brontabel dat je koppelt aan het gerelateerde veld in de doeltabel. Zo gebruik je het veld ArtikelID uit de tabel Artikelen om te koppelen aan het veld ArtikelID in de tabel [Leverancier_Levert], waar je ook een veld [LeverancierID] hebt dat je weer koppelt aan de tabel [Leveranciers].

Kortom: op basis van je db kunnen we pas écht wat nuttigs zeggen!
 
Beste Octafish,

Allereerst bedankt voor het uitgebreide antwoord ik snap dat mijn vraagstelling eigenlijk meer vragen oproept dan beantwoord.

Op de volgende link is het bestand te vinden wat ik tot nu toe heb gemaakt:
http://www.filedropper.com/dbblokko

Om een korte toelichting te geven op mijn eerste vraag.

Met bestand bedoel ik inderdaad een rapport op het moment heb ik dit bereikt door van het forumulier "Inkoop" een gesplits formulier te maken.
Dit formulier zet zijn nieuwe record weg in de tabel "inkoop" alleen in deze tabel wil ik de totalen inkoop waarde vermelden.

Wat ik tot nu toe heb geprobeerd om dit te bereiken:

Per grondstof een tabel aangemaken met leverancier als sleutelveld
een tabel "prijs' met alle grondstoffen en prijzen met als sleutelveld de grondstof

Hierna heb ik op verschillende manieren in het relatieschema (het veld "leverancier" uit de tabel "inkoop") proberen te koppelen of (aan de grondstoffen tabel veld "leverancier") of (aan de tabel "prijs" )

In het originele excel bestand heb ik dit opgelost door verticaal zoeken te gebruiken in de velden "prijs" en deze te linken aan de lossen grondstof tabellen.

Als ik u antwoord zo lees denk ik dat mijn grootste fout inderdaad de structuur van de verschillende tabellen zijn.
Nu had ik niet de huisregel gevonden omtrent huiswerk maar gaf ik wel aan te hopen de goede richting in gestuurd te worden, anders gezegd ik hoef geen pasklaar antwoord.

Ik hoop dat dit het een en ander verduidelijkt
Alvast bedankt ,
Simon Donders
 
Per grondstof een tabel aangemaken met leverancier als sleutelveld
een tabel "prijs' met alle grondstoffen en prijzen met als sleutelveld de grondstof
Heel slecht idee. Entiteiten (lees: objecten) die hetzelfde zijn, zet je in één tabel. Alle tabellen "Bar...", "Bock..." en "Grondplaat" bevatten dezelfde items, en dat hoort dus één tabel te zijn, geen 11 tabellen.
Verder bevat de tabel [Inkoop] veldnamen als: F1 t/m F10, en dat is natuurlijk ook niet handig. Waarschijnlijk (want er zit ook een leeg record in) verkeerd vanuit Excel geplukt. Is nog wel te verhelpen.
Daarnaast ontbreekt een tabel [Leveranciers] met de algemene leveranciers gegevens, en een sleutelveld LeverancierID dat je later nodig hebt.

Je tabellenstructuur zou er dus zo uit moeten zien (namen mag je uiteraard zelf verzinnen)

Code:
[tblArtikelen]
ArtikelID (sleutelveld)
Artikelnaam
... (wat je nog meer wilt invullen)

Code:
[tblLeveranciers]
LeverancierID (sleutelveld)
Leveranciernaam
Adres
... (wat je nog meer wilt invullen)

Code:
[tblArtikel_Leverancier]
Artikel_LeverancierID (sleutelveld)
LeverancierID (verwijzing naar tblLeverancier)
ArtikelID (verwijzing naar tblArtikel)
Prijs
Voorraad
... (wat je nog meer wilt invullen)

Voor je order sla je dan het veld [Artikel_LeverancierID] op want op basis daarvan bepaal je de prijs. Je formulier filter je op basis van Leverancier, dus als je een leverancier hebt geselecteerd kun je de keuzelijst cboArtikelen (die weer is gebaseerd op de tabel [tblArtikel_Leverancier]) filteren op LeverancierID.

Kortom: je hebt nog wat werk voor de boeg! Ben benieuwd naar de volgende versie :)
 
Laatst bewerkt:
Beste,

Ik ben overnieuw begonnen met de tips die u heeft gegeven.

Hierbij het resultaat:
http://www.filedropper.com/blokkodb2
http://www.filedropper.com/blokkoacces123
Ik heb er voor gekozen de tabellen te linken aan een excel bestandje zodat deze makkelijker te bewerken zijn.
De koppeling verwijst naar de C root directory

De verwijzingen naar de tabellen om ArtikelID en leverancierID op te zoeken is gelukt maar snap niet geheel wat u bedoelt met:

Voor je order sla je dan het veld [Artikel_LeverancierID] op want op basis daarvan bepaal je de prijs. Je formulier filter je op basis van Leverancier, dus als je een leverancier hebt geselecteerd kun je de keuzelijst cboArtikelen (die weer is gebaseerd op de tabel [tblArtikel_Leverancier]) filteren op LeverancierID

Begrijp ik het goed dat in het formulier "inkoop orders" er een achter de leverancier titel een filter moet komen die kijkt in de tabel "Artikel_leverancier" en de filtert op de gekozen leverancier.
Hoe word dan de relatie tussen ArtikelID_LeverancierID gelegt met de ingevoerde waardes voor de grondstoffen?

Weer een onduidelijke vraag van mijn kant maar ik hoop dat u mij weer in de goede richting kunt zetten.
Alvast bedankt voor al u moeite
Met vriendelijke groet,
Simon Donders
 
Je gebruikt filedropper om bestanden te delen, maar eerlijk gezegd vind ik dat een behoorlijk vervelende site. Niet alleen een hoop geneuzel op de pagina, je moet bij het downloaden ook elke keer een nieuwe code intypen. Ik raad je wikisend.com aan, die dat probleem niet heeft. En er zijn vast nog anderen die ook minder irritant zijn :)
Door de tabellen te koppelen aan je Excel bestand, kun je geen goede relaties leggen tussen de tabellen. Dat hoeft geen probleem te zijn, maar je kunt nu dus geen Referentiële integriteit afdwingen en dat is nu juist zo mooi van een database. Het bewerken van data in Access is, mits het systeem goed is opgezet, in mijn ogen ook een heel stuk vriendelijker dan muteren in Excel. Maar dat is aan jou :).
Begrijp ik het goed dat in het formulier "inkoop orders" er een achter de leverancier titel een filter moet komen die kijkt in de tabel "Artikel_leverancier" en de filtert op de gekozen leverancier.
Niet helemaal. Op een formulier werk je met keuzelijsten, en eventueel subformulieren. Zo zal een order bij een leverancier doorgaans meerdere artikelen betreffen, en dat regel je dan met een hoofdformulier met daarop de leverancier en de overige orderdetails zoals datum etc, en een subformulier waarop de orderdetails staan zoals de artikelen. Het is logisch dat je op dat subformulier alleen artikelen ziet die je kunt betrekken bij de op het hoofdformulier gekozen leverancier. Dus in het subformulier heb je een keuzelijst voor de artikelen, en die keuzelijst wordt gefilterd door de gekozen leverancier uit het hoofd formulier.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan