Zoeken op record èn op veld? matrix prijzen

  • Onderwerp starter Onderwerp starter pjea
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

pjea

Gebruiker
Lid geworden
15 mei 2009
Berichten
16
Beste forum lezers.

Wat ik wil bereiken is een prijs opzoeken in een tabel. de kolommen geven de breedte van mijn product weer.(zonwering in mijn geval) en de eerste kolom geeft de hoogte weer.
Hierbij heb ik een opzetje gemaakt om prijzen op te zoeken uit een tabel. Alleen lukt het me wel om een nieuwe prijs te krijgen na dat ik de hoogte verander. Maar ik weet echt niet hoe ik hierin nu ook de breedte kan veranderen op het formulier waarbij ik de juiste prijs kan tonen in mijn prijs veld??
Dit is maar een stukje van mijn db. De rest heb ik even weggelaten om de vraag niet te complex te maken. Het is uiteraard mijn bedoeling om dit weer te verwerken in mijn totale offerte/order db te voegen.

Wie wil mij op weg helpen met een oplossing.
 

Bijlagen

Laatst bewerkt:
De oplossing is niet heel overdreven simpel, omdat je het jezelf niet overdreven makkelijk hebt gemaakt.
Fout(je) uno: je hebt veldwaarden een naam gegeven die hetzelfde type is als de inhoud van het veld. Een veldnaam 140 voor een numeriek veld, kan uiteraard ook een waarde zijn uit die kolom. Met veldnamen moet je dus altijd oppassen, want als je code maakt om een veld uit te lezen, en access interpreteert het aangeboden gegeven als een waarde, dan heb je een probleem.
In de tabel heb ik dat opgelost door de veldnamen te voorzien van de letter b. Dus de breedtekolommen heten nu b60, b70 etc.
De reden dat dit überhaupt moet, komt door een groter probleem in de tabel... Je hebt alle opties al vastgelegd per hoogterecord. Zoals je al had gemerkt, kun je de hoogte nog wel filteren op basis van een geselecteerde hoogte. Bij kolommen werkt dat niet. Ergo, om dezelfde techniek te kunnen gebruiken, zul je ook de Breedtes in een aparte tabel moeten opnemen. Als derde tabel maak je dan een koppeltabel tussen de tabellen Hoogte en Breedte, waar je de prijzen in zet. Vervolgens maak je met behulp van een kruistabel de matrix met prijzen aan.

Zoals je het nu hebt gedaan, zie ik geen andere oplossing dan op je formulier twee keuzelijsten te maken. Waarschijnlijk was je dat zelf ook al van plan.... Met de twee keuzelijsten maak je een selectie op basis van de beschikbare gegevens. Ik heb twee verschillende soorten keuzelijsten gebruikt: de keuzelijst Hoogte maakt gebruik van een query, waarin alle Hoogtewaarden uit de tabel worden gehaald. De keuzelijst Breedte maakt gebruik van een tussenquery, waarin alle Velden uit de prijzentabel staan, minus het veld Hoogte. Dat wordt slechts gebruikt om het eerste record te filteren. Op het formulier staat de keuzelijst ingesteld op type <Lijst met velden>; hij is gekoppeld aan, jawel, de query die daar speciaal voor is gemaakt. In de lijst zie je nu niet de waarden, wat je normaal gesproken zou doen, maar de Veldnamen. De reden daarvoor wordt zometeen duidelijk...

Wat gebeurt er nu als je het formulier gebruikt? Je kiest met de keuzelijst Hoogte een waarde uit de tabel. (Dus één van de records). Vervolgens kies je een Veldnaam m.b.v. de keuzelijst Breedte. Beide keuzelijsten gebruiken dezelfde opdracht om de prijs op te halen:

strSQL = "SELECT [" & iBreedte & "] FROM Prijzen WHERE Hoogte = " & iHoogte

Omdat je niet zonder meer de kolom weet, moet je die uitlezen uit de keuzelijst. Deze veldnaam (de variabele iBreedte) wordt in de Select statement gezet, samen met de Waarde uit de keuzelijst Hoogte (de variabele iHoogte). Deze laatste wordt gebruikt om de records te filteren. Je ziet dus, als je de query zou uitvoeren, één veld, het veld uit de keuzelijst cboBreedte, met de waarde van het record met de hoogte uit de keuzelijst cboHoogte.
Deze waarde wordt vervolgens opgezocht in de tabel, en toegewezen aan het tekstvak.

Je ziet, dat de oorspronkelijke query die je had gemaakt, er niet meer aan te pas komt... Alles gaat nu via de recordset die wordt opgebouwd a.d.h.v. de keuzelijsten.
 

Bijlagen

Dank je wel Michel voor je snelle reactie.

Dank je wel Michel voor je snelle reactie.

Dat werkt inderdaad prima. Ik ben met jou uitleg aan de slag gegaan en ben gaan kijken of ik dat toch kan gebruiken om in te vullen tekst vakken te maken. Maar dat lukt voor als nog met mijn beperkte kennis niet.
Ik wil nog even mijn hele uitdaging voorleggen. Misschien vind je dat ik een heel andere weg in moet slaan. B.v. met de kruistabel zoals je voorsteld.

Ik heb meerdere excel bestanden met prijzen waaruit ik nu handmatig prijzen opzoek.
Het gaat hier over zonwering. Je moet hier denken aan rolgordijnen en zo.
Ik heb zo'n excel bestand bijgevoegd. Hierin staan links verticaal de hoogte en bovenaan horizontaal de breedte. Daaronder staat nog eens de prijsgroep om het nog moeilijker te maken :(
De maten die ik nodig heb bv. 1245mm breed x 2457mm hoog moet ik eerst naar boven afronden tot 10 hele centimeters dus 130cm breed x 250cm hoog. En onder de bewuste prijsgroep vind ik dan de juiste prijs
Nu gaat dit handmatig uiteraard al jaren prima maar in een access formulier??
Mijn idee was een formulier met een aantal invul mogelijkheden waarin ik
-breedte in mm
-hoogte in mm
-prijsgroep (E of 1 of 2 of 3)
kan invullen waarmee ik de prijs in een vakkan aflezen.

pff, het uitleggen vond ik al moeilijk. Ik vind het een hele uitdaging om dit voor elkaar te krijgen, maar heb genoeg zelfkennis om in te zien dat ik hierbij deskundige hulp bij nodig heb.
Dus michel, als jij me nòg een stukje op weg zou willen helpen, hoor ik het graag.
Of als ik een oplossing over het hoofd gezien heb in het forum mag iemand het me graag vertellen. Ik heb het tot nu toe nog niet kunnen vinden.

Alvast bedankt:thumb:, Peter
 

Bijlagen

Ik snap dat je de tekstvakken nodig hebt om de juiste maten te kunnen leveren. Daarbij wil je dus logischerwijs een breedtemaat teruglezen die groter is dan de ingetypte waarde; je kunt immers wel van de rollen afsnijden, maar bijplakken kost niet iets teveel tijd... De ingevoerde maat moet dus naar de eerstvolgende breedtemaat worden afgerond. Waarbij de in te voeren maat dus niet groter mag zijn dan de maximale breedtemaat, want dat kun je per definitie niet leveren...
Dat moet wel te maken zijn.... Overigens zou ik de keuzelijsten wel laten staan; je kunt ze denk ik ook wel gebruiken voor het uitleveren van standaardrollen, toch?
Ik zal het voorbeeld aanpassen, en er weer tekstvakken bijzetten!
 
Eerst even mijn gevoel uiten: :thumb::thumb::thumb: Super dat je me opweg wil helpen!

Ik heb een winkel met binnnen zonwering. Met merken zoals Luxaflex. Al deze producten worden op maat gemaakt. Hier maak ik zo'n 10 offertes per dag. En elke keer doe ik dat hand matig opzoeken. En als ik die prijs heb typ, ik dat in een offerte. Dus ik ga het bewuste formulier proberen uit te breiden tot een offerte programma'tje waarbij ik de offerte kan mailen naar mijn klant. Dat zal me een hoop werk kunnen schelen.
Ben benieuwd, en enthousiast aan het leren in de wondere wereld van access en VB.

Ik heb tot nu toe een verkoop programma'tje gemaakt waar ik het in wil verwerken. Heb even de klanten tabellen en de producten(grotendeels) verwijderd. Misschien heeft iemand nog iets aan mijn werk. Het zal wel niet helemaal volgens de programeer regels zijn opgesteld, maar het is mijn eerste projectje.

Graag tot horens, Peter
 

Bijlagen

Ik heb nog niet naar je nieuwe bestanden gekeken, want ik was véééél te druk met het verbeteren van de vorige versie...;) Die heb ik dan ook (denk ik) wel netjes werkend!
Ik heb je Excel bestand eens bekeken, en geconstateerd dat je de rijen en kolommen veel beter kunt omwisselen. Dan heb je namelijk al bijna een bruikbare tabel voor Access.
Dat heb ik dus ook maar gedaan.
Op basis van de nieuwe prijstabel heb ik het formulier aangepast. De prijstarieven heb ik overigens voor het gemak maar van Letters voorzien; een lijst met E,1,2,3 is niet heel erg logisch... Dat is nu dus E,F,G,H geworden.
Verder heb ik in de tabel een veld Dikte opgenomen voor de lameldikte, en Materiaal voor het jawel...) materiaal van de lamellen. Tevens een datum voor de prijswijziging.
Kijk maar eens of dit in de buurt komt...
Ga ik nu naar de nieuwe db kijken!
 

Bijlagen

Laatst bewerkt:
Beste Michel,

Super Super Super!!!

Ik ben het nu aan het fijntunen. Mooi maken en zo. Maar het werkt prima. Zit alleen toch te kijken in jouw code of ik niet iets meer de prijslijst orgineel kan houden. Ik heb er namelijk zo'n 50 verschillende die ik allemaal zou moeten importeren in Access. Het zou mooier zijn als ik ze (haast) ongewijzigd er kon in stoppen.

Maar je hebt me al héél veel werk uit handen genomen.

Als je nog tip hebt blijven ze uiteraard welkom.

Peter
 
Hoi Peter,

De tabel zoals ik die nu gemaakt heb, kan je inderdaad niet zomaar aanvullen. In bijgaand excelletje zie je hoe ik het originele prijzenbestand heb aangepast, zodat je het wèl kunt inlezen. Dit werk zul je toch moeten doen, wil je de db goed kunnen gebruiken.
Ik heb er in de db al wel rekening mee gehouden, dat je meerdere types zult willen invoeren. Door extra velden toe te voegen, zoals Dikte, Materiaal etc. Daar zou dan bijvoorbeeld nog een kolom Merk bij kunnen komen, als dat van toepassing is.
Wat je dan op het formulier zult moeten doen, is extra selectiemogelijkheden bouwen. Want hoe meer verschillende soorten je in de Prijzentabel hebt, hoe meer records er in de formulierselectie zullen komen. En je wilt uiteindelijk (zoals in de huidige db het geval is) maar één record overhouden.
Dus moet je op het formulier een aantal keuzelijsten hebben, die je gebruikt om de uiteindelijke selectie met elk veld verder te beperken, tot je a.h.w. één prijsblok overhoudt, dat je kunt opvragen.
Als je daar zelf niet uitkomt, dan help ik je uiteraard graag verder op weg.... Voor het afhankelijk maken van keuzelijsten, verwijs ik graag weer naar het eerder aangehaalde voorbeeld!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan