Zoeken in MS Access 2013-cursus:

Formulier met subformulier

1. Leerdoel

De student moet in staat zijn een formulier met subformulier te bouwen op basis van twee gekoppelde tabellen.

2. Toelichting

In de voorgaande webpagina werden twee tabellen aan elkaar gekoppeld in je 'Personeelsdatabase'.

De persoons- en adresgegevens van elke werknemer worden beschreven in een record in de tabel 'Werknemers Adressen'. De gegevens betreffende een computercursus worden daarentegen beschreven in de tabel 'Computercursussen'.

Thans moet een formulier worden gebouwd dat toelaat om voor de werknemers telkens een nieuwe record toe te voegen aan de tabel 'Computercursussen', wanneer zij een nieuwe PC-opleiding hebben gevolgd.  Onderstaande tabel geeft dit schematisch weer.  De blauwe tekst is informatie die (onder meer) in de tabel 'Werknemers Adressen' zit opgeslagen, terwijl de andere tekst middels het nieuwe te maken formulier moet worden ingevoerd per PC-opleiding.

Werknemers Adressen

Computercursussen

Familienaam
Voornaam
Cursusnaam
Startdatum
Aantal uur
Kostprijs
Janssens  Jan Windows 2000 19/10/2009 4 uur 150
    Microsoft Word 09/11/2009 12 uur 500
    Microsoft Excel 20/11/2009 12 uur 525
Peters  Piet Internet 0/10/2009 3 uur 20
    Microsoft Word 09/11/2009 12 uur 500
Martens Maarten Microsoft Access 22/11/2009 18 uur 650
    Microsoft Powerpoint 09/01/2009 6 uur 200

Om dergelijke gegevensinvoer mogelijk te maken kan best een zogenaamd hoofdformulier met subformulier worden gemaakt:

  1. In het hoofdformulier zou in dit geval de informatie betreffende de werknemer moeten getoond worden, zonder dat het eigenlijk noodzakelijk is dat de gebruiker van het formulier deze werknemersgegevens op dat moment kan wijzigen, omdat je daartoe het formulier 'Werknemersadressen invoeren' hebt gemaakt.
  2. In het subformulier moet voor elke werknemer in het hoofdformulier een in principe oneindig aantal PC-opleidingen kunnen worden ingevoerd.

We zullen dus eerst een hoofdformulier en daarna een subformulier bouwen, die we in een laatste stap samenbrengen in één formulier:

Hoofdformulier
WerknemersID: 1
Familienaam: Janssens
Voornaam: Jan

Subformulier
CursusID:   1 WerknemersID:  1
Cursusnaam: ..................
Startdatum: __/__/____ Aantal uur: Kostprijs: ...............€

3. Een hoofdformulier maken

  1. Open je Personeelsdatabase op je memorystick, harde schijf of Homedrive
  2. Klik in het tabblad 'Maken' op de opdrachtknop 'Wizard formulier' van de groep 'Formulieren'
  3. Daardoor wordt de 'Wizard Formulier' opgestart

  4. Selecteer in het eerste beeldscherm van de wizard in het rolmenu 'Tabellen/query's' de tabel 'Werknemers Adressen'.
  5. Kies vervolgens in de lijst 'Beschikbare velden:' de velden 'WerknemersID', 'Familienaam' en 'Voornaam', door deze veldnamen één na één eerst aan te klikken, om deze te selecteren, en vervolgens op de knop te klikken.
    Daardoor worden ze naar de lijst 'Geselecteerde velden:' overgebracht.
    Klik daarna op de knop 'Volgende'

  6. Kies in het tweede beeldscherm van de wizard voor de opmaak 'In kolomvorm' en klik op 'Volgende'

  1. Geef het formulier ten slotte een gepaste naam mee, bijvoorbeeld 'Invoer PC-opleiding' en klik op 'Voltooien'

  2. Het hoofdformulier ziet er dan ongeveer als volgt uit (maar je kan er uiteraard een ander thema op toepassen):

  3. Vermits het eigenlijk niet de bedoeling is dat gebruikers van dit invulformulier voor PC-opleidingen, ook de werknemersgegevens in het hoofdformulier kunnen wijzigen, kunnen we dit beter voorkomen.
  4. Open het formulier 'Invoer PC-opleiding' in ontwerpweergave .
  5. Selecteer gelijktijdig de drie invoervakken (en dus niet de labels).
  6. Klik op de opdrachtknop 'Eigenschappenvenster' in het tabblad 'Ontwerp'.

  1. Klik in het 'Eigenschappenblad' op het tabblad 'Gegevens' en stel de eigenschap 'Vergrendeld' in op 'Ja'. Daardoor kunnen de eerder ingevoerde gegevens in deze drie velden niet worden gewijzigd vanuit dit hoofdformulier. Sluit het eigenschappenblad terug af.
  2. Pas de lay-out van het formulier enigszins aan en sla het formulier opnieuw op:

  3. Bekijk het formulier opnieuw in formulierweergave en stel vast dat thans de werknemersgegevens wél getoond worden, maar niet meer kunnen worden gewijzigd.

  1. Om van de ene werknemer naar de andere te navigeren kan je op de navigatieknoppen , onder aan het formulier klikken.

4. Een subformulier maken

Het subformulier kan op vergelijkbare wijze worden aangemaakt:

  1. Start de 'Wizard Formulier' opnieuw op en voer de volgende gegevens in:

  2. Thans worden alle veldnamen afkomstig uit de tabel 'Computercursussen' geselecteerd.  Doorloop de 'Wizard Formulier' tot op het einde en bewaar het formulier onder de naam 'Computercursussen invoeren'.
  3. Het resultaat zou op onderstaande afbeelding kunnen lijken:

  4. Open het formulier in Ontwerpweergave en maak volgende aanpassingen in de opmaak:

  1. Bewaar het gewijzigde formulier opnieuw.
  2. In dit subformulier kan straks elke computeropleiding, die een werknemer volgt, worden ingevoerd.

5. Formulier met subformulier samenstellen

Thans is het zaak om het hoofdformulier en subformulier 'in elkaar te schuiven' zodat elke ingevoerde computercursus aan een specifieke medewerker wordt toegewezen.  Dat gaat als volgt.

  1. Open het hoofdformulier 'Invoer PC-opleiding' in ontwerpweergave en maak het ontwerpraster van het formulier wat groter, zodat het subformulier er onderaan kan worden ingepast. Maak daartoe de detailsectie eventueel wat breder en langer.

  2. Klik op het tabblad 'Ontwerp' in de groep 'Besturingselementen' op de opdrachtknop 'Subformulier/subrapport' (controleer evenwel eerst of de knop 'Wizards voor besturingselementen gebruiken' actief is).

  1. 'Teken' de omkadering van het subformulier af, onder aan het hoofdformulier door met ingedrukte linkermuisknop te slepen.

  2. Na het 'aftekenen' van het subformulier in het hoofdformulier, start meteen een wizard op.  Selecteer in het eerste beeldscherm van de 'Wizard Subformulier' de naam van het in te voegen subformulier.  In dit voorbeeld is dat het daarstraks aangemaakte formulier 'Computercursussen invoeren', dat je kan selecteren nadat je het keuzerondje 'Een bestaand formulier gebruiken' hebt aangeklikt.
    Klik op de knop 'Volgende'.

  3. In het tweede beeldscherm van de wizard kan worden opgegeven welk veld in het hoofdformulier en welk veld in het subformulier voor de koppeling tussen de twee formulieren moeten worden gebruikt.  De wizard toont daartoe een rolmenu met suggesties.

    In dit geval toont deze lijst slechts één optie 'Computercursussen weergeven voor elke record in Werknemers Adressen met Werknemersidentificatie'.  Je zou deze optie zonder probleem kunnen selecteren.

    Je kan echter ook eerst de optie 'Zelf bepalen' selecteren door het keuzerondje dat deze optie voorafgaat aan te klikken.
    Vervolgens selecteer je middels een rolmenu van het invoerveld linksboven de veldnaam 'WerknemersIdentificatie' van de tabel 'Werknemers Adressen' als koppelveld in het hoofdformulier en (in het invoerveld rechtsboven) eveneens de veldnaam 'WerknemersId' van de tabel 'Computercursussen' als koppelveld voor het subformulier.
    Klik nadien op de knop 'Volgende'.

  4. Vul in het laatste beeldscherm van de 'Wizard Subformulier' een naam in voor het subformulier (je mag ook de voorgestelde naam bevestigen) en klik op 'Voltooien'.
  5. Het subformulier wordt daardoor weergegeven in het hoofdformulier. Indien de uitlijning van het subformulier niet voldoet, dan kan je de (oranjekleurige) omkadering van het subformulier op de gebruikelijke wijze aanpassen met behulp van de vulgrepen.

  1. Open het formulier in Formulierweergave en test de invoermogelijkheden uit.

  2. De velden 'CursusID' en 'WerknemersID' hoeven door de gebruiker uiteraard niet te worden ingevuld, dat gebeurt automatisch van zodra een Cursusnaam, Startdatum, enzovoort in het subformulier wordt ingevoerd.  Om deze reden zou je van de velden 'CursusID' en 'WerknemersID' net zo goed de eigenschap 'Zichtbaar' op 'Nee' kunnen zetten (zodat ze aan het oog van gebruikers onttrokken worden).

  3. Om van de ene werknemer naar de andere te navigeren, kan je helemaal onderaan in het formulier op de navigatieknoppen klikken .  Telkens wordt daardoor het gepaste subformulier getoond: ofwel een blanco-formulier indien voor de betreffende werknemer nog geen enkele PC-opleiding werd ingevoerd, ofwel een subformulier met de gegevens betreffende een eerste computercursus.

  4. Om van de ene ingevoerde computercursus - gevolgd door één bepaalde werknemer - naar de andere te navigeren, kan je de navigatieknoppen van het subformulier gebruiken.  Een nieuwe computercursus kan worden toegevoegd door op de knop 'Nieuwe (lege) record)" te klikken.
  5. Voeg voor een aantal werknemers één of meerdere PC-opleidingen in. In onderstaande tabel worden daartoe enkele voorbeelden getoond die je daarbij kan gebruiken. Later zullen we deze gegevens aangaande computercursussen gebruiken om een rapport te maken.
Computercursussen
Cursusnaam Startdatum Aantaluren Kostprijs
Visual Basic 12/01/2011 24 1.000,00 €
Microsoft Access voor beginners 23/02/2011 8 200,00 €
Microsoft Access voor gevorderden 2/03/2012 12 300,00 €
Microsoft Excel beginners 22/12/2013 4 125,00 €
Microsoft Excel voor gevorderden 12/01/2013 6 750,00 €
Internet Explorer 23/02/2014 4 100,00 €
Microsoft Outlook 8/01/2014 4 200,00 €
Microsoft Excel voor beginners 22/01/2011 4 125,00 €
Microsoft Excel voor gevorderden 7/02/2012 6 200,00 €
  1. In de voorbeelddatabase 'PersoneelsdatabaseVoorbeeld.accdb' kan je een voorbeeld van dit hoofdformulier met subformulier vinden onder de naam 'Invoer PC-opleiding'.

6. Oefening

Klik hier om de oefening 'Jobstudenten' te starten.

Klik hier om de oefening 'Studiedagen' te starten.

7. Bronnen

    Helpprogramma bij Microsoft Access 2013: zoek op 'subformulier'.