3 tabellen, 2 relaties en toch krijg ik het niet voor elkaar! HELP

Status
Niet open voor verdere reacties.
Mannen, ik ga wel even wat veranderen en zal kijken of ik met wat beters kan komen. Ondanks dat mijn basiskennis m.b.t. relaties niet goed zal zijn en het inderdaad geen rocket science is. Blijf ik het nog steeds een lastig onderdeel vinden net als vele anderen dat is ook een van de redenen waarom veel eenvoudige dingen in excel worden gedaan die mooier en makkelijker kunnen in access maar mensen willen hun vingers niet branden.

Anyway ik blijf het proberen ondanks dat ik 100x over de afgelopen jaren tegen het zelfde probleem aanloop maar dat zal aan mijn leercurve liggen maar wanneer er iemand is die mij dit haar fijn uit kan leggen zodat ik het begrijp heb ik er wel 100 euro voor over want hier wordt ik ook helemaal flauw van. De een zegt dit de ander zegt dat de voorbeelden die ik van internet haal ook niet voldoende zijn want het voorbeeld die ik heb geplaatst is aangepast naar mijn situatie. Alleen was dit dan een wijngroothandel.

Zal er ondanks de beste bedoelingen vanuit jullie nog altijd moeite mee hebben omdat ik dingen in een voorbeeld begrijp maar zodra ik zelf iets moet fabriceren dan gaat het mis.

Ik zal weer wat gaan prutsen ;-)
 
@gast0224: Orders, bestellingen, gaan we het nu over semantiek hebben? Ik snap eerlijk gezegd niet waarom je zo aan het mauwen blijft; ik heb al een paar keer gezegd dat ik het in de basis met je eens ben. TS heeft tabellen gemaakt/gekregen waarin alles bij elkaar staat. Hoe die tabellen heten, is zo volkomen ondergeschikt aan zijn probleem dat ik daar eigenlijk geen woord meer over kwijt wil. Klanten koppel je aan Orders/Bestellingen, Produkten koppel je aan OrderRegels/BestelRegels, en die laatste koppel je aan de Orders. Zo heb je een keten waarin je Klanten Uniek zijn in Klanten, Orders uniek in Orders en Producten in Producten. En stop nu met het gezeur over naampjes, want daar heeft TS ook niets aan.
 
Onderstaand zijn de velden die ik binnen kan krijgen vanuit de 2 .txt bestanden laten we de namen even weg. Vanuit hier ik deze proberen op te splitsen in een tbl_klanten, tbl_orders, tbl_orderregels. De tbl_producten hoeft niet want deze bestaat reeds. Zodra ik hier mee klaar binnen zal ik dit in mijn volgende post plaatsen. Op deze manier kunnen anderen er eventueel ook over nadenken :)

customer.txt
Bestelling
Ordernrnaam
Datum
Betalingswijze
Betalingswijze1
Verzendgebied
Gekozen verzendmethode
Totaal gewicht
Afgeprijsd tot
Prijs
BTW
Verzendkosten
Prijs 2
Totaal incl
Naam klant
Bedrijfsnaam
Straat
Plaats
Provincie
Postcode
Land
Telefoonnr
Faxnr
E-mail
Uw mededeling aan ons
Afleveradres:Naam (voor-/achternaam) 2
Bedrijfsnaam 2
Straat 2
Plaats 2
Provincie 2
Postcode 2
Land 2
Telefoonnr 2
maillist_inc
Backorder gezet
Geleverd
Betaald
Nalevering
Envelop klaar gezet
Interne memo
Levertijd

Order_details.txt
Bestelling
Naam
Bestelnummer
Prijs
Gewicht
Opties
Aantal
Subtotaal
BTW1
Afgeprijsd tot
Status
Status1

Voorstel volgt bij mijn volgende post
 
Laatst bewerkt:
Het volgende is er uitgekomen 3 tabellen...

tbl_klant
Naam klant
Bedrijfsnaam
Straat
Plaats
Provincie
Postcode
Land
Telefoonnr
Faxnr
E-mail
Uw mededeling aan ons
Afleveradres:Naam (voor-/achternaam) 2
Bedrijfsnaam 2
Straat 2
Plaats 2
Provincie 2
Postcode 2
Land 2
Telefoonnr 2
maillist_inc

tbl_Order
Bestelling
Datum
Betalingswijze
Betalingswijze1
Verzendgebied
Gekozen verzendmethode
Totaal gewicht
Afgeprijsd tot
Prijs
BTW
Verzendkosten
Prijs 2
Totaal incl

tbl_orderregels
Bestelling
Naam
Bestelnummer
Prijs
Gewicht
Opties
Aantal
Subtotaal
BTW1
Afgeprijsd tot
Status
Status1

tbl_producten (bestond al)
product-ID
naam
bestelnummer

Velden waarvan ik niet precies weet waar ik ze moet plaatsen zijn deze
Backorder gezet (denk in tbl_producten)
Geleverd (denk in tbl_order)
Betaald (denk in tbl_order)
Nalevering (denk in tbl_order)
Envelop klaar gezet (den in tbl_order)
Interne memo (denk in tbl_bestelling) omdat je hier misschien over de gehele bestelling wat wil vertellen bijvoorbeeld de prijs die aangepast moet worden
Levertijd (denk in tbl_bestelling) gezien de producten veelal in 1 keer de deur uit gaan dus er wordt niet in 2 keer verzonden (bijvoorbeeld eerst datgene wat op voorraad is)


RELATIES

klant.klant-id met bestelling (omdat het bestelnummer voor elke bestelling anders is) een-op-veel relatie (1 klant kan bij het goed invoeren van zijn naw gegevens meerdere bestellingen plaatsen)

Product.bestelnummer (omdat elk product een uniek nummer heeft) met orderregels.bestelnummer (ik denk een 1 op 1 relatie gezien per bestelling elk bestelnummer maar 1 keer kan voorkomen... een klant kan het item daarna nog wel een keer aanklikken maar dan wordt het aantal gewoon verhoogd met datgene wat hij in dezelfde bestelling daarvoor al heeft aangegeven)

orderregels.bestelling met order.bestelling (gezien in tbl_orderregels meerdere producten besteld kunnen zijn binnen 1 bestelling) dus een een-op-veel relatie.

Is bovenstaande een goede basis?
 
Dit is niet de structuur van je tabellen. In Order_details heb je [Bestelling} en [Bestelnummer]. Ik zie daar geen artikelnummer terug. [Naam]? Artikelnaam misschien, klantnaam?
Dan customer.txt; dat zijn minstens twee tabellen, dus die moet je splitsen. Ik zou zeggen: probeer de velden (eerst op papier o.i.d.) toe te wijzen aan tabellen waarin je ze kwijt kunt. Daarbij hoef je alleen maar de vraag te stellen: is dit gegeven een deel van een Klant ([Bedrijfsnaam], Adres] etc), een Order/Bestelling ([Ordernaam], [Bestelling], [Besteldatum], [Afleveradres] of van de feitelijke bestelregel (Artikelnummer], [Aantal], [Prijs] etc.
Als je nieuwe klanten binnenkrijgt, zul je ze moeten importeren. Bij bestaande klanten hoeft dat natuurlijk niet. Producten heb je al,dus die hoef je niet te importeren. Het gaat dan dus alleen om de bestelgegevens. Daarbij lijkt het mij niet logisch dat de klant het Bestelnummer bepaalt, tenzij de bestelling van jouw website afkomt waar het bestelnummer dan al uniek is aangemaakt. Is het bestelnummer het nummer van de klant, dan neem je dat natuurlijk wel op in je db, maar dan genereer je een eigen ordernummer.
 
Hallo Octafish,

Had u toevallig mijn laatste post nog gezien hierin heb had ik de customer.txt al opgesplitst zie vorige post....

Order_details[Naam] is hier gelijk aan de artikelnaam (gelijk aan [naam] tbl_producten), het bestelnummer in Order_details is het artikelnummer die je terug vindt in de tbl_producten [bestelnummer]. Hierin zie je dus wel een verschil in veldnamen maar de inhoud van de velden zijn gelijk in het gegeven dat erbij hoort ook. Dit zal ik aanpassen indien nodig.

Ben benieuwd wat u hier van vindt?
 
Die had ik gemist; ik was al bezig met een antwoord. Zal hem eens rustig bestuderen :)
 
Wacht het af volgens mij is ie wel redelijk op orde.... als ik jouw antwoord zo las op mijn vorige post.... :)
 
Er kunnen nog steeds een aantal velden uit; alle berekeningen doe je in queries, dus die kunnen weg. Verder snap ik niet wat een veld [Naam] in Orderregels doet; een Bestelnummer uit Order, en een ProductID uit producten (die ik nog steeds mis) zijn voldoende. En waarom zit Bestelnummer er nog in? Je hebt toch al Bestelling?
 
Ok, de velden met berekeningen wil ik liever zo laten gezien deze ook naar de klant toe zijn gefactureerd en ik denk dat er door afrondingen misschien verschillen kunnen ontstaan. Het veld [naam] in orderregels kan idd weg gezien hier het bestelnummer ook nog staat. Dat bestelling nog in orderregels staat is omdat ik anders niet zou weten waar ik productIDaan moet koppelen (die ik uiteraard nog wel even moet aanmaken). Het bestelnummer uit order is ervoor om aan te geven welke producten de klant heeft besteld (hoe weet je anders welke producten de klant heeft besteld want het product vind je anders niet weer of zie ik dit verkeerd?).
 
Ik begrijp er steeds minder van; je hebt al facturen naar de klant gestuurd? Dan heb je neem ik aan ook alle ordergegevens al ergens in een systeem staan, anders kan je niet factureren. Waarom dezelfde gegevens dan weer opnieuw importeren?
 
Dat gevoel kreeg ik al een beetje.... Zal het proberen uit te leggen mijn webwinkel goedkoopdarten.nl is een shop die gebruik maakt van software die veel dingen automatiseert (waaronder de factuur) je hoeft niets zelf in te vullen. Het enige wat je moet doen is het aanleveren van de producten tabel (prijs, productnummer/bestelnummer, omschrijving van product en dergelijke) layout/vormgeving doe je wel zelf maar dat even ter zijde.

Ik neem u even mee in de stappen van het bestelprocces wanneer een klant een bestelling doet op de website

1. Als iemand besteld op de website, selecteert de klant het product(en) en wanneer de klant klaar is gaat hij naar het winkelmandje (in dit voorbeeld uitgaande van 2 producten) hier zie je een overzicht van de te bestellen zonder verzendkosten en dergelijke (zie afbeelding 1)

Afbeelding 1 - Afrekenen -.png

2. Vervolgens klikt de klant op afrekenen (vanuit afbeelding 1)
en komt in het volgende scherm "totale bestelling" hier staan alle bedragen incl. verzendkosten en btw (zie afbeelding 2)

afbeelding 2 totale bestelling.png

3. Wanneer de klant op veilig bestellen klikt (vanuit afbeelding 2) komt hij in het volgende scherm...
Hier moet de klant aangegeven hoe hij betaald en de NAW gegevens invullen (zie afbeelding 3) ps. een klant kan ook nog een afleveradres invoeren wanneer de klant dit aanvinkt.

afbeelding 3 - vul uw gegevens in -.png

4. Wanneer de klant op volgende klikt (vanuit afbeelding 3)
kom je in "controleer aub uw order" (zie afbeelding 4) hier staan alle gegevens producten, klant informatie, betalingswijze, totaal bedrag en dergelijke.

afbeelding 4 -controleer aub uw order-.png

5. Klant komt in betaalscherm van Ideal maar deze hebben we verder niet nodig.

Samenvattend:
De gegevens die ik dus aangeleverd krijg in mijn mailbox (wanneer er een nieuwe bestelling is geplaatst op de website) bestaat dus uit de 2 txt bestanden die in bovenstaande eerdere post zijn vermeld. Zelf hoef ik dus geen gegevens in access in te voeren omdat alles al is ingevuld (of wel wordt aangeleverd), ik wil via access de gegevens in lezen en dan de order verwerken. Onder verwerken sta ik order opgestuurd, afgerond en dergelijke en uiteraard kijken of een product nog op voorraad is of niet. Ik hoop dat ik met bovenstaande een en ander heb kunnen verduidelijken.... Hoor graag van u.
 
Laatst bewerkt:
Maar heb je geen toegang tot de bestelgegevens die in de webwinkel worden opgeslagen? Ik zou veronderstellen dat de mail alleen een bevestigingsmail is, en dat je gewoon kan inloggen in de database.
 
Inprincipe niet, ik geef de prijzen in van de producten, vul het btw percentage in de webwinkelsoftware, geef aan wat wat de verzendkosten zijn die berekend worden op basis van het gewicht van de bestelling (alle producten bij elkaar opgeteld wordt berekend door programma).

In het verleden heb ik wel gebruik gemaakt van de mogelijkheid om de bestellingen in te zien en kon je een factuur uit draaien etc. echter dit heb ik stopt gezet want de prijs hiervoor was veel te hoog zeker gezien ik de website als hobby er naast heb. Dus wanneer er nu een bestelling geplaatst wordt krijg ik hiervoor een standaard email toegezonden die ik open in mijn mail programma Outlook open en daar moet ik het mee doen. (zie afbeelding 6 voorbeeld hoe het mailtje wordt weergegeven in Outlook inclusief de bijlagen)

afbeelding 6 email outlook voorbeeld.png

Wat ik dus in access wil maken is mijn order verwerksysteem inclusief een klein stukje financiële administratie (hoeveel orders zijn er binnen gekomen, wat is de omzet, wat is het bestelbedrag gemiddeld, uit welke provincie/plaats komen de meeste bestellingen enzovoorts. Dit is echter allemaal latere zorg voor nu moet ik met de gegevens die ik krijg aangeleverd inlezen in access. Misschien dat ik hiermee ook wel verklaar dat het veld bestelling en ook bestelnummer/productnummer in meerdere tabellen voortkomt omdat ik dacht dat dit specifiek is aan de input van de gegevens.

Wat kan ik nu in dit geval het beste doen?

ps. in de afbeelding staat een besteld product zonder productnummer (dit kan tegenwoordig niet meer er is dus altijd een uniek productnummer voor elk product)
 
Je plaatje laat vrij goed zien hoe je tabellen er uit zouden moeten zien, op de tabel Producten na: het bovenste stuk is dan je Bestelling (met uniek bestelnummer), het middenstuk wordt dan je Klantentabel en het stuk Produktgegegens zijn de BestelRegels. Hierin zie je het Bestelnummer niet terug, maar die tabel is op Bestelnummer gekoppeld aan Bestellingen. Als je klanten eenmalig bestellen, en je er verder niks mee wilt, dan kun je volstaan om je te concentreren op de Bestellingen. Zijn het klanten met herhalende bestellingen, dan is de klantentabel weer een stuk interessanter. Zelf zou ik overigens de klantentabel wèl goed inrichten; als die in orde is kun je bijvoorbeeld makkelijk mailings maken etc.
 
Ben even wezen stoeien en heb de volgende relaties gemaakt op basis van referentiële integriteit

relaties nieuw.png

Alleen de database geeft alleen maar meldingen kan geen wijzigingen aanbrengen want tabel heeft een relatie of wanneer je bij tbl_bestelling een klant wilt selecteren geeft hij aan dat de veldeigenschap niet overeenkomt... Ik wordt aardig gestoord van maar we gaan gewoon verder misschien wilt u nog eens een blik werpen in het voorbeeld zoals ik die nu heb gemaakt

Bekijk bijlage test.zip
 
Je probleem is heel simpel, en als je geen keuzelijsten zou gebruiken in tabellen (zie voor de talrijke redenen de Access cursus) zou je heel snel zien waarom het niet gaat zoals je het nu probeert. Ik zal er één uitlichten: het veld Klantnummer. Dat is in [tbl_Klant] een numeriek veld (tevens sleutelveld) en in tabel [Bestellingen] dus ook, anders kan je niet koppelen. Je hebt daar een keuzelijst aan gekoppeld met deze query:
Code:
SELECT tbl_Klant.[Naam klant] FROM tbl_Klant ORDER BY tbl_Klant.[Naam klant];
Die haalt alleen de klant naam op. En dat is een tekstveld, geen numeriek veld. Gebruik alleen keuzelijsten op formulieren, en in je tabellen gewoon tekstvelden; in je tabel wil je toch echt alleen maar zien wat er echt in staat; niet een of andere tekst. (Verklap ik toch de hoofdreden ;) )
 
Een relatie kan alleen maar nummeriek zijn geeft access aan want als ik id_klant koppel met tbl_bestellingen en hier bij naamklant het veldeigenschap op tekst zet dan geeft hij deze melding. Echter in mijn aanlevering van gegevens gaat een klant geen nummer invullen maar zijn echte naam hoe kan ik dan als nog de klant opzoeken? Je kunt met een query natuurlijk wel de gegevens verzamelen maar het is mij nog steeds niet duidelijk hoe ik met mijn bestaande gegeven klant A kan koppelen aan de rest van de gegevens want dit is niet gebasseerd op nummer. Bij het aanmaken van een query kan ik niet zelf de gegevens aanpassen in dit geval het bestelnummer....
 
Laatst bewerkt:
Het voorbeeld dat ik in mijn eerste post heb gezet is gebaseerd op onderstaand voorbeeld

Bekijk bijlage Voorbeeld.zip

Het zal zeker zijn redenen hebben waarom het niet verstandig is om in een tabel gegevens op te laten zoeken op basis van keuzelijsten echter in dit voorbeeld is het wel goed mogelijk en wanneer ik mijn gegevens importeer dan kunnen hier toch geen fouten in plaats vinden of zie ik dit verkeerd?
 
De procedure heb ik op 20 januari al uitgelegd:
... dan heb je een heel traject nodig:
1. Klant importeren in je Klantentabel
2. Ordergegevens importeren in Orders, en de KlantID daaraan koppelen
3. Orderregel records aanmaken op basis van OrderID en ProductID

Je hoeft een bestaande klant uiteraard niet opnieuw in te voeren, dus ik zou in ieder geval een formulier maken waarin je controleert of de klant al bestaat. Dat zou dan een doorlopend formulier kunnen zijn waarin je middels een 'fuzzy' filter alle namen laat zien die enigszins lijken op de naam uit de bestelling. Of, vermoedelijk iets betrouwbaarder, filteren op basis van adres (PC+Huisnummer is dan het mooist). Maar je klant moet wèl in Klanten zittten voordat je een bestelling kan toevoegen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan