Subcategorieën in formulier

Winja

Nieuwe gebruiker
Lid geworden
31 jan 2024
Berichten
4
Beste,

Vanuit vrijwilligerswerk ben ik bezig om de boel te digitaliseren (daar nog zeer veel op papier gaat)
Nu ben ik al vrij ver gekomen, Maar nu loop ik een beetje vast bij een database te maken met de materialenlijst.

Het geen dat ik graag wil is dat ik voor mezelf een invoer formulier maak, daarin kan ik productnaam, productcode, categorie, subcategorie, en verschillende prijzen zetten waardoor het voor de verkopende persoon gemakkelijk wordt om het specifieke onderdeel terug te vinden en direct de prijs te zien.

Nu loop ik helaas alleen vast dat ik het drop down menu van de subcategorieën afhankelijk wil laten zijn van de hoofdcategorie.
Voorbeeld van wat ik zou willen:

In het formulier geef ik aan dat de hoofdcategorie Banden is middels een keuzelijst. Vervolgens wil ik daaronder een 2e keuzelijst maar in plaats van dat die dan alle subcategorieën weergeeft wil ik dat daar dan alleen de subcategorieën behorende bij de hoofdcategorie banden komt, dus: binnenband, buitenband, ventielen, div.onderdelen.

Nu heb ik 3 verschillende tabellen:
1 tabel met de producten en bijbehorende prijzen
1 tabel met de hoofdcategorieën
en 1 tabel met de subcategorieën

De tabellen zijn met elkaar gekoppeld zodat ik in tabelvorm wel alleen de bijbehorende subcategorieën kan zien

Hopelijk is het zo een beetje duidelijk, mochten er nog meer vragen zijn hoor ik dat uiteraard graag!
 
Kan je voorbeelddatabase of anders een printscreen van je relatieschema posten zodat we weten hoe je de tabellen precies gekoppeld hebt?
 
Vergeet je huidige opzet, (en de vraag van Peter ;)) en maak een andere die simpeler is. En dat is: één tabel waarin je dus alles zet, zowel de hoofdcategorieën als de subcategorieën. Dat vereist één extra veld in die tabel, een numeriek veld met de naam (ik zeg maar wat) ParentID. Het invullen van die tabel is dan heel simpel: je vult een hoofdcategorie in door het veld ParentID leeg te laten, en een subcategorie door in dat veld het ID van de hoofdcategorie te zetten.
Voorbeeldje:
Recordnr 1 - Vruchten (hoofdcategorie dus geen ParentID)
Recordnr 2 - Groente (hoofdcategorie dus geen ParentID)
Recordnr 3 - Appel - ParentID 1 (vruchten)
Recordnr 4 - Peren- ParentID 1 (vruchten)
Recordnr 4 - Golden Delicious - ParentID 3 (Appel is nu de bovenliggende categorie)

Etc. Dit systeem heeft dus niet de beperking die je nu wel hebt, dat er maar twee categorieën zijn, je kunt eindeloos doorbouwen. Hoeft dus niet, maar het is wél toekomstbestendig.
Hoe werkt het op je formulier? Ook simpel: zet een aantal keuzelijsten op je formulier, en begin de eerste op basis van een query die filtert op hoofdcategorieën. Dat is dus een filtering waarbij het veld ParentID leeg is. De tweede keuzelijst wordt gevuld met een actie <Bij klikken> op de eerste keuzelijst. Daarbij gebruik je de gekozen waarde uit de eerste keuzelijst als filter voor de tweede. Bij de keuze voor Groente wordt de tweede keuzelijst dus gefilterd op categorieën waarbij de ParentID 2 is, en bij Vruchten filter je de tabel in de query op de waarde 1. En zo kun je dus nog veel verder filteren, als dat nodig is.

Ik heb dit systeem met enige regelmaat gepost in het forum, en ook in de cursus die ik geschreven heb uitgelegd. Maar uiteraard wil,ik,het ookmwel in jouw database zetten, als je die meestuurt.
 
Bedankt voor jullie hulp!

Nu moet ik bekennen dat het me gisteravond laat nog is gelukt om het gewenste resultaat te behalen door chatGPT.
Ik zal de test database even toevoegen om te kijken of ik geen fouten heb gemaakt.

@OctaFish ik zal je cursus even opzoeken wellicht werkt dat inderdaad makkelijker. (of als je een voorbeeld kan maken in de bijgestuurde database, is dat uiteraard ook welkom, ik ben een absolute beginner in access maar ik leer snel door doen en door te kijken hoe anderen het hebben gedaan.

Heb mede hierdoor ook al diverse databases kunnen maken voor de registratie van binnengekomen fietsen, en een database voor alle verschillende inkomsten.

Het nadeel is wel dat ik op de plek zelf weer vanaf 0 moet beginnen omdat ik geen access databases kan doorsturen ivm beveiligde omgeving aldaar. dus als er een makkelijkere manier is, dan is dat altijd welkom.

EDIT: Ik zie nu ook dat doordat ik een VBA-Macro heb gebruikt ik het bestand al niet meer los krijg geopend maar ik eerst access zelf moet opstarten en dan het bestand moet openen, als dit met jou methode niet nodig is, graag. Thuis kan ik dat prima omzeilen, maar ik ga ervanuit dat dit op de locatie zelf niet aan te passen is.
 

Bijlagen

  • Test Materiaallijst Fietsdepot.zip
    33,1 KB · Weergaven: 1
Laatst bewerkt:
Ik zal vanavond naar de database kijken.

Overigens ben ik van mening dat er in beginsel niks mis is met de methode die je beschreef. De methode van OctaFish werkt uiteraard ook, maar niet beter of handiger. Al zal hij daar wel anders over denken :D
Als je al zo ver bent zou ik het zeker niet helemaal om gaan gooien.
 
Overigens ben ik van mening dat er in beginsel niks mis is met de methode die je beschreef. De methode van OctaFish werkt uiteraard ook, maar niet beter of handiger. Al zal hij daar wel anders over denken :D
Wat denk je zelf? Er bestaat zoiets als 'normaliseren', en mijn aanpak is daar een voorbeeld van. Lees het eens na in de cursus, zou ik zeggen :).
 
Dank weer voor jullie reacties,
Ik zal proberen om vanavond nog even een geupdate versie te uploaden, mits het intranet aldaar me de database extern laat mailen.
Ik ga namelijk alle tips en wat ik gisteravond thuis heb geprobeerd vanmiddag in de praktijk uitproberen, en van daaruit weer verder. Gelukkig zit er verder geen druk of iets achter en is het meer een hobby projectje, aldoende leert men
 
Ik heb ondertussen het e.e.a. aangepast in jouw versie; die zal ik na de lunch hier posten. Overigensnben ik niet onder de indruk van de programmeer kunsten van chatGPT :).
 
Beste,

Ik ben vanmiddag verder gegaan op de basis die ik had. Nu heb ik de koppeling in het invul formulier voor elkaar gekregen, dit werkt nu zonder problemen.
Alleen in de overkoepelende tabel wordt de hoofdcategory als cijfer ingegeven (terwijl in het formulier wel de tekst staat)

Tevens heb ik een poging willen doen tot een opzoek formulier (voor de collega) waarin er slechts door het invullen van een categorie en subcategorie een lijst ontstaat met alle records in die subcategorie, helaas is dit niet gelukt. alle tips zijn welkom!

Ik vermoed dat dit alleen mogelijk is dmv macro's?
Mocht je dingen aanpassen in het bestand, zou ik het fijn vinden als ik een omschrijving kon krijgen, en de eventuele programeer code. Daar ik het aangepaste bestand niet terug kan sturen naar de werk pc wegens beperkingen. Ik moet de aanpassingen dus ter plekke zelf opnieuw aanmaken.

Ik zal de huidige stand van zaken bijvoegen als bijlagen.
 

Bijlagen

  • Materialenlijst Test.zip
    45,4 KB · Weergaven: 2
Toch maar mijn versie, want ik vond dat er nog best wat verbeterd kon worden aan het origineel. Zo viel het mij op, dat je in essentie mijn 'oplossing' al had gemaakt, namelijk door het maken van de tabel [Subcategories]. Want die bevat alle velden die je nodig hebt voor een wederkerige tabel. Het enige dat ontbreekt: je hebt daar de hoofdcategorieën niet ingevuld. Nu zal Peter met jouw werkwijze wel blij zijn, maar ik dus niet :).

Ik heb me enigszins uitgesloofd, want ik heb het systeem zelfs uitgebreid naar drie categorieën; niet dat je die gelijk nodig hebt, of moet gaan gebruiken, maar om te laten zien hoe het werkt. In mijn ogen dus de best oplossing voor het werken met gelaagde categorieën.
Verder heb ik uit je tabel "Onderdelen" (die nu "Materialen" heet) maar één Categorieveld gebruikt. Waarom? Heel simpel: het vermijden van dubbele (en nutteloze) gegevens. Als je namelijk het SubcategorieID weet van het artikel waar het om gaat, kun je altijd de hoofdcategorie terugvinden/opvragen. Er is geen enkele noodzaak om die dus óók op te slaan in je tabel. Sterker nog: als je later besluit om e.e.a. om te gooien, ben je de sjaak, want dan klopt er niets meer van je materialen tabel. Niet doen dus: sla alleen de noodzakelijke gegevens op in een tabel.

Dat brengt me bij een ander nutteloos veld (of velden in de eerste db): de Berekende velden. Niet nodig, weggooien. Berekeningen maak je in queries als je ze nodig hebt. Ook die oplossing zie je terug in mijn database.

En als je macro's wilt gebruiken, dan haak ik af, vrees ik, want ik heb daar een bloedhekel aan. Ik doe alles met VBA procedures en functies. Veel overzichtelijker, en veel beter te onderhouden.

Ik raad je aan om mijn db eerst eens goed te bestuderen voordat je op je eigen db weg verder gaat :). Niet dat dat niet mag, maar je kunt er nu nog een goede database van maken, dus grijp die kans :).
 

Bijlagen

  • Test Materiaallijst Fietsdepot.zip
    40,2 KB · Weergaven: 7
Terug
Bovenaan Onderaan