MS Access Database: selectievensters maken

Selectievensters maken in een MS Access database?

Zelf selectievensters maken in je MS Access database

Welkom bij het begin van een 4-ledige blog over selectievensters maken in MS Access! Na het volgen van deze stoomcursus kun jij ook uit de voeten bij het maken van selectievensters. Doorloop je deze blog met twee vingers in je neus? Zie dan ons tweede blog tegemoet.

Oke, laten we beginnen..

Als je een MS Access-database maakt, zul je wel eens gebruik maken van het besturingselement Keuzelijst om meervoudig keuzes te laten zien. Dit is een weinig optisch elegante oplossing van de programmeurs van Microsoft. Daarom hebben daarvoor een veel betere oplossing ontwikkeld. Links zie je de MS Access-keuzelijst; rechts onze oplossing. Je zult met me eens zijn dat dit er aanmerkelijk rustiger en overzichtelijker uitziet, niet?

geselecteerde-kenmerkenms   geselecteerde-kenmerken

..Nieuwsgierig en wil jij dit ook kunnen?

Je weet om te gaan met Visual Basic voor Applications (Vba: Alt-F11) en je wilt graag je kennis daarvan uitbreiden of meer structuur aanbrengen in je code. Of mogelijk ben je hier net aan begonnen en heb je behoefte aan een wat ingewikkelder casus. Dan kan ik je met deze blog en de (3) opvolgende blogs mooi op weg helpen! In deze blog gaan we kijken naar de opbouw van de tool ‘Selectievensters’ en in de komende blogs naar de programmering daarvan.

Ook voor MS Access-beginners die meer willen leren is deze blog aan te raden. De echte liefhebber kan de tool met enige aanpassing ook in Excel gebruiken.

Doe kennis op met deze blogs. Dit geldt zowel voor je kennis van MS Access en Vba als in jouw eigen databases. Bovendien kun je binnenkort een voorbeeld-database waarin de tool is geplaatst van onze site downloaden, zodat je makkelijk zelf aan de slag kunt.

De casus – Selectievensters in plaats van Keuzelijsten

Voor een van onze klanten ontwierpen we een database waarin van elk apparaat een aantal specifieke eigenschappen werden vastgelegd. Deze eigenschappen werden onderverdeeld in drie soorten kenmerken. Ik heb in dit geval een voorbeeld genomen van de inkoop van 2e hands fietsen. Onder de kenmerken van de ingekochte fiets, nam ik de fiets zelf, het stuur en de banden. Je ziet twee records van de database Tweedehands fietsen met het hoofdschermpje ‘Fietsen’.

fietsen1   fietsen2

Hoe komt de keuze in het venster ‘Fietsen’ terecht?

wizard-keuzevenster

Het besturingselement Keuzelijst met Invoervak is natuurlijk ongeschikt voor het gebruik, omdat het maar één keuze laat zien, maar als je gebruik maakt van de Wizard, dan kom je onder meer dit selectievenster tegen. Je kent deze manier van selecteren natuurlijk ook van diverse Internetsites waar je gevraagd wordt een keuze te maken.

Dit idee wilden we ook voor onze klant toepassen! Het resultaat van de selectie moest te zien zijn in een raampje op het hoofdvenster. Voor alle drie de kenmerken wilden we hetzelfde Access-formulier gebruiken.

De Oplossing

Ik vind het leuk om te laten zien hoe we hierin geslaagd zijn. Het is wel nodig dat je enige kennis hebt van Visual Basic in MS Access, maar je kunt het natuurlijk ook kopiëren en plakken en de tabellen voorzien van je eigen invulling als je dit in je eigen database wilt gebruiken.

selectievenster

In dit voorbeeld koos ik, zoals gezegd, voor de keuring van een tweedehands fiets, het stuur en de banden daarvan (deze inhoud is natuurlijk slechts ter illustratie en niet praktisch). Ik stelde me voor dat de kenmerken van elke fiets in de database worden vastgelegd. Als kenmerken koos ik de fiets zelf (‘Fiets’), het stuur (‘Stuur’) en de banden (‘Banden’). Zie de twee schermen bovenin.

Hiernaast zie je een knipsel uit het hoofdscherm van het kenmerk ‘Fiets’ waarin de eigenschappen van de fiets zichtbaar zijn. In het linkervenstertje zie je de keuzemogelijkheden en in het rechterschermpje de gekozen items.

Keuzevenster ontwerpen

Je start met een leeg formulier door te klikken op Formulierontwerp van het menu Maken. Je noemt dit formulier frmSelectieVenster. In dit formulier plaats je een Keuzelijst en klik je meteen op Annuleren als je gebruik maakte van de Wizard. Ook verwijder je het label van de Keuzelijst als dat meegekomen is.

Zorg er nu voor dat je keuzelijst de juiste grootte krijgt, kopieer en plak deze vervolgens en plaats de beide elementen op je formulier zoals in mijn voorbeeld.

eigenschappenvenster

Nu ga je de beide knoppen tussen de keuzelijsten plaatsen, waarmee de apparaat-eigenschappen van de linkerlijst naar de rechterlijst kunnen worden overgezet. Een eenvoudige handeling wat je waarschijnlijk wel vaker hebt gedaan. In de Opmaak van de Eigenschappen (Ctrl-Enter) van de knop typ je onder Bijschrift ‘->’ en bij de andere knop ‘<-‘.

Belangrijk is een handige naam (Overige-Naam) aan dit element te geven, zodat je later in Visual Basic precies het onderscheid tussen de lijstelementen weet. Ik noemde de linker keuzelijst ‘lstLinker’ en de rechter ‘lstRechter’. Je zult je misschien afvragen waarom ik de namen vooraf laat gaan van de letters ‘lst’. Het is mijn gewoonte om de Leszynski Naming Convention toe te passen. De beide knoppen noem ik ‘btnNaarRechts’ en ‘btnNaarLinks’ en beginnen, zoals in deze conventie is aangegeven, met de beginletters ‘btn’. Later in deze uitleg zul je nog zien dat ik eenzelfde naamgeving toepas in de tabellen.

Voeg nu de Annuleer- en de Oke-button toe. Geef ze de namen btnAnnuleren en btnOk (Overige-Naam). Vervolgens typ je de opschriften onder Opmaak-Bijschrift als ‘&Annuleren’ en ‘&Oke’. Het is je vast wel eens opgevallen dat een van de letters in een databaseknop is onderstreept. Dit doe je door voorafgaand aan de letter een ampersand (&) te plaatsen. De knop is dan ook met het toetsenbord te bereiken met de combinatie Alt‑a of bij de bntOk-knop met de combinatie Alt-o.

De tabellen

Omdat we met drie kenmerken van het apparaat hebben te maken, zou je drie tabellen kunnen in de database kunnen zetten, maar je kunt ook volstaan met één ‘referentietabel’. Deze tabel noem ik tblReferenties (weer conform de Leszynski-code), beginnend met de eerste drie letters als afkorting van ‘table’. De velden van de tabel laat ik beginnen met de drie letters ‘ref’ en een underscore. Je zult er in de toekomst veel plezier van hebben als je ook deze conventie volgt. Je kunt dan in je queries of vba-code onmiddellijk herkennen uit welke tabel het veld afkomstig is.

database

Ook de velden zelfbenoem ik met drie letters van de Leszinsky-code. Als het veld een string (korte tekst) bevat zie je na de eerste drie letters van de tabel en de underscore vervolgens ‘str’ staan en voor een numeriek veld ‘int’ van Integer of ‘lng’ van Long. Beginnend met ‘mem’ zijn velden die geen beperking van de inhoud kennen, ook wel ‘memo-velden’.

Mijn referentietabel ziet er dan als in deze afbeelding uit.

selectievensters

Helemaal logisch ben ik niet geweest, want het veld ref_datestamp zou eigenlijk ref_dteDatestamp moeten heten. Een beetje teveel van het goede.Tip: Dit veld behoeft nog een aanvulling. In de eigenschappen van dit veld, plaats je onder  de eigenschap ‘Standaardwaarde’ de functie ‘= now()’. Telkens als een nieuw record wordt aangemaakt, wordt nu de dag en het tijdstip daarvan in je tabel vermeld.

Vulling van de tblReferenties

tblreferenties

Nu gaan we de referentietabel vullen. Een simpel, eenvoudig en noodzakelijk werkje.

Zoals je ziet heb ik niet alle velden van de tabel gebruikt, omdat ze in dit voorbeeld niet van toepassing zijn.

Mocht je mijn tblReferenties overnemen, dan kun je in het veld ‘ref_strVoluit’ informatie kwijt en die op andere momenten in je database tevoorschijn laten komen om de gebruiker meer duidelijkheid te geven.

De tabel tblFietsen en het formulier frmFietsen

De keuzes moeten natuurlijk ook in je database terecht komen. Daarvoor is het nodig dat je in je database een formulier maakt, waarin het soort fiets en misschien de datum waarop die werd verkregen wordt vermeld. In dit formulier zullen de kenmerken van de fiets ook terecht komen.

tabel excel

We beginnen met de tabel (zie hiernaast). De tabel lijkt me gelet op het voorgaande nu voor zich te spreken. In het veld fts_strMerkFiets en de fts_dteOntvangen kunnen straks gewoon handmatig worden ingevuld. Misschien zou je meer velden over de fiets kunnen toevoegen, maar het gaat natuurlijk om het vullen van de andere drie velden met je selectievensters.

Het frmFietsen in de Ontwerpweergave

Florijn

Het hoofdformulier heb ik eenvoudig gehouden. Onder de eigenschappen van dit formulier kies je de tblFietsen als recordbron. Vervolgens zet je het merk fiets, de datum ontvangen en de drie kenmerken als tekstvakken neer. Naast de drie kenmerken plaats je een button. Met deze button roep je later het selectievenster op. Onder alle drie de kenmerken voeg je een label toe en een keuzelijst (zonder invoervak).

Nu gaat het erom dat je de juiste namen kiest. Het is de bedoeling dat jouw vba-code straks de elementen gaat herkennen.

Misschien kende je het volgende trucje nog niet. In het eigenschappenvenster van het besturingselement klik je op het woord Besturingselementbron, waarna de recordsource zwart wordt. Kopieer dit woord, ga naar Overige en plak het als Naam. Doe dit ook met de andere tekstvakken. De keuzelijsten krijgen geen Besturingselementbron, waardoor je de woorden ‘Niet-afhankelijk’ ziet staan. We vullen de bron later met de vba-code. De namen van de buttons en de keuzelijsten zijn voor de hand liggend: btnFiets met lstFiets, btnStuur met lstStuur en btnBanden met lstBanden.

Tenslotte zullen de drie kenmerkvelden fts_strFiets, fts_strStuur en fts_strBanden niet zichtbaar zijn. Dit kun je later ook nog doen als je eerst wilt zien wat er in die velden wordt ingevuld.

Vervolg

Met deze vormgeving hebben we het eerste en eenvoudige deel van de Selectievensters klaar! Het vervolg op deze blog is het Visual Basic onderdeel, waar aanmerkelijk meer van je denkvermogen wordt gevraagd..

Heb je hier vragen over? Laat hieronder een opmerking achter.

Wil je een MS Access Expert inhuren of ben je op zoek naar een MS Access database specialist? Neem dan contact met ons op. Wij beantwoorden je vragen graag!

Write a comment

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Recente blogberichten