Download as pdf or txt
Download as pdf or txt
You are on page 1of 0

Databaseontwikkeling 4 (Access 2003)

Copyright 2007 Academic Service


Copyright 2007 Academic Service
Database-
ontwikkeling 4
(Access 2003)
Ies Korpershoek
Ben Groenendijk
Copyright 2007 Academic Service
Meer informatie over deze
en andere uitgaven kunt u
verkrijgen bij:
Sdu Klantenservice
Postbus 20014
2500 EA Den Haag
tel.: (070) 378 98 80
fax: (070) 378 97 83
2007 Sdu Uitgevers bv,
Den Haag
Academic Service is een
imprint van Sdu Uitgevers bv
1e druk, juli 2005
2e druk, maart 2007
Vormgeving en omslag: Studio
Bassa, Culemborg
Zetwerk: Redactiebureau Heijer,
Markelo
ISBN 978 90 395 2483 1
NUR 124
Alle rechten voorbehouden. Alle auteursrechten en databank-
rechten ten aanzien van deze uitgave worden uitdrukkelijk
voorbehouden. Deze rechten berusten bij Sdu Uitgevers bv.
Behoudens de in of krachtens de Auteurswet 1912 gestelde
uitzonderingen, mag niets uit deze uitgave worden verveel-
voudigd, opgeslagen in een geautomatiseerd gegevensbestand
of openbaar gemaakt in enige vorm of op enige wijze, hetzij
elektronisch, mechanisch, door fotokopien, opnamen of enige
andere manier, zonder voorafgaande schriftelijke toestemming
van de uitgever.
Voorzover het maken van reprograsche verveelvoudigin-
gen uit deze uitgave is toegestaan op grond van artikel 16 h
Auteurswet 1912, dient men de daarvoor wettelijk verschul-
digde vergoedingen te voldoen aan de Stichting Reprorecht
(postbus 3051, 2130 KB Hoofddorp, www.reprorecht.nl).
Voor het overnemen van gedeelte(n) uit deze uitgave in
bloemlezingen, readers en andere compilatiewerken (artikel
16 Auteurswet 1912) dient men zich te wenden tot de Stichting
PRO (Stichting Publicatie- en Reproductierechten Organisatie,
Postbus 3060, 2130 KB Hoofddorp, www.cedar.nl/pro). Voor
het overnemen van een gedeelte van deze uitgave ten behoeve
van commercile doeleinden dient men zich te wenden tot de
uitgever.
Hoewel aan de totstandkoming van deze uitgave de uiter-
ste zorg is besteed, kan voor de afwezigheid van eventuele
(druk)fouten en onvolledigheden niet worden ingestaan en
aanvaarden de auteur(s), redacteur(en) en uitgever deswege
geen aansprakelijkheid voor de gevolgen van eventueel voor-
komende fouten en onvolledigheden.
All rights reserved. No part of this publication may be repro-
duced, stored in a retrieval system, or transmitted in any form
or by any means, electronic, mechanical, photocopying, recor-
ding or otherwise, without the publishers prior consent.
While every effort has been made to ensure the reliability of
the information presented in this publication, Sdu Uitgevers
neither guarantees the accuracy of the data contained herein
nor accepts responsibility for errors or omissions or their con-
sequences.
Copyright 2007 Academic Service
Woord vooraf
Dit boek is bestemd voor de niveau 4-opleiding ICT-beheerder op
basis van de nieuwe competentiegerichte eindtermen voor MBO-
ICT die vanaf 2007 van kracht zijn.
Bij de ontwikkeling van de leerstof voor de nieuwe competentie-
gerichte eindtermen is ervoor gekozen om de competenties van de
kerntaken in samenhang te behandelen. Zeker bij het onderwerp
databases is het logisch om de competenties van zowel het ont-
wikkelen (ontwerpen/realiseren) als het beheren/onderhouden van
een informatiesysteem aan de hand van de toepassing van de po-
pulaire applicatie Access (in dit geval versie 2003) te behandelen.
In dit boek is gestreefd naar een praktische benadering van de
informatie- en gegevensanalyse. Het verdient aanbeveling om de
inhoud van dit boek af te wisselen met de inhoud van de afzon-
derlijke uitgave over informatieanalyse. De kandidaat kan met dit
boek over Access 2003 zelfstandig de opdrachten maken en daar-
voor terugvallen op de eerder behandelde theorie. De docent kan
als begeleider optreden, maar als hij dat verkiest ook klassikaal
de theoretische onderdelen behandelen. In ieder geval zal de deel-
nemer in of buiten het klaslokaal veel tijd aan de computer door-
brengen. Aan het einde van dit deel moet de deelnemer in staat zijn
zelfstandig een eenvoudige probleemanalyse uit te voeren en deze
uit te werken in een werkende, gebruikersvriendelijke relationele
databasetoepassing.
In het boek wordt ieder onderwerp eerst besproken en toegelicht,
waarbij volop gebruik gemaakt is van relevante schermafdrukken.
Vervolgens wordt er bij ieder onderwerp een opgave aangeboden
waarin de theoretische kennis direct praktisch kan worden toege-
past. In de opgaven wordt een aantal bestaande databases gebruikt.
Op de hierin opgeslagen gegevens moeten vervolgens de nodige
bewerkingen worden uitgevoerd.
Copyright 2007 Academic Service
Dat abaseont wi kkel i ng 4 ( Access 2003) vi
Het is niet noodzakelijk eerst het deel Informatieanalyse te behan-
delen alvorens over te gaan op het deel gegevensanalyse en eventu-
eel te besluiten met SQL. De delen staan los van elkaar en kunnen
dus in willekeurige volgorde naast of na elkaar gebruikt worden.
Uiteraard moet er bij dit boek gewerkt kunnen worden met
Microsoft Access versie 2003 in de Nederlandse versie. De bij dit
boek behorende databases zijn te vinden op de cd-rom die u achter
in het boek aantreft.
Bij dit boek is een docentenhandleiding beschikbaar. Hierin is per
hoofdstuk toegelicht op welke wijze het betreffende hoofdstuk zou
kunnen worden behandeld. Verder wordt bij de in het boek opgeno-
men vragen extra toelichting gegeven.
Daarnaast zijn de antwoorden (querys) van het laatste hoofdstuk,
werken met SQL, beschikbaar. Bovendien zijn er cases om de
deelnemers extra te laten oefenen met het opzetten, inrichten en
gebruiken van databases. Een voorbeeld van een uitgewerkte case
is te vinden in bijlage C.
De eerste serie cases richt zich met name op de eerste zeven hoofd-
stukken van het boek, dus normaliseren, eenvoudige bewerkingen
in Access en het werken met rapporten en formulieren.
De tweede serie cases richt zich op het werken met SQL. Daarbij is
ook een vrij grote database beschikbaar.
Iedere serie cases bestaat uit 18 verschillende opgaven. De opgaven
zijn in Word-formaat beschikbaar en dus eventueel nog aan te pas-
sen aan uw eigen wensen.
Cases worden voortdurend aangepast of vernieuwd. Docenten
kunnen hierover contact opnemen met de auteurs via e-mail.
Ook vragen of opmerkingen zijn welkom. De adressen zijn:
b.j.groenendijk@hro.nl en i.s.korpershoek@hro.nl.
Ben Groenendijk februari 2007
Ies korpershoek
Copyright 2007 Academic Service
vii
Inhoud
Inleiding xiii
1 Gegevens en betrouwbaarheid 1
1.1 Gegevens en informatie 1
1.2 Integriteit 2
1.3 Consistentie en redundantie 4
1.4 Klassieke en moderne wijze van gegevensopslag 6
1.5 Samenvatting 10
2 Relationele databases 13
2.1 Databasemanagementsysteem 13
2.2 Relationele databases 16
2.3 Samenvatting 21
3 Normaliseren, inleiding 23
3.1 Stap 1, de nulde normaalvorm 23
3.2 Stap 2, de eerste normaalvorm 28
3.3 Stap 3, de tweede normaalvorm 31
3.4 Stap 4, de derde normaalvorm 33
3.5 Entiteit Relatie Diagram (ERD) 36
3.6 Samenvatting 40
4 Normaliseren, verdieping 47
4.1 Dubbele (geneste) repeterende groepen 47
4.2 Dubbele (opeenvolgende) repeterende groepen 52
4.3 Opmerkingen met betrekking tot normaliseren 56
4.4 Integreren 57
4.5 Datadictionary 60
4.6 Samenvatting 62
5 Eenvoudige bewerkingen in Access 69
5.1 Inleiding 69
5.2 Het programma Access starten 70
5.3 De database en de tabel creren 71
5.4 Een bestaande database openen 77
5.5 Records manipuleren 80
Copyright 2007 Academic Service
Dat abaseont wi kkel i ng 4 ( Access 2003) viii
5.6 De bestandsweergave wijzigen 85
5.7 Afdrukken van gegevens 88
5.8 Met meerdere tabellen tegelijkertijd werken 90
5.9 Gegevens selecteren en manipuleren 100
5.10 Rapporten 124
5.11 Formulieren 135
5.12 Webpaginas 140
6 Uitgebreide formulieren 145
6.1 Keuzemogelijkheden 145
6.2 Afbeeldingen OLE-objecten 151
6.3 Keuzelijsten 156
6.4 Hoofd- en subformulieren 165
6.5 Tabbladen 174
6.6 Opdrachtknoppen 180
6.7 Draaitabellen/Draaigraeken 185
6.8 Webpaginas 198
7 Uitgebreide rapporten 211
7.1 Rapport zonder duplicaten 211
7.2 Rapport met groepen 216
7.3 Rapport met meerdere groepen 236
8 Macros 247
8.1 Een eenvoudige macro 248
8.2 Geavanceerde macros 253
9 Het bouwen van een toepassing 271
9.1 Tabellen en relaties 272
9.2 Menustructuur 275
9.3 De formulieren 277
9.4 De rapporten 304
9.5 Schakelborden 328
10 SQL, Structured Query Language 341
10.1 Inleiding 341
10.2 Begrippen 342
10.3 Opbouw hoofdstuk 343
Copyright 2007 Academic Service
I nhoud ix
10.4 Database Bibliotheek (theorieopdrachten) 344
10.5 Database Alco (praktijkopdrachten) 345
10.6 Opvragingen uit n tabel 345
10.7 SQL gebruiken in Access 351
10.8 Eenvoudige opvragingen uit meerdere tabellen 355
10.9 Wijzigen van de volgorde 359
10.10 Rekenkundige bewerkingen 361
10.11 Groeperen 364
10.12 Subquerys 370
10.13 Speciale joins en views 380
10.14 SQL, meer mogelijkheden 384
Appendix A Veldeigenschappen 387
Appendix B Opties 403
Appendix C Een grote, uitgewerkteopdracht 413
Index 433
Copyright 2007 Academic Service
Copyright 2007 Academic Service
Inleiding
Datases zijn in het dagelijkse leven niet meer weg te denken. Van
een afgestudeerde op MBO-niveau mag worden verwacht dat hij/
zij kennis van en inzicht in databases heeft. Naast de theoretische
kennis dienen er ook praktische vaardigheden aanwezig te zijn.
Dit boek beoogt de kennis van en vaardigheden met databases aan
te reiken. Dat gebeurt door stapsgewijs in te gaan op het totale pro-
ces van het (op papier) ontwerpen van een database tot het gebruik
van de database (in Microsoft Access) om de benodigde informatie
te genereren.
Allereerst zal het ontwerpen van databases ter sprake komen.
Hierbij wordt de techniek van het normaliseren gehanteerd.
Uitgaande van een informatiebehoefte zal via het normalisatie-
proces de informatiestructuur bepaald worden. Deze structuur
wordt vervolgens grasch weergegeven door middel van een
Entiteit Relatie Diagram. Hierbij geldt dat hoofdstuk 3 de basis legt
en hoofdstuk 4 een verdieping aanbrengt. Hierna wordt besproken
hoe een gevonden gegevensstructuur kan worden omgezet in een
database, gebruikmakend van het programma Access. De database
wordt gebouwd, gevuld en ten slotte gebruikt voor het opvragen
van informatie.
De volgende stap die wordt gezet, is die waarbij de wijze van gege-
vens opvragen steeds meer geautomatiseerd zal worden. Er zullen
formulieren, rapporten en macros worden ontworpen en gebruikt.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
xii
De ontworpen rapporten, formulieren en macros worden vervol-
gens gebruikt bij het opzetten van een applicatie. Bij het opzetten
van de applicatie zal niet worden geprogrammeerd in de zin van
het ouderwetse coderen. De applicatie wordt gebouwd door op
grasche wijze bouwstenen te selecteren, deze iets aan te passen
en vervolgens samen te voegen tot professioneel ogende applica-
ties.
Omdat databases algemeen toepasbaar zijn, wordt het boek af-
gesloten met een hoofdstuk waarin de standaard vraagtaal SQL
wordt behandeld. Deze taal wordt niet alleen door Access onder-
steund, maar door vrijwel ieder databasemanagementpakket dat op
de markt te verkrijgen is. Enige kennis van deze taal is dus onont-
beerlijk.
Copyright 2007 Academic Service
1 Gegevens en
betrouwbaarheid
In dit hoofdstuk wordt aan de hand van voorbeelden de historie
van klassieke gegevensopslag in computersystemen besproken. In
de begintijd van de automatisering werd veelal per afdeling geauto-
matiseerd, eerst de afdeling Boekhouding, dan de Inkoopafdeling,
vervolgens de afdeling Verkoop en ten slotte het Voorraadbeheer.
Dit wordt eilandautomatisering genoemd. Die verschillende eiland-
jes kunnen niet of slecht gegevens met elkaar uitwisselen. Hierdoor
worden er bijvoorbeeld 30 scooters aan een winkel verkocht die
helemaal niet in het magazijn staan. Het informatiesysteem wordt
dan onbetrouwbaar genoemd. Hiervoor is uiteraard een oplossing
gevonden, de database. De ontwikkeling van eilandautomatisering
naar database wordt in dit hoofdstuk toegelicht. Verder worden
belangrijke begrippen zoals integriteit, consistentie, redundantie en
betrouwbaarheid toegelicht.
1.1 Gegevens en informatie
Computers zijn niet meer weg te denken uit onze maatschappij.
Ze nemen een steeds belangrijker plaats in. Wij kunnen onder
andere met de computer spelletjes spelen, e-mailen, internet-
ten, werkstukken maken met behulp van een tekstverwerker of
multimediapresentaties maken. Bedrijven en instellingen kunnen
niet meer functioneren zonder computers. Alle gegevens voor de
bedrijfsvoering worden opgeslagen in de computer. Denk hierbij
aan klantgegevens, artikelgegevens, leveranciergegevens, produc-
tiegegevens. Van onszelf liggen ook bij vele instanties gegevens
opgeslagen. Van iedere volwassen inwoner van Nederland liggen
de persoonsgegevens in honderden computersystemen opgesla-
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
2
gen. Denk hierbij aan de banken, verzekeringsmaatschappijen,
belastingdienst, gemeentelijke instellingen, sportverenigingen,
motorrijtuigadministratie, school, krantadministratie, salarisadmi-
nistratie, enzovoort.
De begrippen gegevens en informatie worden nogal eens door
elkaar gehaald. Gegevens zijn feiten of gebeurtenissen die op een
bepaalde manier zijn vastgelegd. Bijvoorbeeld adresgegevens op
papier, maar ook het vastleggen van diezelfde gegevens op magne-
tisch materiaal zodat de computer ze kan lezen, valt onder deze
denitie, net als fotos, geluid of beelden. Informatie is de beteke-
nis die aan die gegevens ontleend kan worden. Een telefoonboek
staat vol met gegevens. De gegevens daarin worden informatie als
we het telefoonnummer van iemand willen opzoeken. Het gevon-
den telefoonnummer betekent iets voor ons. In dezelfde gegevens
kunnen verschillende soorten informatie zitten. Na een repetitie-
week worden per klas alle behaalde cijfers van de leerlingen op een
lijst weergegeven. Voor de leerling zijn de behaalde cijfers infor-
matie. Voor een docent Engels zijn in hetzelfde overzicht de cijfers
die voor het vak Engels zijn behaald informatie.
1.2 Integriteit
Gegevens in computersystemen moeten zo opgeslagen worden
dat ze eenvoudig zijn op te vragen en dat ze eenvoudig gemuteerd
kunnen worden. Onder muteren verstaan we het toevoegen, wij-
zigen of verwijderen van gegevens. Tevens mogen die gegevens
geen onjuistheden of onduidelijkheden bevatten. We noemen dit de
integriteit van het computersysteem. Hiermee bedoelen we dat de
gegevens in het computersysteem een juiste weergave moeten zijn
van de werkelijkheid. Het cijfer zeven voor een repetitie wiskunde
moet ook op de computeruitdraai van de cijferlijst een zeven zijn
en niet een vier. Als de computer toont dat het banksaldo 120 euro
in het rood is, terwijl het in het zwart moet zijn, is er duidelijk iets
mis. Het computersysteem geeft dan niet de werkelijkheid weer, de
integriteit van het computersysteem voldoet niet, het is een onbe-
trouwbaar informatiesysteem. Dit lijkt misschien allemaal logisch,
maar dat is in vele praktijkgevallen nog niet het geval. Met twee
voorbeelden zullen we dit duidelijk maken.
gegevens
informatie
muteren
integriteit
Copyright 2007 Academic Service
1 Gegevens en betrouwbaarheid
3
Na een verhuizing ontvangen mensen nogal eens onduidelijke brie-
ven zoals in de volgende brief:
Er is met deze brief iets merkwaardigs aan de hand. Het adres in
Capelle aan den IJssel (links bovenin) is het nieuwe en correcte
adres. Op diezelfde brief staat ook het oude adres in Ridderkerk.
Volgens de basketbalvereniging is dat ook het nieuwe adres. De
persoonsgegevens staan dus ten minste twee keer opgeslagen in
hun computersysteem, waarbij de adreswijziging maar n keer
is doorgevoerd. De gegevens zijn dus op een onjuiste manier op-
geslagen. Mevrouw Den Hoed zal ongetwijfeld weten waar zij nu
woont, maar de basketbalvereniging heeft nu twee tegenstrijdige
adressen geregistreerd en weet het niet meer.
Een ander voorbeeld: bij een verhuizing naar een koopwoning
wordt vaak ook een nieuwe hypotheek afgesloten. Vanwege het
nancile risico is het gebruikelijk om naast de hypotheek ook een
levensverzekering af te sluiten. Zo ook in dit voorbeeld. Naast de
hypotheek zijn bij dezelfde maatschappij twee levensverzekeringen
afgesloten, voor elke partner een. Na ontvangst van de sleutel van
het nieuwe huis is een adreswijziging naar de verzekeringsmaat-
schappij gestuurd. Tot zover geen problemen, maar in de maand
januari kwamen er geen overzichten van de levensverzekeringen.
Bij navraag naar het uitblijven van deze overzichten werd aan de
telefoon gevraagd om de postcode en het huisnummer. Deze bleken
Basketbalvereniging Dunky
Postbus 2050
3070 AB Rotterdam
M.C. den Hoed
Leiweg 12
2907 TV Capelle a/d IJssel
Geachte mevrouw Den Hoed,
Hierbij ontvangt u uw nieuwe teamgegevens en het trainingschema voor het
komende basketbalseizoen. Hieronder staan de gegevens zoals deze in ons
computersysteem liggen opgeslagen.
M.C. den Hoed
Larenstraat 26
2984 EK Ridderkerk
Team: dames 1
Training: maandag van 19.00-20.30, woensdag van 19.30-21.00
Indien er onvolledige of onjuiste gegevens zijn vermeld, kunt u telefonisch con-
tact opnemen met de heer Verkerk (010 4830554).
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
4
echter niet in het systeem van de verzekeringsmaatschappij voor te
komen. Toch is er meermalen post op het nieuwe adres ontvangen.
Bij verder speurwerk bleek dat de levensverzekeringsoverzichten
naar het oude adres gestuurd waren, omdat dat nog steeds in de
administratie als juist vermeld stond. Blijkbaar was de adreswijzi-
ging wel aangebracht bij de afdeling Hypotheken maar niet in de
levensverzekeringadministratie. Na deze constatering en de aan-
passing bij de levensverzekeringsmaatschappij kwamen al snel de
gegevens van de levensverzekering. De adresgegevens waren dus
in twee verschillende computersystemen opgeslagen.
1.3 Consistentie en redundantie
De gegevens zouden opgeslagen kunnen zijn zoals in guur 1.1. In
computertermen noemen we dit bestanden of tabellen.
Figuur 1.1
Levensverzekering
Polis- Naam Adres Postcode Plaats Polisbedrag Premie
nummer
6798316 R. Ederzeel Hoofdweg 67 1067 RT Amsterdam 191.000,00 62,50
6798317 T. de Vries Steenstraat 34 1380 VB Weesp 161.000,00 40,50
6798318 E. van der Nieuwendam 67 1621 AP Hoorn 145.000,00 124,80
Wouden
6798319 E.R. Spruyt Ringweg 56 1200 GH Hilversum 127.000,00 113,90
6798320 B.J. Larenstraat 26 2984 EK Ridderkerk 168.000,00 48,50
Groenendijk
.
Hypotheek
Hypo- Naam Adres Postcode Plaats Hypotheek Rente
nummer Bedrag Perc.
33-812347 R. van Dam Loefweg 56 3965 JJ Houten 113.500,00 6,1
33-812348 T. de Vries Steenstraat 34 1380 VB Weesp 191.000,00 5,9
33-812349 R. Ederzeel Hoofdweg 67 1067 RT Amsterdam 113.500,00 5,8
33-812350 B.J. Leiweg 12 2907 TV Capelle a/d 127.000,00 6,0
Groenendijk IJssel
33-812351 E. van der Nieuwendam 67 1621 AP Hoorn 181.500,00 5,9
Wouden
33-812352 R. van Dam Loefweg 56 3965 JJ Houten 168.000,00 5,5
.
Copyright 2007 Academic Service
1 Gegevens en betrouwbaarheid
5
Merk op dat niet iedereen die een hypotheek afsluit ook voorkomt
bij de levensverzekeringen. Men kan namelijk zon verzeker-
ing al bij een andere maatschappij hebben. Daarnaast kan een
levensverzekering afgesloten worden zonder een hypotheek. De
gegevens kunnen dus in die beide systemen in een andere volgorde
voorkomen.
Als een hypotheek gelijktijdig met een levensverzekering wordt
afgesloten, komen in beide bestanden nieuwe vermeldingen. De
adresgegevens worden dan twee keer opgeslagen. Hierdoor kunnen
er problemen ontstaan, zoals in het voorbeeld van guur 1.1 bij
B.J. Groenendijk. Maar ook bij R. van Dam kunnen er problemen
ontstaan. R. van Dam heeft namelijk nog een vakantiewoning
waarop ook een hypotheek is afgesloten.
In deze voorbeelden zijn de gegevens in tegenspraak met elkaar.
Groenendijk woont volgens de computer in Ridderkerk n in
Capelle a/d IJssel. Met een moeilijk woord zeggen we dat de gege-
vens inconsistent (onbetrouwbaar) zijn. Het is dus niet zo gemak-
kelijk om gegevens in een computersysteem op te slaan en ervoor
te zorgen dat de gegevens consistent blijven. We moeten er dan
voor zorgen dat dezelfde gegevens niet meerdere keren opgeslagen
worden. Het meerdere keren opslaan van gegevens noemt men
redundantie. Redundantie betekent overtolligheid. Het is helemaal
niet nodig om gegevens meerdere keren in de computer op te slaan,
n keer is voldoende.
Toch komt het meervoudig opslaan van gegevens vaak voor. In
een recent onderzoek bij een niet nader te noemen grote gemeente
bleken persoonsgegevens in 37 verschillende computerbestanden
opgeslagen te zijn! Hoe kan zoiets ontstaan met onze moderne
computers? Of liever, hoe komen we ervan af? Daarvoor moeten
we een aantal jaren in de historie teruggaan.
De levensverzekeringmaatschappij ging automatiseren. Hiervoor
werd een computerprogramma (applicatie) gemaakt waarmee de
gegevens ingevoerd, opgeslagen en afgedrukt konden worden.
Later ging die levensverzekeringmaatschappij ook hypotheken ver-
strekken. Hiervoor werd ook een applicatie gemaakt waarmee men
de afgesloten hypotheken kon registreren. Bij het verkopen van de
hypotheken bemerkte men dat de klanten ook graag een inboe-
inconsistent
redundantie
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
6
delverzekering en opstalverzekering (verzekeringen tegen brand,
waterschade, enzovoort) wilden afsluiten. Die gingen ze dus ook
verkopen en er moesten opnieuw twee applicaties gemaakt worden
voor de verkoop van die verzekeringen. Hierdoor is de situatie
zoals afgebeeld in guur 1.2 ontstaan. De rechthoeken stellen de
computerprogrammas voor en de cilinders de bestanden (tabellen)
met de gegevens.
De gegevens worden in vier verschillende computersystemen
opgeslagen. Dit noemen we ook wel eilandautomatisering. Iedere
afdeling werkt op zijn eigen eilandje. Hierdoor worden gegevens
meerdere keren opgeslagen. Niet alleen de adresgegevens. Een
hypotheek moet een onderpand hebben en hiervoor is onder andere
de waarde en het bouwjaar van de woning noodzakelijk. Maar de
waarde en het bouwjaar van de woning is ook nodig voor de
opstalverzekering. Om aan de nadelen hiervan tegemoet te komen
is een oplossing bedacht. De vier applicaties die ze gebruiken,
zijn verbeterd door de gezamenlijke gegevens apart op te slaan.
Hierdoor kunnen de verschillende afdelingen gebruikmaken van
n klantenbestand en n woningbestand, zie guur 1.3.
Gegevens worden nu dus niet meer dubbel opgeslagen (geen redun-
dantie) en inconsistentie (onbetrouwbaarheid) wordt voorkomen.
1.4 Klassieke en moderne wijze van gegevensopslag
Dit lijkt een mooie oplossing, maar er ontstaan nieuwe problemen.
Laten we als voorbeeld het klantenbestand nemen. Hierin liggen
de klantgegevens opgeslagen. De klantgegevens die opgeslagen
liggen zijn klantnummer, naam, adres, postcode en plaats. Van
Figuur 1.2
Hypotheek
Hypotheek
Levens-
verzekering
Inboedel-
verzekering
Opstal-
verzekering
Levens-
verzekering
Inboedel-
verzekering
Opstal-
verzekering
Copyright 2007 Academic Service
1 Gegevens en betrouwbaarheid
7
iedere klant worden die vijf gegevens opgeslagen, dit wordt de
gegevensstructuur van het klantenbestand genoemd. Stel dat de
afdeling Levensverzekeringen ook graag de geboortedatum van
een klant wenst op te slaan. De gegevensstructuur van het klanten-
bestand moet hiervoor aangepast worden. Er moet een zesde item
(geboortedatum) aan toegevoegd worden. Het klantenbestand moet
hiervoor geconverteerd worden. Converteren is de oude gegevens-
structuur omzetten naar de nieuwe gegevensstructuur: klantnum-
mer, naam, adres, postcode, plaats en geboortedatum. De klant-
gegevens liggen als een kralenketting opgeslagen. Bijvoorbeeld
10001, T. de Vries, Steenstraat 34, 1380 VB, Weesp, 10002,
R. Ederzeel, Hoofdweg 67, 1067 RT, Amsterdam, 10003, B.J.
Groenendijk, enzovoort. Aangezien nu ook de geboortedatum erbij
moet, worden de eerste vijf gegevens (kraal klantnummer t/m
kraal plaats) van het oude klantenbestand gelezen en deze worden
op de nieuwe ketting geregen (geschreven). Vervolgens wordt een
nieuwe kraal geboortedatum aan de nieuwe ketting toegevoegd.
Vervolgens worden de volgende vijf gegevens van het oude klant-
bestand gelezen en naar het nieuwe klantenbestand geschreven.
Figuur 1.3
converteren
Hypotheek
Klant
Levens-
verzekering
Inboedel-
verzekering
Opstal-
verzekering
Woning
Hypotheek Levens-
verzekering
Inboedel-
verzekering
Opstal-
verzekering
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
8
Vervolgens wordt de geboortedatum van die klant aan het nieuwe
bestand toegevoegd. Dit proces gaat net zo lang door tot alle klan-
tengegevens geconverteerd zijn.
Het klantenbestand is nu geconverteerd zodat klantnummer, naam,
adres, postcode, plaats en geboortedatum van een klant bekend
zijn. Het computerprogramma van de afdeling Levensverzekering
moet nog aangepast worden aan de nieuwe situatie. De geboor-
tedatum was in het oude computerprogramma niet aanwezig en
moet dus worden toegevoegd, zodat deze onder andere ingevoerd
en afgedrukt kan worden. Nadat het computerprogramma van de
afdeling Levensverzekering is aangepast, verloopt voor de afdeling
Levensverzekering alles naar wens. Er werd zelfs een klein feestje
georganiseerd. Op het moment dat er feest werd gevierd op de af-
deling Levensverzekeringen sloegen schijnbaar de computers van
de andere afdelingen op hol. Wat is daar namelijk aan de hand? De
applicaties van de overige afdelingen waren niet aangepast, ze zijn
immers niet in de geboortedatum genteresseerd. Maar ze maken
nu wel gebruik van de nieuwe gegevensstructuur, dus inclusief
de geboortedatum. Het computerprogramma van bijvoorbeeld de
afdeling Hypotheken werkt nog steeds met klantnummer, naam,
adres, postcode en plaats. Als nu de klantgegevens van klantnum-
mer 10003 opgeroepen moet worden, weet de computer dat het de
derde klant is (aangenomen dat 10001 het laagste klantnummer
is). Het computerprogramma werkt volgens het principe van de
kralenketting. De derde klant betekent, sla twee keer vijf kra-
len (klantnummer, naam, adres, postcode en plaats) over en lees
vervolgens kraal elf (klantnummer) tot en met kraal vijftien
(plaats). Echter, door de nieuwe structuur van het klantenbestand
is de elfde kraal nu de plaats van een klant en de twaalfde kraal
geen naam, maar de geboortedatum. Hierdoor verschijnt op het
Copyright 2007 Academic Service
1 Gegevens en betrouwbaarheid
9
beeldscherm van de afdeling Hypotheken volslagen onzin en denkt
men dat de computer op hol is geslagen.
Na enig onderzoek komt men tot de ontdekking dat men de appli-
caties van de andere afdelingen ook moet aanpassen aan de nieuwe
gegevensstructuur van het klantenbestand, ook al zijn ze niet ge-
interesseerd in de geboortedatum van een klant. In plaats van vijf
gegevens (klantnummer tot en met plaats) moeten in de nieuwe
situatie zes gegevens (klantnummer tot en met geboortedatum)
per klant verwerkt worden. Als een afdeling meer gegevens van
een klant nodig heeft, vergt dat grote aanpassingen aan de compu-
terprogrammas voor alle andere afdelingen die van het klanten-
bestand gebruikmaken, ook al zijn ze in die nieuwe gegevens niet
genteresseerd.
De moderne manier van gegevensopslag voorziet in een oplos-
sing van het hiervoor genoemde probleem. Die moderne manier
van gegevensopslag noemen we een database (gegevensbank).
De oude manier van gegevensopslag noemen we sindsdien klas-
sieke bestandsorganisatie. Er zijn nog veel bedrijven en instellin-
gen die gebruikmaken van die klassieke gegevensopslag. Het zijn
veelal bedrijven die in een vroeg stadium zijn gaan automatiseren,
zoals banken, nancile instellingen, belastingdienst en olie-
maatschappijen. Dit wordt de wet van de remmende voorsprong
genoemd. Het millenniumprobleem kwam voor een groot deel op
rekening van die systemen. En daar werden wereldwijd miljarden
euros aan besteed. Het wil overigens niet zeggen dat die systemen
slecht zijn, ze voldoen uitstekend. Ze zijn echter kostbaar in het
onderhoud. Denk hierbij aan een enkele wijziging in de gegevens-
structuur. Maar ook bij moderne systemen kunnen problemen
ontstaan als bijvoorbeeld twee bedrijven fuseren. Ook al hebben
database
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
10
ze beide een modern computersysteem voor de gegevensopslag, na
de fusie hebben ze twee moderne systemen waarin klantgegevens
opnieuw dubbel opgeslagen kunnen liggen. Die twee systemen
moeten dan samengevoegd (gentegreerd) worden tot n nieuw
gentegreerd computersysteem. Daar zijn hoge kosten aan verbon-
den.
In het volgende hoofdstuk zullen we het begrip database toelichten
en in het bijzonder de relationele database.
1.5 Samenvatting
In dit eerste hoofdstuk hebben we besproken wat het verschil
is tussen gegevens (feiten) en informatie (betekenis van die ge-
gevens). Bij eilandautomatisering (klassieke bestandsorganisatie)
worden dezelfde gegevens meerdere keren opgeslagen (redun-
dantie). Hierdoor moeten wijzigingen in die gegevens meerdere
keren doorgevoerd worden. Wordt dit niet consequent gedaan, dan
ontstaan er tegenstrijdigheden in het informatiesysteem (inconsis-
tentie). Om die problemen op te lossen zijn databases ontworpen.
Hierin kunnen de gegevens voor alle bedrijfsprocessen eenduidig
worden opgeslagen en gewijzigd. De mate van juistheid van de in-
formatie die het informatiesysteem produceert, wordt de integriteit
van het informatiesysteem genoemd.
Opgaven
1. Waarom is in de klassieke bestandsorganisatie de kans op inconsis-
tentie (onbetrouwbaarheid) erg groot?
2. Wat wordt verstaan onder redundantie (overtolligheid)?
3. Wat wordt verstaan onder de integriteit van het computersysteem?
4. Converteren van computergegevens, wat bedoelt men daarmee?
5. Waarom zijn computersystemen die gebruikmaken van de klas-
sieke bestandsorganisatie kostbaar in het onderhoud?
Copyright 2007 Academic Service
1 Gegevens en betrouwbaarheid
11
1 Gegevens en betrouwbaarheid
11
6. Bij voetbalvereniging HGS wordt de nancile administratie ver-
zorgd door de penningmeester, de heer Van Vliet. De ledenadmi-
nistratie wordt verzorgd door de heer Rietman. Hiervoor gebruiken
ze beiden hun priv-computer. In de ledenadministratie worden de
adresgegevens en elftalgegevens vastgelegd. De penningmeester
registreert op de computer de adresgegevens en de maandelijkse
betalingen.
a. Welke gegevens zijn redundant opgeslagen?
b. Geef twee voorbeelden waarbij inconsistentie kan ontstaan.
c. Welke afspraken moet de penningmeester maken met de leden-
administrateur om de gegevens betrouwbaar te houden?
7. Veel grote ondernemingen maken nog gebruik van de klassieke
bestandsorganisatie. Waarom is dat?
8. De afdeling Levensverzekering van de hypotheekmaatschappij
wenst voor vrouwen een korting toe te kennen op de maandelijkse
premie. Vrouwen blijken langer te leven dan mannen, waardoor
een korting op de premie mogelijk is. In de klantgegevens moet
hiervoor een nieuw item Geslacht worden toegevoegd, waarin men
Man of Vrouw kan invullen. Wat heeft dat voor gevolgen voor de
automatiseringsafdeling van de afdeling Levensverzekering en
voor de overige afdelingen die van het klantenbestand gebruik-
maken?
Copyright 2007 Academic Service
Copyright 2007 Academic Service
2 Relationele databases
In dit hoofdstuk wordt uitgelegd wat een databasemanagement-
systeem is. Ook wordt toegelicht wat een datamodel en een relati-
onele database is, en verklaren we enkele begrippen uit de gege-
vensanalyse.
2.1 Databasemanagementsysteem
Een moderne manier van gegevensopslag in een computersysteem
is een database. Hierin zijn de problemen bij gegevensopslag zoals
in hoofdstuk 1 beschreven, opgelost. Gezamenlijke gegevens wor-
den voor de verschillende afdelingen niet meer dubbel opgeslagen,
waardoor redundantie (overtolligheid) en inconsistentie (tegenstrij-
digheid) van gegevens wordt voorkomen. Bij een database hoort
een databasemanagementsysteem, afgekort DBMS. Zon DBMS
is afbeeld in guur 2.1. Dit systeem vormt een sluis tussen diverse
computerprogrammas en de gegevensbestanden. Het DBMS regelt
DBMS
Figuur 2.1
Hypotheek Levens-
verzekering
Inboedel-
verzekering
Opstal-
verzekering
Woning
Hypotheek Levens-
verzekering
Inboedel-
verzekering
Opstal-
verzekering
DBMS
Klant
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
14
de toevoegingen en wijzigingen in de database en zorgt er dus voor
dat er geen redundantie en inconsistentie kan optreden.
In het databasemanagementsysteem worden de volledige
gegevensstructuren van alle benodigde bestanden vastgelegd. Zo
wordt daar de gegevensstructuur voor het klantenbestand vast-
gelegd, klantnummer, naam, adres, postcode, plaats en geboor-
tedatum. Dit is de verzameling gegevens die de vier afdelingen
nodig hebben voor de klantgegevens. Het wil niet zeggen dat een
afdeling alle gegevens nodig heeft, maar de gegevens die ze nodig
hebben, zitten er wel bij. Zo wordt voor alle bestanden de volledige
gegevensstructuur vastgelegd. Dit noemen we het volledige data-
model van de database. Het ontwerpen van het datamodel wordt in
hoofdstuk 3 en hoofdstuk 4 uitgelegd. Het datamodel dat op papier
is ontworpen, wordt ook wel conceptueel of functioneel datamodel
genoemd.
Nadat alle volledige gegevensstructuren zijn vastgelegd, wordt
vervolgens per afdeling vastgelegd welke gegevens zij nodig heb-
ben uit de verschillende bestanden. Zo wordt voor de afdeling
Hypotheken vastgelegd dat zij van het klantenbestand alleen klant-
nummer, naam, adres, postcode en plaats kunnen oproepen. De
geboortedatum hebben zij niet nodig. De geboortedatum wordt
als het ware verborgen voor de afdeling Hypotheken. Net zoals in
een spreadsheetprogramma kolommen verborgen kunnen wor-
den. Mocht iemand van de klantenadministratie van de afdeling
Hypotheken een overzicht wensen van alle bekende klantengege-
vens, dan krijgt deze van alle klanten alleen klantnummer, naam,
adres, postcode en plaats te zien. Ondanks dat die persoon alle
gegevens heeft opgevraagd, krijgt deze de geboortedatums van de
klanten niet te zien. Voor de afdeling Hypotheken zijn dat immers
geen relevante gegevens. De afdeling Hypotheken ziet als het ware
van het klantenbestand alleen klantnummer, naam, adres, postcode
en plaats. Zo wordt voor iedere afdeling vastgelegd welke gegevens
ze uit welke gegevensbestanden mogen zien. Men noemt dit de
view op de database, zoals men tegen de database aankijkt. De
volledige structuur van de database is alleen bij het DBMS bekend.
Diegene die het DBMS beheert, noemt men de database-admini-
strator. De database-administrator legt de volledige structuur vast
en per afdeling de view op de database. Ook kan de database-
administrator de view per afdeling wijzigen, vergroten of ver-
kleinen.
conceptueel of
functioneel
view
database-
administrator
Copyright 2007 Academic Service
2 Relationele database
15
Als nu de gegevensstructuur van een bestand aangepast moet wor-
den, wordt dat doorgegeven aan de database-administrator. Stel dat
de afdeling Inboedelverzekeringen het telefoonnummer van een
klant wenst, dan wijzigt de database-administrator de gegevens-
structuur van het klantenbestand door het telefoonnummer toe te
voegen. Nadat de database-administrator dat heeft gedaan, zal het
DBMS vragen om een bevestiging. Hierna wordt door het DBMS
de conversie van de gegevens die liggen opgeslagen automatisch
uitgevoerd (omzetten van de gegevens naar de nieuwe structuur,
zoals is uitgelegd in hoofdstuk 1). De computerprogrammas van
bijvoorbeeld de afdeling Hypotheken ondervinden hier geen enke-
le hinder van. Het enige dat zij zien van het klantenbestand is
klantnummer, naam, adres, postcode en plaats. Al zouden er nog
tien andere items van klanten zijn vastgelegd, zij weten dat niet,
waarom zouden ze het ook moeten weten?
We hebben al gezegd dat de view op de database wordt vastge-
legd per afdeling. Het kan zelfs verder gaan. We kunnen zelfs per
persoon aangeven wat zijn view op de database is. Veel gegevens
zijn privacygevoelig, vertrouwelijke bedrijfsgegevens of volkomen
nutteloos op deze werkplek. Eigenlijk hoort een medewerker alleen
de beschikking te krijgen over voor hem relevante gegevens. De
medewerker heeft een autorisatie voor deze gegevens, oftewel toe-
stemming om deze gegevens te gebruiken. Zo kan bijvoorbeeld al-
leen de personeelsfunctionaris het salaris van een werknemer zien
en de andere personen die gebruikmaken van de werknemergege-
vens niet. Vertegenwoordigers die in rayons werken, bijvoorbeeld
provincies, zien alleen de klantgegevens uit hun rayon. Een over-
zicht van alle klanten levert dan bijvoorbeeld alleen maar klanten
uit de provincie Utrecht.
Met autorisatie kunnen we ook vastleggen dat een gebruiker de
gegevens alleen mag raadplegen. Het toevoegen, wijzigen of ver-
wijderen van gegevens is dan niet toegestaan. Natuurlijk zijn alle
variaties hierop mogelijk, zoals wel toevoegen van nieuwe gege-
vens maar niet het verwijderen van gegevens.
Het DBMS kan nog meer taken uitvoeren, zoals back-ups ma-
ken en de database over meerdere computers verspreiden als dat
noodzakelijk is, bijvoorbeeld bij grote ondernemingen. Het DBMS
zorgt er ook voor dat twee personen niet tegelijkertijd hetzelfde
autorisatie
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
16
gegeven kunnen wijzigen. Dit wordt record-locking genoemd. We
zullen dit toelichten met een voorbeeld. Het bedrijf Sunparks ver-
huurt vakantiehuisjes in Nederland en Belgi. Die vakantiehuisjes
moeten geboekt worden door Sunparks te bellen. Er zijn meerdere
personen die de reserveringen boeken. De beide verkopers krijgen
tegelijkertijd een familie (Jansen en Maertens) aan de lijn, die
in dezelfde week twee huisjes willen huren. De twee verkopers
toetsen de gewenste vakantieweek in en zien nu beiden op het
beeldscherm van hun computer dat er in die week nog precies
twee huisjes vrij zijn. Tegen de familie Jansen wordt door de ene
verkoper gezegd dat er in die week nog precies twee vakantiehuis-
jes zijn. De andere verkoper vertelt mevrouw Maertens hetzelfde:
er zijn in die week nog precies twee vakantiehuisjes. Er zijn nu
vier vakantiewoningen geboekt, terwijl er maar twee vakantie-
huisjes in die periode vrij waren. Hierdoor zouden de gegevens in
de database niet meer kloppen met de werkelijkheid (integriteit).
Uiteraard helpt het DBMS ons met dit probleem. De verkoper die
als eerste de gegevens van de vrije vakantiehuisjes via de compu-
ter oproept, blokkeert tegelijkertijd die gegevens: record-locking.
Iedere andere verkoper kan die gegevens nog wel oproepen, maar
niet meer wijzigen. Op het beeldscherm verschijnt dan een extra
melding waarin staat dat de gegevens door een andere verkoper
zijn geblokkeerd. Nadat deze de boeking heeft afgesloten, wordt
de blokkering opgeheven en wordt het beeldscherm van de andere
verkoper aangepast aan de nieuwe gegevens (refresh). Die ziet de
twee vrije vakantiehuisjes veranderen in nul vrije vakantiehuisjes.
2.2 Relationele databases
Historisch gezien zijn er drie typen databases: eerst kwam de
hirarchische database, toen de netwerkdatabase en ten slotte de
relationele database. De verschillen in deze databases zit in de
manier waarop de gegevens worden opgeslagen om redundantie
en daardoor inconsistentie te voorkomen. De moderne databases
zijn relationele databases. We zullen de werking van de relatio-
nele databases aan de hand van een voorbeeld toelichten. Op de
afdeling Hypotheek zijn de hypotheekgegevens nog volgens de
klassieke opslagmethode opgeslagen, zie guur 2.2. Bij de afde-
ling Levensverzekeringen zijn weer andere gegevens gewenst, zie
guur 2.3, ook op de klassieke manier opgeslagen.
record-locking
Copyright 2007 Academic Service
2 Relationele database
17
Hierin is duidelijk de redundantie en inconsistentie te zien.
Klantgegevens liggen op de verschillende afdelingen dubbel op-
geslagen, waardoor inconsistentie kan optreden. Bijvoorbeeld
B.J. Groenendijk woont bij de afdeling Levensverzekering in
Ridderkerk, terwijl dat Capelle a/d IJssel moet zijn. Ook binnen
n afdeling kan redundantie optreden. De klant R. van Dam heeft
twee hypotheken, zijn woning en vakantiewoning.
Bij relationele databases wordt redundantie en daardoor incon-
sistentie als volgt opgelost. Men slaat de klantgegevens van alle
afdelingen apart op en geeft aan iedere klant een uniek klantnum-
mer. De gegevens van iedere klant worden slechts n keer opge-
slagen. De hypotheekgegevens en polisgegevens van de klanten
worden daarna via het klantnummer gekoppeld (gerelateerd) aan
de klantgegevens, zie guur 2.4.
Hypotheek
Hypo- Naam Adres Postcode Plaats Hypotheek Rente
nummer Bedrag Perc.
33-812347 R. van Dam Loefweg 56 3965 JJ Houten 113.500,00 6,1
33-812348 T. de Vries Steenstraat 34 1380 VB Weesp 191.000,00 5,9
33-812349 R. Ederzeel Hoofdweg 67 1067 RT Amsterdam 113.500,00 5,8
33-812350 B.J. Leiweg 12 2907 TV Capelle a/d 127.000,00 6,0
Groenendijk IJssel
33-812351 E. van der Nieuwendam 67 1621 AP Hoorn 181.500,00 5,9
Wouden
33-812352 R. van Dam Loefweg 56 3965 JJ Houten 168.000,00 5,5
.
Figuur 2.2
Figuur 2.3 Levensverzekering
Polis- Naam Adres Postcode Plaats Polisbedrag Premie
nummer
6798317 T. de Vries Steenstraat 34 1380 VB Weesp 161.000,00 140,50
6798318 E. van der Nieuwendam 67 1621 AP Hoorn 145.000,00 124,80
Wouden
6798319 E.R. Spruyt Ringweg 56 1200 GH Hilversum 127.000,00 113,90
6798320 B.J. Larenstraat 26 2984 EK Ridderkerk 168.000,00 148,50
Groenendijk
.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
18
Er is geen redundantie meer, alle gegevens zijn maar n keer
opgeslagen. De relatie tussen de hypotheekgegevens en klant-
gegevens verloopt via het klantnummer. Voor de levensverzeke-
ringgegevens geldt hetzelfde. Een adreswijziging van een klant
wordt in het klantenbestand (tabel Klant) aangebracht. Alle andere
afdelingen beschikken nu direct over de juiste adresgegevens. In
het DBMS moeten niet alleen de gegevensstructuren vastgelegd
worden, maar ook de relaties tussen de verschillende bestanden
(tabellen). De relatie tussen de tabel Klant en de tabel Hypotheek
Klant
Klantnr Naam Adres Postcode Plaats
10001 T. de Vries Steenstraat 34 1380 VB Weesp
10002 R. Ederzeel Hoofdweg 67 1067 RT Amsterdam
10003 B.J. Groenendijk Leiweg 12 2907 TV Capelle a/d IJssel
10004 E. van der Wouden Nieuwendam 67 1621 AP Hoorn
10005 E.R. Spruyt Ringweg 56 1200 GH Hilversum
10006 R. van Dam Loefweg 56 3965 JJ Houten
.
Hypotheek
Hyponummer Hypotheek Rente Klantnr
Bedrag Perc.
33-812347 113.500,00 6,1 10006
33-812348 191.000,00 5,9 10001
33-812349 113.500,00 5,8 10002
33-812350 127.000,00 6,0 10003
33-812351 181.500,00 5,9 10004
33-812352 168.000,00 5,5 10006
.
Levensverzekering
Polisnummer Polisbedrag Premie Klantnr
6798316 191.000,00 162,50 10002
6798317 161.000,00 140,50 10001
6798318 145.000,00 124,80 10004
6798319 127.000,00 113,90 10005
6798320 168.000,00 148,50 10003
.
Figuur 2.4
Copyright 2007 Academic Service
2 Relationele database
19
luidt: het klantnummer uit de tabel Klant is gelijk aan het klant-
nummer uit de tabel Hypotheek.
Nu kunnen we ook de denitie van een database geven. Een data-
base is een verzameling bij elkaar behorende tabellen inclusief hun
onderlinge relaties.
Als nu een hypotheek in de database wordt opgezocht, worden
automatisch de bijbehorende klantgegevens, via het klantnummer,
in de tabel klant opgezocht, zie guur 2.5.
Maar het kan ook andersom. Als de heer R. van Dam belt voor
informatie over zijn hypotheek, worden de gegevens van de heer
R. van Dam in de computer opgezocht. Door de relatie met de
tabel Hypotheek kunnen die gegevens op het beeldscherm worden
getoond, zie guur 2.6.
Tegen de heer Van Dam kan direct gezegd worden: Ik zie dat u
twee hypotheken bij ons hebt afgesloten. Wat kan ik voor u doen?
denitie database
Hypotheek
Hyponummer Hypotheek Rente Klantnr
Bedrag Perc.
33-812350 127.000,00 6,0 10003
Klant
Klantnr Naam Adres Postcode Plaats
10003 B.J. Groenendijk Leiweg 12 2907 TV Capelle a/d IJssel
Figuur 2.5
Klant
Klantnr Naam Adres Postcode Plaats
10006 R. van Dam Loefweg 56 3965 JJ Houten
Hypotheek
Hyponummer Hypotheek Rente Klantnr
Bedrag Perc.
33-812347 113.500,00 6,1 10006
33-812352 168.000,00 5,5 10006
Figuur 2.6
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
20
Door het klantnummer van Van Dam (nummeridenticatie) wor-
den automatisch de bijbehorende klant- en hypotheekgegevens
gevonden.
Hoe wordt een database ontworpen? Welke tabellen hebben we
nodig om de gegevens zonder redundantie en inconsistentie op te
slaan? Voordat we een database kunnen ontwerpen, moeten we
ons eerst afvragen welke gegevens we nodig hebben. Per werk-
plek moet vastgelegd worden welke informatie daar nodig is, de
informatiebehoefte. Dat kan een rapport zijn op papier of bepaalde
klantgegevens op het beeldscherm. Dat moet per werkplek beke-
ken worden. Een inkoper heeft andere informatie nodig dan een
verkoper. Een belastingambtenaar die de belastingaangifte van
particulieren moet vaststellen, heeft andere informatie nodig dan
zijn collega die de belastingaangifte voor bedrijven moet vaststel-
len. Uiteraard is het vaststellen van die informatiebehoefte een
ingewikkelde klus. Niet alleen moet vastgesteld worden welke
gegevens waar opgeslagen worden, maar ook vanuit welke invals-
hoeken er gewerkt wordt. Dit proces wordt informatie-analyse ge-
noemd. Daarna moeten de informatiebehoeften worden vertaald
naar gegevensstructuren, zodat de gegevens zonder redundantie en
inconsistentie worden opgeslagen. We noemen dit gegevensana-
lyse. We maken daarbij gebruik van een manier die is bedacht door
de Amerikaan Edgar Codd. Deze wordt normaliseren genoemd.
Zo ontstaat op papier de te maken database, het conceptuele of
functionele datamodel. In de volgende twee hoofdstukken wordt
het normaliseren uitgelegd. Het ontworpen datamodel wordt hierna
gebouwd met behulp van een databasepakket. Dat is software
waarin het DBMS aanwezig is, inclusief gereedschappen waarmee
we gegevens via formulieren kunnen invoeren, wijzigen, verwijde-
ren of overzichten/rapporten kunnen afdrukken.
Er zijn vele databasepakketten te koop. Voor de pcs zijn de be-
kendste pakketten Access, FoxPro en Paradox. Het databasepakket
Access van Microsoft wordt het meest gebruikt. Vanaf hoofdstuk
5 wordt dit databasepakket uitgelegd. De zware databases die door
middelgrote tot zeer grote ondernemingen worden gebruikt, zijn
bijvoorbeeld Oracle, Sybase en SQL-Server. SQL-Server is de
zware database van Microsoft. De rma Oracle is na Microsoft de
grootste softwarefabrikant ter wereld.
Access wordt veel toegepast op pcs waarbij de database lokaal
op de harde schijf van de computer wordt opgeslagen. Anderen
informatiebehoefte
informatie-analyse
gegevensanalyse
Copyright 2007 Academic Service
2 Relationele database
21
kunnen die database niet gebruiken als zij geen toegang hebben
tot de harde schijf van die computer. De grote databases worden
op de hoofdcomputer (server) in het netwerk geplaatst, waardoor
honderden personen van de gegevens in de database gebruik kun-
nen maken. Vaak is dit een ander databasepakket, zoals Oracle of
SQL-server. Omdat Access eenvoudig is in het gebruik, vooral bij
het maken van allerlei formulieren en rapporten, wordt Access ook
toegepast op pcs (clients) waarbij Access gebruikmaakt van de
Oracle-database op de server. Access wordt dan front-end software
genoemd en Oracle op de server de back-end. Access wordt dan
dus alleen gebruikt voor de in- en uitvoer, niet voor de echte
opslag. Dat doet de Oracle-database. Het front-end/back-end-prin-
cipe wordt in grotere organisaties voor hun databases veel toege-
past. De combinatie van gebruiksgemak aan de front-endkant en
degelijkheid aan de back-endkant is dan ook een heel aantrekke-
lijke. Helaas vergeten vele gebruikers eerst de informatiebehoefte
nauwkeurig te bepalen. Het normaliseren van de gegevens wordt
dan niet of slechts intutief uitgevoerd. Al snel na het werken met
de database zullen daardoor problemen ontstaan. Deze worden
dan met trucs, kunst- en vliegwerk opgelost. Uiteraard ontstaat
hierdoor weer redundantie en inconsistentie aangezien de gegevens
niet goed geanalyseerd zijn, waardoor het datamodel niet correct
is. Men kan het beste Access spelenderwijs leren door gebruik te
maken van n of twee tabellen. Maar voor een bedrijfsmatige
aanpak dient men eerst de benodigde informatie te verzamelen, te
analyseren en vervolgens te normaliseren. Met het dan ontstane
conceptuele datamodel kunnen in Access de tabellen en relaties
worden gemaakt. Dat wordt ook wel het indelen / inrichten van
de database genoemd. Het op een juiste manier leren werken met
Access wordt vanaf hoofdstuk 5 uitgelegd.
2.3 Samenvatting
In dit hoofdstuk hebben we besproken dat een relationele data-
base een verzameling tabellen is met hun onderlinge relaties. Om
de structuur van een database te ontwerpen moet eerst vastgelegd
worden wat de informatiebehoefte is. Hierin wordt bepaald wat
de gewenste uitvoer van het nieuwe computersysteem is. Die ge-
gevens worden geanalyseerd om tot een datamodel te komen. Dit
ontworpen datamodel kan vervolgens toegepast worden in een
relationele database. Een database beschikt over een database-
managementsysteem (DBMS). Hiermee kunnen de tabellen wor-
front-end/
back-end
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
22
den gemaakt, de relaties worden gelegd, de tabellen gevuld wor-
den, gegevens worden geraadpleegd, gemuteerd, enzovoort. Verder
kunnen met behulp van het DBMS rechten worden toegekend en
wordt de integriteit van de database bewaakt. De database wordt
beheerd door de database-administrator. Er zijn verschillende
databasepakketten, zoals Access, Sybase en Oracle. De Access-
database is ook te gebruiken aan de gebruikerskant (client) terwijl
de gegevens liggen opgeslagen in een grote database, zoals Oracle
(server). Access is dan de front-end- en Oracle de back-endkant.
Opgaven
1. Omschrijf in het kort de taak van het DBMS.
2. Wat wordt bedoeld met een conceptueel of functioneel datamodel?
3. De rma Innovision verkoopt computers via vertegenwoordigers.
Het is een modern bedrijf, alle gegevens liggen in een relationele
database opgeslagen. Per provincie is n vertegenwoordiger
actief. Als een vertegenwoordiger een afdruk laat maken van alle
klanten uit de database, worden alleen de klanten uit zijn provincie
afgedrukt. Hoe noemen we dit principe?
4. Wat wordt verstaan onder autorisatie?
5. Wat is de taak van de database-administrator?
6. Welke drie typen databases onderscheiden we?
7. Wat wordt bedoeld met informatie-analyse?
8. Wat is record-locking?
9. Reisorganisatie TravelCheap heeft n grote database (Oracle)
waarin alle reizen en boekingen worden opgeslagen. Bij een groot
aantal reisbureaus heeft men Access-software genstalleerd op de
lokale pcs, zodat direct reizen geboekt kunnen worden. Die boe-
kingen worden door middel van datacommunicatie direct in de
Oracle-database verwerkt. De Access-database doet alleen dienst
als in- en uitvoermedium. Hoe wordt dit principe genoemd?
Copyright 2007 Academic Service
3 Normaliseren,
inleiding
In dit hoofdstuk laten we aan de hand van een aantal concrete
voorbeelden zien hoe we er achter kunnen komen hoe we een
database moeten inrichten. Daarbij zullen we steeds uitgaan van
de overzichten, informatie, die de gebruiker van de database wenst
te zien. Als er meer dan n gebruiker is, of als er meer dan n
overzicht moet worden getoond, zullen we daar uiteraard rekening
mee houden.
Voor het bepalen van de indeling van de database bestaan verschil-
lende technieken. Wij zullen gebruikmaken van de techniek van
het normaliseren, zoals die door de Amerikaan Edgar Codd in de
jaren zeventig is opgesteld. Normaliseren houdt in dat we in een
viertal stappen de gegevens uiteenrafelen en indelen in een beperkt
aantal, overzichtelijke tabellen. De stappen die we daarbij zullen
uitvoeren, zijn klein van omvang en daardoor goed te begrijpen en
toe te passen. Hierbij geldt echter wel: oefening baart kunst. Alleen
door veel en goed te oefenen kunnen we de kunst van het normali-
seren in onze vingers krijgen.
3.1 Stap 1, de nulde normaalvorm
Uitgangspunt van het normaliseren is steeds de informatiebehoefte
van de toekomstige gebruiker van de database. De indeling en
inhoud van de tabellen wordt bepaald door de informatie die de
gebruiker wenst te zien. Stel dat een gebruiker een database wil
met daarin de gegevens van zijn muziekcollectie. Als hij aangeeft
genteresseerd te zijn in het jaar van uitbrengen van de cd, dan zul-
len we dit jaartal uiteraard moeten opnemen in de database. Als
hij aangeeft absoluut niet te willen weten door welke muziekmaat-
schappij een cd is uitgegeven, heeft het geen zin om dit gegeven
normaliseren
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
24
wel in de database op nemen. Voor een andere opdrachtgever zou
het precies andersom kunnen zijn. Die zou juist wel in de naam
van de maatschappij, maar weer niet in het jaar van uitbrengen
genteresseerd kunnen zijn. Hieruit blijkt dat we niet kunnen pra-
ten over een uniek, algemeen geldend ontwerp van een database.
We zullen ons altijd moeten baseren op de gewenste overzichten,
de informatiebehoefte. Deze behoefte kan van gebruiker tot ge-
bruiker verschillen. Het is dus noodzakelijk om tijdens het ont-
werpen van een database veel en vaak contact te hebben met de
toekomstige gebruiker. Alleen dan kunnen we ervoor zorgen dat
de indeling van de database past bij de wensen van de gebruiker.
We zullen de theorie uitleggen aan de hand van een praktijkgeval.
Paul, DJ bij de lokale radio, verzorgt driemaal per week een twee
uur durend programma waarin hij zijn favoriete muziek laat horen
en nieuwe cds onder de aandacht wil brengen. Hij krijgt hiervoor
een kleine onkostenvergoeding die hij gebruikt om zijn cd-collec-
tie langzaam uit te breiden. Aan het einde van iedere maand moet
Paul een overzicht inleveren van alle nummers die hij die maand
heeft laten horen. Aan de hand van deze overzichten zorgt de
stichting BUMA/STEMRA ervoor dat de betreffende artiesten een
kleine vergoeding krijgen.
Paul weet meestal aan het einde van de maand niet meer pre-
cies wat hij aan het begin van de maand allemaal heeft gedraaid.
Daarom maakt hij het betreffende overzicht (zie guur 3.1) direct
na aoop van het programma. Daarop staat vermeld welke num-
mers hij heeft gedraaid. Ieder nummer heeft een eigen code. Deze
code is bepaald door een van de medewerkers van het lokale ra-
diostation. Natuurlijk is van ieder nummer ook bekend wat de titel
is en wie de uitvoerende artiest(en) is/zijn. Ten slotte noteert men
ook of het nummer van een gewone cd afkomstig is of dat het op
een single cd staat. Aan het einde van de maand levert hij dan de
stapel met deze dagelijkse overzichten in. Hij is echter al een paar
keer zon dagoverzicht kwijtgeraakt, met alle gevolgen van dien.
Hij vraagt ons daarom om voor hem een database te ontwerpen
waarmee hij aan het einde van de maand het gewenste overzicht
kan maken.
Uitgangspunt voor het ontwerp van een database is dus altijd de
gewenste informatie. Vaak ligt deze wens vast in de vorm van
overzichten die met de database moeten kunnen worden gemaakt,
gegenereerd. We zullen daarom bij het normaliseren altijd uitgaan
Copyright 2007 Academic Service
3 Normaliseren, inleiding
25
van een of meer overzichten en ervoor zorgen dat de daarop aan-
wezige informatie kan worden verzorgd. Het door Paul gewenste
overzicht is afgebeeld in guur 3.1.
We nemen aan de hand van guur 3.1 de eerste stap om de gege-
vens uiteen te rafelen. We krijgen dan de zogenaamde nulde nor-
maalvorm. We bepalen de nulde normaalvorm door alle elemen-
taire, relevante gegevens te bepalen en op te schrijven.
Op ons overzicht staat een aantal verschillende gegevens.
Allereerst zien we een koptekst boven het overzicht. Deze kop-
tekst is op ieder overzicht van Paul hetzelfde (constant), ongeacht
de datum en ongeacht de gedraaide nummers. We zouden deze
koptekst kunnen voorbedrukken op het papier. Omdat de koptekst
onveranderlijk is, nemen we deze niet op in de database. Constante
gegevens nemen we nooit op in de database.
Terzijde
We zien op dit moment de naam DJ Paul als een constante. We
kunnen ons echter ook afvragen of dit systeem in de toekomst
ook door andere DJs gaat worden gebruikt. In dat geval kunnen
we de naam natuurlijk niet als een constante opvatten. Houd
daarom bij alle afwegingen die je maakt tijdens het normaliseren
altijd rekening met mogelijke wensen en uitbreidingen die in de
toekomst een rol kunnen gaan spelen!
Figuur 3.1
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
26
Vervolgens zien we een aantal gegevens die iedere keer zullen ver-
schillen: de datum en de gegevens van de gedraaide muziek. Deze
gegevens moeten we natuurlijk wel opnemen in de database omdat
we ze anders kwijt zijn.
Ten slotte zien we onder in het overzicht nog een totaal aantal
getoond. Dit totaal is af te leiden uit het overzicht door simpelweg
het aantal afgedrukte en dus gedraaide nummers te tellen. Als
het totaal niet onder in het overzicht zou staan afgedrukt, zou-
den we het zelf op eenvoudige wijze even kunnen bepalen. Het
totaal aantal kunnen we daarom ook weglaten uit de database.
We noemen het totaal aantal een procesgegeven. We kunnen het
gegeven namelijk bepalen door een rekenproces te laten uitvoeren.
Procesgegevens nemen we nooit op in de database.
Wat we overhouden aan relevante gegevens bestaat uit: datum,
code, titel, artiest en soort. De aanduiding soort is echter niet
elementair. Met de aanduiding soort bedoelen we twee gegevens,
te weten een soortcode (bijvoorbeeld S) en een soortomschrijving
(bijvoorbeeld Single). We moeten de aanduiding soort daarom
splitsen in twee elementaire gegevens, te weten soortcode en
soortomschrijving. Dit splitsen moeten we altijd doen in het geval
dat we te maken hebben met samengestelde gegevens.
We houden nu dus over de elementaire gegevens: datum, code,
titel, artiest, soortcode en soortomschrijving. In plaats van gege-
vens zullen we meestal de term attributen gebruiken.
Met de door ons gevonden attributen is iets speciaals aan de hand.
Het eerste gegeven, de datum, komen we maar n keer tegen. De
andere gegevens komen we meerdere keren tegen. Om dit verschil
duidelijk te maken noteren we onze gegevens daarom op de vol-
gende manier:
datum, RG (code, titel, artiest, soortcode, soortomschrijving)
Daarbij staat RG voor repeterende groep (repeating group). Alle
gegevens die meerdere keren, repeterend, voorkomen, staan ver-
volgens tussen ronde haken vermeld.
procesgegeven
elementaire gegevens
samengestelde
gegevens
attributen
repeterende groep
Copyright 2007 Academic Service
3 Normaliseren, inleiding
27
Het overzicht uit guur 3.1 is het overzicht van 17 februari 2001.
Paul beschikt echter voor iedere dag dat hij een programma heeft
gepresenteerd over een dergelijk overzicht. Om uit de hele stapel
met alle overzichten precies het door ons getoonde overzicht te
pakken, moeten we weten van welke datum we iets willen weten.
De datum wijst in ons geval precies n overzicht aan. De datum
geeft ons toegang tot precies n overzicht. We noemen daarom de
datum ook wel het sleutelgegeven ofwel sleutelattribuut. We geven
het sleutelattribuut aan door dit te onderstrepen. We hebben nu
uiteindelijk de nulde normaalvorm gevonden. We noteren dit op de
volgende manier:
0 NV (datum, RG (code, titel, artiest, soortcode,
soortomschrijving))
Bij het begrip sleutelattribuut kunnen we nog het volgende opmer-
ken. Allereerst zal een sleutelattribuut altijd een waarde moeten
hebben. Stel namelijk dat in onze stapel met overzichten er een
drietal zit waarop de datum niet staat vermeld. Hoe moeten we
dan n van deze overzichten aanwijzen? En bij welke uitzenddag
horen ze thuis?
Daarnaast moet een sleutelwaarde altijd uniek zijn. Met andere
woorden, er mogen in onze stapel geen twee overzichten voor-
komen met daarop dezelfde datum. In dat geval zouden we immers
niet weten welke van de twee de juiste is.
Vervolgens geldt dat een sleutelattribuut altijd zo minimaal moge-
lijk moet zijn. Als de datum volstaat als sleutel, dan zal ook de
combinatie dagaanduiding met datum volstaan. We zouden dan de
sleutel datum + dag krijgen (bijvoorbeeld : 23-1-2001 + zaterdag).
Omdat we echter ook met een deel hiervan (datum) als sleutel kun-
nen werken, zijn we verplicht het overtollige deel, de dagaandui-
ding, weg te laten. We kunnen volstaan met alleen de datum omdat
bij iedere datum slechts n dagaanduiding hoort.
Ten slotte merken we nog even op dat er soms sprake is van meer-
dere attributen die als sleutelattribuut zouden kunnen fungeren.
We noemen dit kandidaatsleutels. Een voorbeeld hiervan is het
leerlingnummer zoals dat op school gebruikt wordt en het CRI-
nummer waaronder iemand in Groningen bekend is. Ook het CRI-
nummer is op school bekend. Men heeft daar nu om een leerling
te kunnen aanwijzen twee mogelijkheden, twee kandidaatsleutels.
sleutelattribuut
kandidaatsleutels
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
28
Zou men ook nog het SoFi-nummer kennen, dan zou er zelfs
sprake zijn van een drietal kandidaatsleutels. In het algemeen kiest
men uit de kandidaatsleutels er n die als sleutelattribuut zal gaan
fungeren.
Maak opdracht 3.1.
3.2 Stap 2, de eerste normaalvorm
We hebben op dit moment de nulde normaalvorm in handen. Deze
ziet eruit als:
0 NV (datum, RG (code, titel, artiest, soortcode,
soortomschrijving))
In deze nulde normaalvorm zit een aantal problemen verborgen.
We zullen nu een van de hoofdproblemen aanpakken. Dit zal auto-
matisch resulteren in de eerste normaalvorm. Het probleem dat we
aanpakken, is het probleem dat optreedt als een nummer meerdere
keren door Paul is gedraaid. Iedere keer zal hij steeds alle gege-
vens van dat nummer noteren, dus code, titel, artiest, soortcode en
soortomschrijving. Het lijkt misschien alsof we slechts n keer
een code, titel, enzovoort noteren, maar de afkorting RG geeft aan
dat we dat herhaaldelijk doen, zo vaak als er nummers gedraaid
zijn. Dat betekent dat als Paul het nummer Coming Home van
Romeo in een jaar totaal zestig keer heeft gedraaid, hij ook zestig
keer alle gegevens heeft genoteerd. Dat is toch raar? Waarom kun-
nen we niet volstaan met het n keer noteren van alle gegevens?
Natuurlijk moeten we dan wel iedere keer even noteren dat we dat
nummer hebben gedraaid, maar dat doen we dan kortweg via het
noteren van alleen maar de code. In de eerste normaalvorm wordt
dit probleem gedeeltelijk opgelost.
We bepalen de eerste normaalvorm door de repeterende groep
apart te nemen en uit te breiden met de sleutel van de originele
nulde normaalvorm. Hierna bepalen we in de nu nieuw gevonden
reeks weer een sleutel.
In ons geval bestaat de repeterende groep uit (code, titel, artiest,
soortcode, soortomschrijving). Deze nemen we apart en we voegen
de sleutel (datum) eraan toe.
Copyright 2007 Academic Service
3 Normaliseren, inleiding
29
We krijgen dan:
(datum, code, titel, artiest, soortcode, soortomschrijving)
Let erop dat we de datum, hoewel die in de eerste normaalvorm
sleutel was en dus onderstreept, nu niet zonder meer opnieuw
onderstrepen. We gaan nu een nieuwe sleutel aanwijzen. Daartoe
moeten we ons eerst afvragen hoe we de nu ontstane groep terug-
zien op het originele overzicht. Dan weten we namelijk wat we
proberen aan te wijzen en kunnen we bepalen wat een goede sleu-
telkeuze is. Kijk eens naar guur 3.2.
Onze groep gegevens, met eenmaal een datum, eenmaal een code,
eenmaal een titel, enzovoort vinden we terug als een enkele regel
van het overzicht. Om precies n regel op een bepaald formulier
aan te duiden moeten we eerst aangeven naar welke formulier, van
welke datum, we willen kijken. Daartoe dienen we dus de datum
op te geven. Vervolgens selecteren we n enkele regel van het
betreffende overzicht door de code van het betreffende nummer op
te geven. Iedere code komt hooguit n keer op een overzicht voor
omdat Paul nooit twee maal hetzelfde nummer in dezelfde uitzen-
ding draait. De combinatie van datum en code kan dus fungeren
als sleutel. We krijgen dan:
(datum, code, titel, artiest, soortcode, soortomschrijving)
Omdat de sleutel nu bestaat uit twee delen en omdat een sleutel
altijd minimaal moet zijn, moeten we wel even controleren of een
kleinere sleutel misschien ook voldoet. Dus we gaan na of alleen
Figuur 3.2
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
30
de datum als sleutel ook voldoet. Dat is natuurlijk niet zo, want bij
n datum vinden we meerdere nummers die Paul heeft gedraaid,
dus meerdere regels, en we zoeken precies n regel.
Kunnen we misschien volstaan met alleen de code van het nummer
als sleutel? Dat zou kunnen als Paul een nummer nooit meer dan
n keer draait, ook niet op verschillende dagen. Omdat wij weten
dat Paul wel degelijk nummers vaker draait, ontstaat het probleem
dat we een bepaalde code op meerdere overzichten, van verschil-
lende datums, kunnen terugvinden. Daardoor wijzen we dus niet
slechts n, maar meerdere regels aan, hoewel die op verschillende
overzichten liggen. Dus alleen de code voldoet ook niet als sleu-
tel. De door ons eerder gekozen, gecombineerde, sleutel is dus de
juiste.
We hebben nu echter nog niet de eerste normaalvorm. We moeten
ons werk nog afmaken. Dat doen we door in de originele nulde
normaalvorm de door ons apart genomen repeterende groep te ver-
wijderen en te kijken wat er overblijft. Wat er overblijft, voegen we
als aparte groep toe aan de eerste normaalvorm.
We hadden als nulde normaalvorm gevonden:
(datum, RG (code, titel, artiest, soortcode,
soortomschrijving))
Door de repeterende groep te verwijderen houden we alleen over:
(datum)
Deze groep voegen we toe. We krijgen dan uiteindelijk de eerste
normaalvorm:
1 NV (datum)
(datum, code, titel, artiest, soortcode, soortomschrijving)
We zien dat we nu geen repeterende groep meer over hebben. We
zijn dus gedeeltelijk geslaagd in onze opzet. Nog steeds zitten we
met het probleem dat als Paul een nummer vaker draait, we steeds
opnieuw alle gegevens zitten te noteren. We zijn dus nog steeds
niet klaar.
Copyright 2007 Academic Service
3 Normaliseren, inleiding
31
In het toegelichte voorbeeld zien we dat de sleutel uit de nulde nor-
maalvorm (datum) ook in de eerste normaalvorm weer onderdeel
van de sleutel is. Vaak is dat zo, maar lang niet altijd. Let dus goed
op bij het kiezen van een nieuwe sleutel!
Maak opdracht 3.2.
3.3 Stap 3, de tweede normaalvorm
Zoals reeds gezegd heeft de door ons gevonden eerste normaal-
vorm nog steeds het nadeel dat dezelfde gegevens steeds opnieuw
worden opgeslagen. In de volgende stap, de stap naar de tweede
normaalvorm, zullen we dit nadeel grotendeels wegwerken.
Om te komen tot de tweede normaalvorm onderzoeken we in de
eerste normaalvorm of er attributen (gegevens) zijn die niet tot de
sleutel behoren (niet onderstreept) en die niet van de gehele sleutel
afhangen, maar slechts van een gedeelte van de sleutel. We zullen
deze moeilijk lijkende regel aan de hand van ons voorbeeld toelich-
ten. We kijken alleen maar naar groepen in de eerste normaalvorm
waarbij de sleutel samengesteld is, dus uit meerdere attributen
bestaat. In ons geval de groep:
(datum, code, titel, artiest, soortcode, soortomschrijving)
We moeten nu zoeken naar niet-sleutelattributen die slechts af-
hankelijk zijn van een deel van de sleutel, dus in ons voorbeeld
van alleen de datum of alleen de code. De gegevens titel, artiest,
soortcode en soortomschrijving hebben niets te maken met de
datum, maar zijn alleen maar afhankelijk van de code van het ge-
draaide nummer (vertel ons de code en wij vertellen u de artiest,
de titel, enzovoort). Die hebben dus niets te maken met de datum.
Kortom, de gegevens titel, artiest, soortcode en soortomschrijving
zijn niet afhankelijk van de gehele sleutel, maar slechts van een
deel van de sleutel. Deze gegevens nemen we apart, tezamen met
het deel van de sleutel waarvan ze afhankelijk blijken te zijn. We
krijgen dan:
(code, titel, artiest, soortcode, soortomschrijving)
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
32
In de originele groep laten we de betreffende niet-sleutelvelden
achterwege. We hadden:
(datum, code, titel, artiest, soortcode, soortomschrijving)
en we krijgen nu dus:
(datum, code)
Let erop dat het sleuteldeel waarvan de niet-sleutelvelden afhan-
kelijk waren (code) in deze groep gewoon blijft bestaan.
De nu gevonden groepen:
(code, titel, artiest, soortcode, soortomschrijving)
(datum, code)
vullen we ten slotte aan met de groepen die we in de eerste nor-
maalvorm al hadden gevonden maar waar geen samengestelde
sleutel in aanwezig was.
We krijgen dan uiteindelijk de tweede normaalvorm:
2 NV (code, titel, artiest, soortcode, soortomschrijving)
(datum, code)
(datum)
We hebben nu veel overtolligheid (redundantie) opgeheven. Dat
komt doordat in de eerste groep de code de sleutel is. Ieder num-
mer wordt hierin hooguit n keer opgenomen. Wordt een nummer
nu vaker gedraaid, dan wordt het zo vaak als nodig opgenomen in
de tweede groep (datum, code). De gegevens van het nummer zelf,
zoals de titel, zijn echter al bekend in de eerste groep en worden
daar dus niet nog eens opgenomen. Het achteraf corrigeren van een
typefout in de naam van de artiest is nu dus eenvoudig, want het
behoeft slechts n maal te worden uitgevoerd.
Maak opdracht 3.3.
Copyright 2007 Academic Service
3 Normaliseren, inleiding
33
3.4 Stap 4, de derde normaalvorm
We zijn op dit moment gevorderd tot en met de tweede normaal-
vorm. We nemen nu de laatste stap, het bepalen van de derde nor-
maalvorm. De door ons gevonden tweede normaalvorm zag eruit
als:
2 NV (code, titel, artiest, soortcode, soortomschrijving)
(datum, code)
(datum)
Er zit in deze tweede normaalvorm nog een vorm van overtollig-
heid (redundantie). Die heeft te maken met de attributen soortcode
en soortomschrijving. Bij ieder nummer staan beide gegevens
opgenomen. Als we de gegevens van 1000 nummers op single heb-
ben, zal de combinatie S, Single dus 1000 keer zijn opgenomen.
Ook hier zouden we met n keer klaar moeten zijn. Wel bij iedere
single noteren dat het een single is (soortcode = S), maar slechts
n maal noteren dat de code S staat voor de omschrijving Single.
Door deze overtolligheid eruit te halen ontstaat de derde normaal-
vorm.
Om de derde normaalvorm te bepalen vragen we ons of er niet-
sleutelattributen (niet-onderstreepte gegevens) zijn die niet af-
hangen van de sleutel, maar die eigenlijk afhangen van andere
niet-sleutelattributen. Als dat zo is, nemen we deze gegevens op in
een nieuwe groep, geven daar de sleutel aan en verwijderen uit de
originele groep het afhankelijke attribuut.
Zoals bekend, we hadden al de volgende 2NV gevonden:
2 NV (code, titel, artiest, soortcode, soortomschrijving)
(datum, code)
(datum)
In ons voorbeeld hoeven we dus alleen maar in de eerste groep
te kijken, want alleen daar is er sprake van een aantal niet-sleutel-
attributen. We gaan deze allemaal langs en vragen ons steeds af of
ze afhankelijk zijn van de sleutel of van een ander niet-sleutelat-
tribuut. Om de titel van een nummer te weten te komen hebben
we niets aan de artiest, die kan immers meerdere nummers op zijn
repertoire hebben staan. Het heeft ook niets te maken met de soort
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
34
muziekdrager, single of cd. Nee, de titel is geheel afhankelijk van
de code van het nummer: vertel ons de code en wij vertellen u
welke titel daarbij hoort. De titel is dus geheel afhankelijk van de
sleutel. We laten de titel met rust. Om dezelfde reden doen we niets
met artiest en soortcode.
Met de soortomschrijving is wel iets speciaals aan de hand. Om
deze te weten te komen hoeven we niet te weten over welk num-
mer we precies praten (de code) maar moeten we weten welke
soortcode van toepassing is: vertel ons de soortcode en wij vertel-
len u de soortomschrijving. De soortcode heeft dus niets te maken
met de sleutel, maar alles met een ander niet-sleutelattribuut. We
nemen deze twee attributen daarom apart op in een afzonderlijke
groep:
(soortcode, soortomschrijving)
Daarbij geldt dat de soortcode het sleutelattribuut zal worden: ver-
tel ons de code en wij vertellen u de omschrijving. Dus:
(soortcode, soortomschrijving)
In de originele groep laten we het nu het afhankelijke niet-sleute-
lattribuut (soortomschrijving) achterwege. We houden dan over:
(code, titel, artiest, soortcode)
Let erop dat het attribuut dat sleutel is geworden in de nieuwe
groep, in de oorspronkelijke groep gewoon blijft bestaan!
Door de beide zojuist gevonden groepen aan te vullen met de ande-
re, niet veranderde groepen uit de tweede normaalvorm, ontstaat
de volgende derde normaalvorm:
3 NV (soortcode, soortomschrijving)
(code, titel, artiest, soortcode)
(datum, code)
(datum)
Deze derde normaalvorm is het uiteindelijke doel geweest van het
normalisatieproces. Deze nu gevonden groepen kunnen we later op
eenvoudige wijze opnemen in een database. Iedere gevonden groep
Copyright 2007 Academic Service
3 Normaliseren, inleiding
35
zal daarbij worden vertaald in een afzonderlijke tabel. Hierdoor
kunnen we later op relatief eenvoudige wijze alle gegevens invoe-
ren en alle gewenste informatie opvragen. We zullen daar in latere
hoofdstukken uitgebreid op terugkomen.
Eerst moeten we nog een paar afrondende handelingen verrich-
ten. De eerste handeling bestaat uit het toekennen van namen
aan de gevonden groepen, aan de gevonden tabellen. De eerste
tabel geven we de naam SOORT, omdat daarin de soort muziek-
drager wordt bijgehouden, single of cd. De tweede tabel noemen
we TRACK omdat daarin de gegevens van de tracks worden
bijgehouden. In de derde tabel worden de gegevens bijgehouden
van de nummers die gedraaid zijn, we kunnen dit zien als een
DRAAILIJST. Ten slotte hebben we nog de laatste tabel waarin de
datums liggen opgeslagen van de dagen waarop Paul een program-
ma heeft verzorgd. Deze tabel noemen we DATUM.
3 NV SOORT (soortcode, soortomschrijving)
TRACK (code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
DATUM (datum)
We kunnen ons echter afvragen of het zin heeft om deze tabel bij
te houden. Immers, een overzicht van alle draaidatums kunnen
we ook aeiden uit de tabel DRAAILIJST. Tenslotte komen alle
datums daar ook in voor. Omdat de tabel DATUM verder geen
speciale betekenis heeft, zullen we deze weglaten. Daardoor gaan
er geen gegevens verloren.
We houden dan dus over:
3 NV SOORT (soortcode, soortomschrijving)
TRACK (code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
Het komt vaker voor dat een van de gevonden groepen in de derde
normaalvorm mag worden weggelaten. Dit zijn dan altijd tabel-
len waarin alleen maar sleutelattributen voorkomen. De tabellen
mogen alleen maar worden weggelaten als er daardoor verder geen
informatie verloren gaat. Niet iedere tabel die bestaat uit alleen
maar sleutelattributen mag dus worden weggelaten! Controleer
altijd terdege. De groep DRAAILIJST mag in ons voorbeeld niet
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
36
weggelaten worden omdat daar nu precies in staat welke nummers
op welke datum zijn gedraaid. Zonder deze groep zouden we
alleen maar de gegevens van de nummers hebben. En dan kunnen
we dus niet het door Paul gewenste overzicht maken.
Ten slotte willen we nog even opmerken dat het niet altijd zo is
dat er bij de stap van de ene naar de andere normaalvorm altijd
iets gedaan kan worden. Regelmatig blijken twee normaalvormen
gelijk aan elkaar te zijn. In dat geval zullen we gebruikmaken van
een verkorte notatiewijze. Als de tweede normaalvorm gelijk blijkt
te zijn aan de eerste normaalvorm, noteren we bij de tweede nor-
maalvorm: 2NV = 1NV.
Maak opdracht 3.4.
3.5 Entiteit Relatie Diagram (ERD)
Tijdens het normalisatieproces hebben we voornamelijk gesproken
in termen van gegevens en groepen met gegevens. Ofcieel zijn er
echter andere termen in gebruik.
3 NV SOORT (soortcode, soortomschrijving)
TRACK (code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
In plaats van gegevens hebben we het ofcieel over attributen. Zo
staat in het bovenstaande voorbeeld onder andere het attribuut titel
vermeld. Een attribuut kan een bepaalde waarde aannemen, de
zogenaamde attribuutwaarde. Bij het attribuut titel zou de
attribuutwaarde So close kunnen optreden. De attributen zien
we in het schema van guur 3.3 terug als kolommen. Attributen
beschrijven groepen, groepen die voor de gebruiker, in ons geval
Paul, betekenisvol zijn. In plaats van de term groepen gebruiken
we meestal de term entiteit. In de voorgaande derde normaalvorm
komen we de entiteiten SOORT, TRACK en DRAAILIJST tegen.
De entiteit TRACK bevat dus de gegevens van alle tracks die voor
PAUL van belang zijn. Een afzonderlijke track wordt wel een
entiteit-occurence genoemd. Deze bevat dus alle gegevens van n
enkele track, de afzonderlijke rijen in het schema van guur 3.3.
atribuutwaarde
entiteit
entiteit-occurence
Copyright 2007 Academic Service
3 Normaliseren, inleiding
37
In ons voorbeeld zijn in totaal drie entiteiten gevonden. Deze drie
entiteiten hangen niet als los zand aan elkaar maar hebben duide-
lijk met elkaar te maken.
3 NV SOORT (soortcode, soortomschrijving)
TRACK (code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
Om te achterhalen welke nummers er op een bepaalde datum
gedraaid zijn, dienen we in de entiteit DRAAILIJST de door ons
gewenste datum op te zoeken. Die komen we daar meerdere keren
tegen, iedere keer in combinatie met de code van een gedraaide
track. Als we willen weten welke tracks dat precies zijn, moeten
we met de gevonden codes naar de entiteit TRACK om daar de
betreffende codes op te zoeken. We vinden dan titel, artiest en
soortcode. Op soortgelijke wijze kunnen we bij iedere track de
juiste soort opzoeken aan de hand van de soortcode. Zie guur 3.4.
Het bijzoeken van gegevens lukt natuurlijk alleen maar als de co-
des in DRAAILIJST ook voorkomen in TRACK. In dat geval zou-
den namelijk de titel en artiest er niet bijgezocht kunnen worden.
We kunnen dan ook onze draailijsten niet meer laten afdrukken.
Een probleem dus.
Om dit te voorkomen zullen we een aantal dingen afspreken. Als
eerste de term vreemde sleutel (foreign key). Hiermee bedoelen we
een gegeven (attribuut) dat verwijst naar de sleutel van een tabel
(entiteit). In ons voorbeeld is er sprake van een tweetal vreemde
sleutels. Als eerste het attribuut code in DRAAILIJST. Dit is een
Attributen
Code Titel Artiest Soortcode
R2734 Coming home Romeo S
B1954 To the limit Boys II Men C
T5985 CrazySexyCool TLS C
..
Entiteit-occurences
Attribuutwaarden
Entiteit : TRACK Figuur 3.3
vreemde sleutel
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
38
vreemde sleutel omdat het verwijst naar het attribuut code in de
tabel TRACK, dus naar een sleutel. Ook het attribuut soortcode in
TRACK is een vreemde sleutel, want het verwijst naar de sleutel
van de tabel SOORT (soortcode). We geven vreemde sleutels wel
aan door ze met een stippellijn te onderstrepen. Dus:
3 NV SOORT (soortcode, soortomschrijving)
TRACK (code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
Vreemde sleutels verwijzen in het algemeen naar andere tabel-
len. Dit lukt alleen maar als iedere waarde die de vreemde sleutel
aanneemt ook als sleutelwaarde voorkomt in de tabel waarnaar
verwezen wordt. Met andere woorden: als in de DRAAILIJST
de code R7734 voorkomt, moet deze waarde ook voorkomen als
code in TRACK, met daarbij de naam van de artiest en de titel van
het nummer. De eis dat iedere waarde die een vreemde sleutel aan-
Figuur 3.4
DRAAILIJST
Datum Code
17-2-2001 R2734
17-2-2001 B1954
17-2-2001 T5985
17-2-2001 R4288
18-2-2001 N2773
18-2-2001 T5985
.. ..
TRACK
Code Titel Artiest Soortcode
B1954 To the limit Boys II Men C
N2773 Hes my favourite DJ Nance S
R2734 Coming Home Romeo S
R4288 Got to be Romeo C
.. ..
SOORT
Soortcode Soortomschrijving
S Single
C CD
Copyright 2007 Academic Service
3 Normaliseren, inleiding
39
neemt ook als sleutelwaarde moet voorkomen in de andere entiteit,
staat bekend onder de eis van referentile integriteit (referential
integrity).
Andersom geldt deze eis niet. Er kan in TRACK best een
waarde voor code voorkomen die we nog niet tegenkomen in
DRAAILIJST. De track is dan gewoon nog nooit gedraaid in
het programma! Zoals uit de derde normaalvorm blijkt, kan een
vreemde sleutel zelf deel van een sleutel zijn. Kijk naar het attri-
buut code in de tabel DRAAILIJST. Een vreemde sleutel kan ech-
ter ook een niet-sleutelattribuut zijn. Kijk maar naar het attribuut
soortcode in de tabel TRACK.
Via de vreemde sleutels zijn de entiteiten met elkaar verbonden.
Deze verbondenheid geven we graag weer door middel van een
diagram, omdat dat over het algemeen veel duidelijker is. Dit
diagram noemen we Entiteit Relatie Diagram oftewel een Entity
Relationship Diagram, kortweg ERD.
Om weer te geven dat twee entiteiten iets gemeenschappelijks heb-
ben, via een vreemde sleutel, nemen we de beide entiteiten op door
middel van een rechthoek en verbinden deze beide rechthoeken
door middel van een rechte lijn. Tevens vermelden we bij de lijn op
basis van welke vreemde sleutel het verband bestaat.
We zien dat de lijnen aan de ene kant eindigen in een enkelvoudig
einde van de lijn en aan de andere kant eindigen in een vertakt
einde van de lijn. Als we vanuit de entiteit DRAAILIJST naar de
entiteit TRACK gaan, komen we aan via een enkelvoudig einde
van de lijn. Dat betekent dat ieder gegeven in DRAAILIJST, iedere
entiteitoccurence, steeds te maken heeft met n track. Andersom,
gaan we uit van TRACK en gaan we naar DRAAILIJST, dan
komen we bij een vertakt einde van de lijn uit. Dat betekent dat we
bij iedere entiteit-occurence uit TRACK, dus bij ieder nummer,
meer dan n keer gegevens uit DRAAILIJST kunnen vinden. Dat
is ook logisch want een nummer kan meerdere keren zijn gedraaid.
Het bepalen of er een enkelvoudig einde of een vertakt einde moet
worden getekend, is eenvoudig. Aan de kant van de lijn waar het
referentile integriteit
Entity Relationship
Diagram
DRAAILIJST TRACK SOORT
o.b.v. code o.b.v. soortcode
Figuur 3.5
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
40
gemeenschappelijke attribuut, de vreemde sleutel, ook als sleutel
optreedt, moet een enkelvoudig einde worden opgenomen. Een
sleutelwaarde moet immers altijd uniek zijn en kan dus maar n
keer voorkomen, dus een enkelvoudig einde. Aan de andere kant
van de lijn, waar het geen sleutel is, gelden geen beperkingen en
kan iedere waarde vaker optreden, dus een vertakt einde.
Soms zie je ook dat aan een van de einden een rondje is opgeno-
men in de lijn. Dat geeft aan dat er niet altijd aan die kant iets bij
hoeft te worden gevonden. Zo hoeft nog niet iedere track al een
keer gedraaid te zijn. Niet iedere code die in TRACK voorkomt,
hoeft dus voor te komen in DRAAILIJST. Dat is de reden dat er
aan die kant een rondje is opgenomen in de lijn. Het rondje staat
voor nul.
Hieronder staan alle mogelijkheden kort weergegeven:
er wordt er precies n bij gevonden:
er wordt er nul of n bij gevonden:
er worden er n of meer bij gevonden:
er worden er nul, n of meer bij gevonden:
Maak opdracht 3.5.
3.6 Samenvatting
In dit hoofdstuk hebben we de eerste beginselen van het normali-
seren geleerd. Daarbij rafelen we de ongestructureerde gegevens,
zoals die op een overzicht worden getoond, in een aantal stappen
uiteen tot een gestructureerd geheel. Daarbij maken we gebruik
van de techniek van het normaliseren.
Eerst stellen we de nulde normaalvorm op door alle elementaire
gegevens te noteren. Daarbij laten we alle vaste teksten (constan-
ten) en procesgegevens achterwege. We bepalen de sleutel. Het
bepalen van de sleutel doen we ook bij iedere volgende stap.
Vervolgens bepalen we de eerste normaalvorm door de repeating
group te verwijderen.
Copyright 2007 Academic Service
3 Normaliseren, inleiding
41
Hierna bepalen we de tweede normaalvorm. Daarbij nemen we alle
gegevens apart die slechts van een deel van de sleutel afhangen en
niet van de gehele sleutel.
Ten slotte bepalen we de derde normaalvorm. Daarbij nemen we
alle gegevens apart die helemaal niet van de sleutel afhangen,
maar die van een ander niet-sleutelattribuut afhangen.
Nadat we derde normaalvorm hebben gevonden, gaan we na of er
misschien groepen zijn die weggelaten mogen worden zonder dat
we informatie verliezen. We hoeven hierbij alleen maar de groepen
te onderzoeken die uit alleen maar sleutelattributen bestaan.
De gegevensstructuur die we nu hebben gevonden, geven we
vervolgens grasch weer door middel van een Entiteit Relatie
Diagram (ERD). We laten daarbij het verband tussen de diverse
tabellen zien. Deze verbanden zijn gebaseerd op vreemde sleutels.
Een vreemde sleutel mag alleen maar waarden aannemen die ook
in de overeenkomstige andere tabel voorkomen (referentile inte-
griteit).
Opdrachten
3,1 Nulde normaalvorm
a. In de nulde normaalvorm mogen geen procesgegevens worden
opgenomen. Geef aan waarom dat is en gebruik in het antwoord
de termen efcint ruimtegebruik en consistentie.
b. In een bibliotheek zal men de afzonderlijke boeken moeten kun-
nen aanduiden. Hiertoe zullen zij een sleutelattribuut hebben
gedenieerd. Zou men hiervoor het ISBN gebruiken? Verklaar
het antwoord.
c. Gegeven het overzicht uit guur 3.6. Stel hiervan de nulde nor-
maalvorm op.
Figuur 3.6
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
42
Databaseontwikkeling 4 Access 2003
42
3.2 Eerste normaalvorm
a. Gegeven is het overzicht uit guur 3.7. Iemand heeft daarbij de
volgende nulde normaalvorm gevonden.
0 NV (Bestelnummer, naam klant, RG (artikelnr,
omschrijving, prijs p/s, aantal), kortings%)
Waarom zijn het bedrag per regel, het subtotaal, het kortings-
bedrag en het eindtotaal niet opgenomen in de nulde normaal-
vorm?
Bepaal uitgaande van de genoemde nulde normaalvorm de eer-
ste normaalvorm.
b. Ga uit van de nulde normaalvorm die je eerder bij opdracht 3.1c
gevonden hebt en bepaal de daarbij behorende eerste normaal-
vorm. Controleer goed of de gekozen sleutel niet korter kan.
3.3 Tweede normaalvorm
a. Gegeven is het overzicht uit guur 3.8. Iemand heeft daarbij de
volgende eerste normaalvorm gevonden.
Figuur 3.7
Copyright 2007 Academic Service
3 Normaliseren, inleiding
43
3 Normaliseren, inleiding
43
1 NV (Bestelnummer, naam klant, kortings%)
(Bestelnummer, artikelnr, omschrijving, prijs p/s,
aantal)
Bepaal uitgaande van de bovenstaande eerste normaalvorm de
tweede normaalvorm.
b. Wat is het wezenlijke verschil tussen de 1 NV zoals die bij op-
dracht 3.3a is gegeven en zoals die hieronder staat afgedrukt?
1 NV (Bestelnummer, naam klant)
(Bestelnummer, artikelnr, omschrijving, prijs p/s, aantal,
kortings%)
3.4 Derde normaalvorm
a. Iemand heeft de volgende tweede normaalvorm gevonden. Deze
hoort bij een order die door een klant is geplaatst. Daarbij geldt
dat de korting, het percentage, alleen maar afhankelijk is van
het aantal dat men van n artikel koopt. Bij n stuk ontvangt
men 2% korting, bij twee stuks 3%, bij drie stuks 5%, enzo-
voort. Ten slotte geldt dat iedere klant een eigen uniek klant-
nummer heeft dat altijd voor hem gebruikt wordt.
Figuur 3.8
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
44
Databaseontwikkeling 4 Access 2003
44
2 NV (ordernummer, klantnummer, klantnaam)
(ordernummer, artikelnr, aantal, kortings%)
(artikelnr, omschrijving, prijs p/s)
Bepaal uitgaande van deze tweede normaalvorm de derde nor-
maalvorm.
b. Een voetbalvereniging maakt gebruik van (onder andere) het
overzicht van guur 3.9. Een lid van de vereniging hoeft geen
commissiewerk te doen, maar mag het wel. Indien gewenst kan
hij (of zij) zelfs deel uitmaken van meerdere commissies.
Normaliseer het overzicht tot en met de derde normaalvorm.
c. Het overzicht van guur 3.10 wordt bij een camping gebruikt
om de reserveringen bij te houden. Op die manier probeert men
te voorkomen dat een plaats aan meer dan n klant tegelijker-
tijd wordt toegekend. Normaliseer dit overzicht tot en met de
derde normaalvorm.
Commissie : BC, Barcommissie
Lidnummer Naam Telefoon
34 L. Ketelaar 010-4883922
122 V. Borrelaar 0180-499302
307 M. Vervat 010-7559403
Figuur 3.9
Camping Zee en Strand, Ouddorp
Plaatsnummer 23 Klant Aankomstdatum Vertrekdatum
8448 6 augustus 2001 20 augustus 2001
P. Livers
Kerkweg 23
3109 BF Spijkenisse
3662
R.L.F. Hu
Korenstraat 5
8102 BA Raalte 23 juli 2001 30 juli 2001
Figuur 3.10
Copyright 2007 Academic Service
3 Normaliseren, inleiding
45
3 Normaliseren, inleiding
45
3.5 Entiteit Relatie Diagram
a. Gegeven is de volgende genormaliseerde gegevensstruc-
tuur. Geef hier de vreemde sleutels aan door deze gestippeld
te onderstrepen. Ter informatie: het gaat om een deel van de
administratie van een camping. Van een boeking worden de
belangrijke gegevens bijgehouden. Bij iedere boeking wordt
bijgehouden welke personen er zullen verblijven in verband met
het nachtregister. Er kan in twee gedeelten betaald worden. Het
eerste deel moet worden betaald binnen vier weken na de boek-
datum, het laatste deel moet betaald worden uiterlijk zes weken
voor de geplande aankomstdatum. Per boeking wordt er steeds
n campingplaats geboekt.
GAST (gastnummer, naam, adres, postcode, plaats,
geboortedatum, telefoonnummer)
BOEKING (boekingnummer, boekdatum, aankomstdatum,
vertrekdatum, plaatsnummer)
PLAATS (plaatsnummer, voorzieningen, bedrag per
nacht)
REGISTER (gastnummer, boekingnummer)
BETALING (boekingnummer, betaaldatum, betaald bedrag)
Teken ook het bijbehorende ERD.
b. Gegeven is de volgende genormaliseerde gegevensstructuur.
Geef hier de vreemde sleutels aan door deze gestippeld te
onderstrepen. Ga er daarbij van uit dat meerdere spelers deel
uitmaken van een elftal, dat ieder elftal slechts n leider heeft
en dat er ereleden bestaan. Deze ereleden staan wel als speler
genoteerd, maar er is geen elftalcode ingevuld.
ELFTAL (elftalcode, leidercode)
LEIDER (leidercode, leidernaam, telefoonnummer)
LID (lidcode, lidnaam, lidadres, lidplaats, elftalcode)
Teken ook het bijbehorende ERD.
c. Gegeven is het volgende ERD. Beantwoord op basis van dit
ERD de gestelde vragen.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
46
Databaseontwikkeling 4 Access 2003
46
Kan een chef meerdere afdelingen onder zijn beheer hebben?
Kan een afdeling geleid worden door meerdere chefs?
Kan een werknemer bij meerdere afdelingen zijn ingedeeld?
Kan er een afdeling zijn zonder werknemers?
Kan er een afdeling zijn zonder chef?
Kan er een werknemer zijn zonder afdeling?
Kan er een chef zijn zonder werknemers?
AFDELING CHEF WERKNEMER
o.b.v. werknemernummer o.b.v. chefnummer
Copyright 2007 Academic Service
4 Normaliseren,
verdieping
Bij de bovenstaande opsomming gaan we ervan uit dat de leerlin-
gen een case uitwerken waarbij de docent/begeleider de rol van
opdrachtgever/gebruiker speelt.
Dit hoofdstuk is een verdieping van de stof zoals die in hoofd-
stuk 3 is behandeld. In dit hoofdstuk gaan we moeilijker typen
overzichten normaliseren. Dit zijn overzichten waar meer dan n
repeterende groep in voorkomt.
4.1 Dubbele (geneste) repeterende groepen
In deze paragraaf kijken we naar een type overzicht zoals dat in
de praktijk veelvuldig gebruikt wordt. In dit voorbeeld is er sprake
van een dubbele repeterende groep. Aan de hand van het voorbeeld
zal worden toegelicht hoe dit moet worden aangepakt.
Een docent gebruikt onder andere het overzicht zoals dat in guur
4.1 staat afgebeeld. Hierop houdt hij de cijfers van een klas bij,
tezamen met het vak waarvoor deze cijfers zijn behaald. De docent
geeft namelijk meerdere vakken, aan meerdere klassen.
Als we de gegevens van guur 4.1 normaliseren, zullen we uiter-
aard weer beginnen met het opstellen van de nulde normaalvorm,
dus het noteren van alle relevante, elementaire gegevens.
We zien in de bovenkant van het overzicht eenmalig de aanduiding
van het vak en van de klas. Vervolgens zien we een aantal keer een
datum. Deze datum keert regelmatig terug en vormt dus een repe-
terende groep. Bij n datum zien we vervolgens een aantal keer
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
48
de gegevens van een leerling en het cijfer dat deze heeft behaald.
Deze gegevens vormen bij n datum opnieuw een repeterende
groep. Dit heeft tot gevolg dat de voorlopige nulde normaalvorm er
op de volgende wijze uitziet:
(vak, klas, RG (toetsdatum, RG (leerlingnummer, naam,
cijfer))
Als sleutel zal hier moeten gelden de combinatie van vak en klas.
Om namelijk precies het overzicht uit de stapel te halen, moet de
docent eerst weten van welk vak hij de resultaten wenst te zien.
Hij geeft tenslotte les in meerdere vakken. Omdat hij een vak aan
meer dan n klas geeft, moet hij ook nog weten van welke klas hij
de vakresultaten wenst te zien. De combinatie vak en klas vormt
dus de sleutel. We krijgen dan:
0 NV (vak, klas, RG (toetsdatum, RG (leerlingnummer, naam,
cijfer)))
We zien nu dat we twee maal een repeterende groep hebben, waar-
bij de tweede groep onderdeel van de eerste is. We zeggen wel dat
de tweede groep genest ligt binnen de eerste groep.
Bij de stap naar de eerste normaalvorm verwijderen we altijd de
repeterende groep. Nu hebben we er echter twee. Hoe pakken we
Figuur 4.1
Copyright 2007 Academic Service
4 Normaliseren, verdieping
49
dit aan? Bedenk dat de ene groep opgesloten is in de andere. Dit is
te vergelijken met de sinterklaassurprise waarbij men een doos in
een doos in een doos in een doos... gedaan heeft, waarbij er uitein-
delijk in de binnenste doos een heel klein presentje zit. Om bij het
presentje te komen zullen we eerst de buitenste doos moeten ver-
wijderen, vervolgens de een na buitenste, vervolgens... We gaan net
zolang door met het verwijderen van dozen, van buiten naar bin-
nen, totdat we uiteindelijk bij de binnenste doos zijn aangekomen.
Deze tactiek moeten we hier ook toepassen. Om bij de binnenste
repeterende groep te komen, zullen we eerst de buitenste groep, in
een tussenstap, moeten verwijderen. Daarbij nemen we de grootste
repeterende groep, nemen die apart, voegen de sleutelattributen
uit de oude groep toe en kiezen vervolgens in de nieuwe groep een
sleutel.
We nemen dus de repeterende groep (toetsdatum , RG (leerling-
nummer, naam, cijfer)) apart en voegen daar de oorspronkelijke
sleutelattributen (vak, klas) van de originele groep aan toe. We
krijgen dan de volgende tussenstap:
(vak, klas, toetsdatum, RG (leerlingnummer, naam,
cijfer))
(vak, klas)
Nu gaan we in de nieuwe groep de sleutel bepalen. We krijgen dan:
(vak, klas, toetsdatum, RG (leerlingnummer, naam,
cijfer))
(vak, klas)
Let erop dat de sleutel in de nieuwe groep bestaat uit drie delen.
Om namelijk een groepje met cijfers aan te wijzen (de repeterende
groep) moeten we weten van welk vak, van welke klas en van wel-
ke datum we de gegevens willen zien. Dus een driedelige sleutel.
We zien dat we nu n repeterende groep verwijderd hebben. Er
is er nog maar n overgebleven. Deze groep zullen we nu op de-
zelfde bekende wijze verwijderen. Dus we nemen de repeterende
groep apart en voegen de sleutelattributen uit de oude groep toe.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
50
(vak, klas, toetsdatum, leerlingnummer, naam, cijfer)
(vak, klas, toetsdatum)
(vak, klas)
Ten slotte bepalen we de sleutel in de nieuwe groep. We krijgen
dan als eerste normaalvorm:
1 NV (vak, klas, toetsdatum, leerlingnummer, naam, cijfer)
(vak, klas, toetsdatum)
(vak, klas)
De nieuwe sleutel bestaat hier uit de combinatie van vak, toets-
datum en leerlingnummer. Daarbij gaan we er dus van uit dat er
per vak hooguit n keer per dag een toets wordt afgelegd door een
leerling en dat een leerling meer dan n toets per vak kan krijgen.
We hebben nu de eerste normaalvorm gevonden. Alle repeterende
groepen zijn verwijderd. Let erop dat bij het kiezen van de nieuwe
sleutel er iets speciaals aan de hand is. In de eerste groep van de
eerste normaalvorm wijzen we nu n cijfer aan van n leerling.
Immers, de repeterende groepen zijn verwijderd. Om een cijfer aan
te kunnen wijzen moeten we weten van welke leerling, van welk
vak en op welke datum de toets heeft plaatsgevonden. Het is niet
nodig om ook te weten in welke klas de leerling zit. De klasaan-
duiding is dus niet opgenomen in de sleutel!
Het zoeken naar de tweede en derde normaalvorm gaat op gelijke
wijze als in het vorige hoofdstuk is toegelicht.
De volgende stap is het bepalen van de tweede normaalvorm.
Daarbij zoeken we naar niet-sleutelattributen die niet afhangen van
de gehele sleutel maar slechts van een deel van de sleutel. We hoe-
ven alleen de bovenste groep van de eerste normaalvorm maar te
onderzoeken. Daarin zien we de niet-sleutelattributen klas, naam
en cijfer. Om de eerste twee te weten hoeven we echt niet te weten
op welke datum en voor welk vak er een toets geweest is. We hoe-
ven alleen maar het leerlingnummer te weten. Voor het cijfer geldt
natuurlijk dat we moeten weten wie (leerlingnummer) wanneer
(toetsdatum) en voor welke vak (vak) het is behaald. Het cijfer is
dus afhankelijk van de gehele sleutel.
Alleen de klas en de naam nemen we apart, tezamen met het sleu-
teldeel waarvan ze afhankelijk zijn, het leerlingnummer. We krij-
gen dan:
Copyright 2007 Academic Service
4 Normaliseren, verdieping
51
2 NV (vak, toetsdatum, leerlingnummer, cijfer)
(leerlingnummer, klas, naam)
(vak, klas, toetsdatum)
(vak, klas)
Ten slotte rest ons nog het onderzoek naar de derde normaalvorm.
Daarbij zoeken we naar niet-sleutelattributen die niet afhangen van
de sleutel maar van andere niet-sleutelattributen. We hoeven dan
dus alleen maar in de tweede groep van de tweede normaalvorm te
kijken omdat alleen daar meerdere niet-sleutelattributen aanwezig
zijn. We vragen ons nu af of de klas afhankelijk is van de naam
van de leerling, of andersom. Natuurlijk is dat niet zo. De klas-
aanduiding en de naam van een leerling hebben absoluut niets met
elkaar te maken. Leerling De Boer zou in klas 3B1, maar ook in
klas 2C2 kunnen zitten, of zelfs in beide klassen tegelijk, dan zijn
het wellicht de gebroeders De Boer.
De derde normaalvorm is dus gelijk aan de tweede normaalvorm.
We krijgen dan:
3 NV (vak, toetsdatum, leerlingnummer, cijfer)
(leerlingnummer, klas, naam)
(vak, klas, toetsdatum)
(vak, klas)
Om het normaliseren netjes af te ronden, geven we de groepen
eerst een naam.
3 NV RESULTAAT (vak, toetsdatum,
leerlingnummer, cijfer)
LEERLING (leerlingnummer, klas, naam)
TOETSDATUM (vak, klas, toetsdatum)
VAK-KLAS (vak, klas)
We zien dat we twee groepen, entiteiten, hebben die alleen maar
uit sleutelattributen bestaan. Van deze groepen moeten we ons
altijd afvragen of we deze mogen weglaten zonder dat er infor-
matie verloren gaat. In de entiteit TOETSDATUM ligt vastgelegd
welke klas, voor welk vak op welke datum een toets heeft gehad.
Die informatie kunnen we echter ook terugvinden in de entiteiten
RESULTAAT (welk vak en welke datum) en LEERLING (welke
klas). We kunnen bij ieder cijfer op basis van het leerlingnummer
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
52
de klas erbij zoeken. We mogen dus de entiteit TOETSDATUM
weglaten. Voor de entiteit VAK-KLAS kunnen we dezelfde re-
denering volgen. Ook de informatie uit deze entiteit kunnen we
aeiden uit de entiteiten RESULTAAT en LEERLING. We laten
daarom ook de entiteit VAK-KLAS weg.
De uiteindelijke derde normaalvorm ziet er dus uit als:
3 NV RESULTAAT (vak, toetsdatum, leerlingnummer,
cijfer)
LEERLING (leerlingnummer, klas, naam)
Het bijbehorende ERD:
Een leerling kan nul, een of meer resultaten hebben behaald. Een
resultaat behoort toe aan n leerling.
Het verband tussen de beide entiteiten is op basis van de vreemde
sleutel leerlingnummer.
Maak opdracht 4.1.
4.2 Dubbele (opeenvolgende) repeterende groepen
Een dubbele repeterende groep komen we ook wel eens tegen in
de vorm waarbij de groepen na elkaar komen in plaats dat ze in
elkaar zijn opgenomen. Ook van deze vorm geven we een voor-
beeld. We gaan daarbij uit van een overzicht zoals dat bij een auto-
dealer wordt gebruikt, zie guur 4.3.
Op de bekende manier bepalen we de nulde normaalvorm. Daarbij
laten we de procesgegevens (subtotalen, BTW-bedrag en totaal-
bedrag) achterwege.
LEERLING RESULTAAT
o.b.v. leerlingnummer
Figuur 4.2
Copyright 2007 Academic Service
4 Normaliseren, verdieping
53
0NV (factuurnummer, merk, type, kenteken, kmstand, datum,
RG (aantal, werknummer, werkomschrijving, werk-
prijs), RG (aantal onderdelen, onderdeelnummer,
onderdeelomschrijving, onderdeelprijs))
Uiteraard geldt dat het factuurnummer hier de sleutel is. We zien
hier twee maal een repeterende groep. De tweede groep, met de
onderdeelgegevens, komt echter pas nadat de eerste groep, met de
werkgegevens, is afgesloten. Deze groepen kunnen we bij de over-
gang naar de eerste normaalvorm in n keer verwijderen, onaf-
hankelijk van elkaar. We krijgen dan:
Figuur 43
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
54
1 NV (factuurnummer, merk, type, kenteken, kmstand, datum)
(factuurnummer, werknummer, aantal,
werkomschrijving, werkprijs)
(factuurnummer, onderdeelnummer, aantal onderdelen,
onderdeelomschrijving, onderdeelprijs)
De keuze van de sleutels zal voor zich spreken. Ieder nummer
komt immers hoogstens n keer op een factuur voor.
Als tweede normaalvorm krijgen we:
2 NV (factuurnummer, merk, type, kenteken, kmstand, datum)
(factuurnummer, werknummer, aantal, werkprijs)
(factuurnummer, onderdeelnummer, aantal onderdelen,
onderdeelprijs)
(werknummer, werkomschrijving, adviesprijs)
(onderdeelnummer, onderdeelomschrijving, advies
onderdeelprijs)
Je ziet dat hier iets speciaals aan de hand is. De prijzen zijn ge-
splitst in de werkelijk gerekende prijzen en de standaard advies-
prijzen. We hebben bij de factuurregelgegevens, de tweede en
derde groep in de tweede normaalvorm, de werkelijke prijzen van
de factuur staan. Bij de laatste twee groepen van de tweede nor-
maalvorm, waar de gegevens van de algemene werkzaamheden en
algemene onderdelen staan vermeld, is de adviesprijs toegevoegd.
Dit heeft een simpele reden. Stel dat we op 31 december een auto
repareren. De auto wordt echter pas 4 januari opgehaald, omdat de
eigenaar voor die tijd geen kans zag om langs te komen. Op
1 januari heeft er echter ook een algemene prijsverhoging plaats,
waarbij alle werkzaamheden 2% in prijs stijgen en alle onderdelen
3,5%. Door de factuur nu nog op 31 december in de computer in
te voeren, worden de dan geldende adviesprijzen overgenomen bij
de diverse uitgevoerde werkzaamheden en gebruikte onderdelen.
Wordt op 4 januari de factuur voor de klant afgedrukt, dan staan
de prijzen van 31 december vermeld, het tijdstip van invoeren van
de factuur. Bij het afdrukken kijkt de computer niet meer naar de
dan geldende, in ons geval te hoge, adviesprijzen. Als we de prij-
zen niet hadden gesplitst, zou de klant wel met de te hoge prijzen
zijn geconfronteerd, niet echt klantvriendelijk! Tevens kan men nu
eventueel afwijken van de adviesprijs, bijvoorbeeld in het geval
van garantie of service.
Copyright 2007 Academic Service
4 Normaliseren, verdieping
55
Ten slotte rest ons nog slechts de derde normaalvorm.
3 NV (factuurnummer, kenteken, kmstand, datum)
(factuurnummer, werknummer, aantal, werkprijs)
(factuurnummer, onderdeelnummer, aantal onderdelen,
onderdeelprijs)
(werknummer, werkomschrijving, adviesprijs)
(onderdeelnummer, onderdeelomschrijving, advies-
onderdeelprijs)
(kenteken, merk, type)
Uiteindelijk ontstaan dus de volgende groepen (entiteiten):
FACTUUR (factuurnummer, kenteken, kmstand,
datum)
FACTUURWERK (factuurnummer, werknummer, aantal,
werkprijs)
FACTUURONDERDEEL(factuurnummer, onderdeelnummer,
aantal onderdelen, onderdeelprijs)
WERK (werknummer, werkomschrijving,
adviesprijs)
ONDERDEEL (onderdeelnummer, onderdeel-
omschrijving, advies-onderdeelprijs)
AUTO (kenteken, merk, type)
Het bijbehorende ERD:
AUTO
FACTUUR
FACTUURWERK FACTUURONDERDEEL
WERK ONDERDEEL
Figuur 4.4
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
56
4.3 Opmerkingen met betrekking tot normaliseren
Bij alle stappen van het normalisatieproces is het steeds weer
nodig om sleutels te kiezen. Soms komt het voor dat in het gegeven
overzicht geen sleutels zijn aan te wijzen. Bijvoorbeeld als wel de
naam en het adres van een klant worden getoond, maar niet het
klantnummer. In dat soort gevallen kunnen we beter zelf een sleu-
tel bedenken. Gebruik dan nooit een naam of een omschrijving
als sleutelattribuut, omdat dat vraagt om moeilijkheden. Een paar
voorbeelden uit de praktijk, waarbij men niet heeft gewerkt met
nummers maar met namen.
Er komt een telefoontje binnen: Met mevrouw Rox, ik wil graag
mijn openstaande saldo weten. Onze rma werkt niet met klant-
nummers, dus onze medewerker gaat zoeken op naam, maar komt
mevrouw Rox niet tegen. Logisch, want hij zocht waarschijnlijk
naar de naam Rocks, of Roks, of Rockx, of
Even later gaat weer de telefoon: Met copyshop A3, weet u
Of was het misschien: Met kofeshop Adrie, weet u ..?
Later op de dag belt mevrouw De Vries. Ook die kunnen we helaas
niet terugvinden in het systeem. Reden? Mevrouw De Vries is
vorige week getrouwd met de heer De Vries. Tot dan ging zij als
Ada Donkersloot door het leven en onder die naam staat zij ook
genoteerd in ons systeem.
Om dit soort vervelende situaties te voorkomen is het verstandig
altijd te werken met nummers of codes als sleutel en nooit met
namen of omschrijvingen. Dit wil natuurlijk niet zeggen dat we
niet de mogelijkheid moeten bieden om in een database ook te
zoeken op naam. Maar dan is het wel verstandig om de zoekactie
intelligent te maken, zodat er niet alleen op exacte spelling wordt
gezocht, maar ook op klank. Zoeken we dan op Jansen, dan zal
ook Janssen, of Janssens of.. als zoekresultaat worden getoond.
Een tweede opmerking die we graag willen maken, heeft ook te
maken met namen van personen. In al onze voorbeelden hebben
we steeds de naam van een persoon als n geheel gezien. In de
praktijk is het echter verstandig om een naam te splitsen in voor-
letters, tussenvoegsel en achternaam. Eventueel kan ook nog apart
de voornaam en de titulatuur worden opgenomen. Dit maakt het
namelijk mogelijk om met de naam te spelen. Op een etiket voor
een brief kunnen we dan de tekst Drs. J.P. van der Hoeve plaatsen,
terwijl we in de aanhef van de brief kunnen beginnen met bijvoor-
Copyright 2007 Academic Service
4 Normaliseren, verdieping
57
beeld Geachte heer Van der Hoeve of misschien met Beste Jan
Pieter. Bovendien kunnen we nu goed sorteren op naam, dat wil
zeggen op achternaam.
Het splitsen in elementaire gegevens geldt overigens ook voor
straatnaam, huisnummer en toevoegsel. In het toevoegsel kunnen
we bijvoorbeeld de letter c kwijt uit het adres Kerkweg 3c. Door
het adres in drie delen te scheiden kunnen we bijvoorbeeld later de
combinatie postcode + huisnummer gebruiken als (alternatieve)
zoeksleutel. Maar hoe gaan we in dat geval overigens om met het
adres:
Fam. Vlietstra
Woonboot Neeltje, tegenover Koelandenweg 1
9534 TB Westdorp
Maak opdracht 4.2.
4.4 Integreren
Tot nu toe hebben we steeds gekeken naar n overzicht tegelijker-
tijd. In de praktijk zal er binnen een bedrijf of organisatie echter
altijd sprake zijn van meerdere overzichten die gebruikt worden.
Al deze overzichten moeten dan gegenereerd kunnen worden van-
uit dezelfde database. Hoe pakken we dat aan?
We beginnen dan gewoon met het apart normaliseren van alle
overzichten afzonderlijk. Voor ieder afzonderlijk overzicht levert
dit dan een groepje entiteiten, bestanden ofwel tabellen. Deze
groepjes gaan we vervolgens in elkaar schuiven. Dat doen we dan
zodanig dat met het eindresultaat alle afzonderlijke overzichten
kunnen worden gegenereerd. Hoe weten we nu welke tabellen we
tezamen kunnen nemen? Dat kunnen we achterhalen aan de hand
van de sleutels. Verschillende tabellen, die dezelfde sleutel hebben,
kunnen worden samengevoegd. Tabellen die verschillende sleutels
hebben, kunnen niet worden samengevoegd.
Het in elkaar schuiven van de groepen, we noemen dit integreren,
gaat eenvoudig. Stel we hebben twee overzichten genormaliseerd
en bij beide een klantentabel gevonden. Achtereenvolgens:
KLANT-1 (klantnr, naam, adres, postcode, plaats,
telefoonnr, faxnr)
integreren
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
58
KLANT-2 (klantnr, aeveradres, aeverpostcode,
aeverplaats, contactpersoon, telefoonnr)
Deze tabellen kunnen worden samengevoegd, want ze hebben
beide dezelfde sleutel. We krijgen hieruit de gezamenlijke tabel
KLANT, waarin alle gegevens van de beide afzonderlijke groepen
zijn opgenomen.
KLANT (klantnr, naam, adres, postcode, plaats,
aeveradres, aeverpostcode, aeverplaats,
telefoonnr, faxnr, contactpersoon)
In deze tabel zijn alle gegevens uit de afzonderlijke tabellen opge-
nomen. Gegevens die in beide tabellen voorkwamen (bijvoorbeeld
het telefoonnummer), nemen we uiteraard slechts n keer op.
Bij het integreren kan er sprake zijn van homoniemen en synonie-
men. Een homoniem is een term waarmee we de ene keer dit en
de andere keer dat bedoelen. In de Nederlandse taal is een bekend
homoniem de term bank. Bedoelen we daarmee een nancile
instelling of een zitmeubel? Meestal blijkt uit de zin waarin we het
woord gebruiken wel wat we precies bedoelen.
Ook bij het normaliseren kun je homoniemen tegenkomen.
Bijvoorbeeld:
LEERLING (leerlingnummer, naam, adres, enzovoort)
VAK (vakcode, naam, cordinator, enzovoort)
Hier is een homoniem aanwezig, te weten de term naam. De ene
keer bedoelen we hiermee de naam van een leerling, de andere
keer de naam van een vak. We moeten streven naar eenduidigheid,
zodat iedereen weet wat we bedoelen als we het hebben over de
naam. Bij homoniemen is er geen eenduidigheid. Homoniemen
zijn dus ongewenst en we moeten ze verwijderen. Dat doen we
door duidelijke namen te gebruiken, die precies aangeven wat we
ermee bedoelen. We vervangen hier dan ook de term naam door
achtereenvolgens naam leerling en vaknaam. We krijgen dan:
LEERLING (leerlingnummer, naam leerling, adres,
enzovoort)
VAK (vakcode, vaknaam, cordinator, enzovoort)
homoniemen
synoniemen
Copyright 2007 Academic Service
4 Normaliseren, verdieping
59
Bij het integreren kan ook sprake zijn van synoniemen. Hiermee
bedoelen we twee termen waarmee we eigenlijk hetzelfde bedoe-
len. Ook dat is in het kader van de eenduidigheid ongewenst.
Bijvoorbeeld:
FACTUUR (factuurnummer, debiteurnummer,
factuurdatum, enzovoort)
KLANT (klantnummer, klantnaam, klantadres,
enzovoort)
In de voorgaande tabellen is er sprake van een synoniem. De term
debiteurnummer is synoniem voor de term klantnummer. We be-
doelen daarmee in beide gevallen het nummer van de klant die bij
ons iets heeft gekocht. Het is daarom verstandig om in FACTUUR
de term debiteurnummer te veranderen in klantnummer.
FACTUUR (factuurnummer, klantnummer, factuurdatum,
enzovoort)
KLANT (klantnummer, klantnaam, klantadres,
enzovoort)
Andersom had natuurlijk ook gekund. Alleen ligt het dan voor de
hand ook de andere gegevens uit de klantentabel een andere naam
te geven en alles te hernoemen naar DEBITEUR.
FACTUUR (factuurnummer, debiteurnummer,
factuurdatum, enzovoort)
DEBITEUR (debiteurnummer, debiteurnaam, debiteuradres,
enzovoort)
Homoniemen en synoniemen komen met name voor als het nor-
maliseren zoveel werk met zich meebrengt dat dit wordt verdeeld
over meerdere personen. Ieder neemt dan een aantal overzichten
voor zijn rekening en na aoop worden alle uitkomsten in elkaar
geschoven, gentegreerd. Als er slechts n persoon bezig is met
het normaliseren van alle overzichten, dan zullen homoniemen
en synoniemen meestal achterwege blijven omdat we automatisch
voor onszelf eenduidige termen gebruikt.
Maak opdracht 4.3.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
60
4.5 Datadictionary
Tijdens het normaliseren wordt achterhaald welke gegevens op
welke wijze in welke bestanden moeten worden opgeslagen. Doel
daarvan is om de gegevens op een eenvoudige manier te kunnen
onderhouden, zonder dat gegevens veelvuldig worden opgeslagen
(redundantie). Tevens wordt de kans op inconsistentie (foutieve
gegevens) aanzienlijk verkleind. Tot nu toe hebben we ons alleen
geconcentreerd op het uiteenrafelen, zodat we te weten kwamen
welke gegevens moesten worden opgenomen in de database.
Het ontwerp op papier dat ontstaat als resultaat van het normali-
seren moet later worden omgezet in een echte database. In de
database wordt vastgelegd met welke tabellen moet worden
gewerkt, hoe die tabellen zijn opgebouwd en welke verbanden er
tussen de tabellen bestaan (ERD). Er wordt echter ook vastgelegd
wat voor soort gegevens we willen vastleggen en welke waarden
daarbij zijn toegestaan. Zo kan een code bijvoorbeeld altijd opge-
bouwd zijn uit cijfers. We zouden er dan voor kunnen kiezen om
de code als een getal op te slaan. We kunnen dan alleen cijfers
invoeren. We kunnen er echter ook voor kiezen om een code als
tekst op te slaan. Hierdoor is het dan mogelijk om ook letters op te
nemen in de code.
In databasemanagementpakketten kunnen verschillende soorten
gegevens worden opgenomen. Bijvoorbeeld:
Numeriek: Getal, al dan niet voorzien van decimalen. Vaak kan
dit weer worden onderverdeeld in een geheel getal
(integer) of een decimaal getal. Soms wordt er nog een
aparte onderverdeling valuta gehanteerd, die auto-
matisch voorzien zal worden van het geldsymbool en
worden afgerond op twee decimalen.
Tekst: Een tekst, die allerlei tekens kan bevatten, bijvoor-
beeld een naam of postcode. De maximale lengte is
van tevoren vastgelegd.
Kladblok: Een tekst waarvan de lengte meestal onbeperkt is, ook
wel memo genoemd.
Datum: Een datum, bijvoorbeeld een geboortedatum. Soms
maakt ook de tijd hier deel van uit.
Logisch: Een logisch veld van het type Ja/Nee, Waar/Niet-waar.
Copyright 2007 Academic Service
4 Normaliseren, verdieping
61
Afhankelijk van het pakket bestaan er nog meer soorten velden of
zijn er speciale mogelijkheden voorhanden. We zullen later zien
wat Access ons precies te bieden heeft.
Naast het feit dat we altijd zullen moeten aangeven wat voor soort
gegevens we gaan gebruiken, moeten we ook altijd zoveel mogelijk
de grenzen opgeven waarbinnen de waarden van het veld mogen
liggen. Dit maakt het mogelijk een hele globale, automatische, con-
trole uit te voeren op de ingevoerde gegevens (consistentie).
Als we te maken hebben met een klantcode, moeten we dus eerst
opgeven of deze code bestaat uit alleen cijfers (numeriek) of ook
uit letters of andere symbolen. In het laatste geval moeten we na-
melijk kiezen voor het type tekst. Daarnaast moeten we opgeven
welke waarden mogen worden ingevoerd. Bestaat de klantcode bij-
voorbeeld altijd uit zes cijfers die moeten liggen tussen de 100.000
en 499.999 of bestaat de klantcode uit een code van twee letters
gevolgd door een spatie gevolgd door een getal van minimaal n
en maximaal drie cijfers?
Tevens dient altijd te worden beschreven of een bepaald gegeven
wel of niet verplicht moet worden ingevuld. Zo zal de klantcode
en de naam van de klant altijd bekend moeten zijn, dus zal het ver-
plicht zijn deze gegevens in te vullen. Het telefoonnummer hoeft
niet verplicht te worden ingevoerd, omdat we rekening willen hou-
den met klanten die hun telefoonnummer geheim willen houden.
We kunnen dan niets invullen, ook al zouden we het graag willen!
De persoon die de database echt gaat bouwen, kan de door ons op-
gegeven beperkingen standaard opnemen in de database. Daardoor
wordt het onmogelijk om gegevens in te voeren die buiten het
opgegeven bereik vallen. Dat maakt de kans op fouten aanzienlijk
kleiner. En dat is mede het doel van een goed ontworpen database.
Om de bouwer van de echte database te vertellen welke gegevens
van welk type zijn en welke beperkingen daarbij gelden, maken we
gebruik van een datadictionary. Deze kan er bijvoorbeeld uitzien
als het voorbeeld hierna.
Een datadictionary kan per gevonden tabel worden gemaakt. Er
kan ook gekozen worden voor n grote datadictionary waarin de
gegevens van alle tabellen gezamenlijk zijn opgenomen. De laatste
vorm heeft het voordeel dat we ieder gegeven slechts n maal hoe-
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
62
ven te beschrijven. Als we werken per tabel, hebben we te maken
met gegevens die in meer dan n tabel voorkomen. Die gegevens
moeten we dan ook meerdere keren beschrijven.
In een datadictionary leggen we gegevens vast van de gegevens
die wij in onze database (willen gaan) bijhouden. We noemen de
gegevens in de datadictionary dan ook wel metagegevens, ofwel
gegevens over gegevens.
Maak opdracht 4.4.
4.6 Samenvatting
In dit hoofdstuk hebben we moeilijker type overzichten genormali-
seerd. Dit zijn overzichten waar meer dan n repeterende groep in
voorkomt. Dit zijn echter ook de overzichten zoals ze in de praktijk
veelvuldig voorkomen. Door de stappen van het normaliseren con-
sequent toe te passen kunnen dergelijke overzichten op een bijna
routinematige manier worden uiteengerafeld.
In dit hoofdstuk hebben we ook gekeken naar een aantal proble-
men en eigenaardigheden zoals die in de praktijk blijken voor te
komen. We kunnen eventueel zelfstandig sleutels bedenken en
gegevens, vanuit praktisch oogpunt, verder opsplitsen in zinvolle
deelgegevens.
Vervolgens hebben we geleerd hoe we bij meer dan n overzicht
de gevonden derde normaalvormen kunnen integreren tot n
eindresultaat. Daarbij spelen homoniemen en synoniemen een rol.
Ten slotte hebben we gezien hoe we een datadictionary moeten
Gegeven Type Waardenbereik Verplicht Omschrijving
Klantcode Geheel 100.000-499.999 Ja Identificeert een klant,
getal numeriek, altijd zes
cijfers.
Telefoon- Tekst Precies 10 cijfers Nee Moet tekst zijn in
nummer verband met voor-
lopende nul van het
kengetal
Klantnaam Tekst Maximaal Ja Achternaam van de
25 tekens klant
Geboorte- Datum 1-1-1860 Nee Geboortedatum van de
datum t/m vandaag klant.
Gehuwd Logisch Ja / Nee Nee Is de klant gehuwd, mag
worden leeg gelaten.
metagegevens
Copyright 2007 Academic Service
4 Normaliseren, verdieping
63
opstellen. Een datadictionary beschrijft de gegevens die we tijdens
het normaliseren hebben gevonden. Kenmerken als type, bereik,
verplicht en omschrijving spelen daarbij een rol.
Opdrachten
4.1 Geneste repeterende groepen
a. Het overzicht van guur 4.5 is in gebruik op de verkoopafde-
ling van de rma ZEEP BV. Deze rma levert aan zelfstandige
winkelbedrijven en heeft daartoe een twintigtal vertegenwoor-
digers in dienst die de winkels langsgaan en orders opnemen.
Normaliseer dit overzicht tot en met de derde normaalvorm.
Ga er daarbij van uit dat een vertegenwoordiger een vast rayon
heeft en nooit buiten zijn rayon werkzaam is. Teken ook het
bijbehorende ERD.
b. Het overzicht van guur 4.6 is in gebruik bij een MBO-insti-
tuut. Dit instituut biedt zijn leerlingen buiten de reguliere lessen
de mogelijkheid om tegen zeer gereduceerd tarief extra cursus-
sen te volgen. Daarbij maakt men onder andere gebruik van het
overzicht uit guur 4.6. Normaliseer dit overzicht tot en met
de derde normaalvorm. Ga ervan uit dat een leerling meerdere
extra cursussen kan volgen, maar niet op dezelfde dag. Op n
dag worden er meerdere cursussen gegeven. Ten slotte geldt nog
dat een leerling bij maximaal n afdeling staat ingeschreven.
Aan het hoofd van een afdeling staat slechts n persoon, het
afdelingshoofd. Teken ook het bijbehorende ERD.
Figuur 4.5
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
64
Databaseontwikkeling 4 Access 2003
64
c. In het overzicht van guur 4.7 worden de gegevens van de door
een vertegenwoordiger afgelegde bezoeken vastgelegd. Per
Figuur 4.6
Figuur 4.7
Copyright 2007 Academic Service
4 Normaliseren, verdieping
65
4 Normaliseren, verdieping
65
bezoek wordt er n regel opgenomen. Een vertegenwoordiger
heeft meerdere klanten onder zijn/haar hoede. Klanten hebben
te maken met meerdere vertegenwoordigers. Klanten worden
hooguit n keer per dag door n van de vertegenwoordigers
bezocht. Een vertegenwoordiger werkt vanuit n vast liaal.
De vertegenwoordigers hebben per klant te maken met n
vaste contactpersoon.
Normaliseer dit overzicht tot en met de derde normaalvorm en
teken ook het ERD.
4.2 Opeenvolgende repeterende groepen
Uitzendbureau t VolleVat fungeert als tussenpersoon tussen bedrij-
ven die werknemers zoeken en werknemers die bedrijven zoeken.
Om iedereen zo goed mogelijk van dienst te kunnen zijn, houdt
het van de ingeschreven werknemers een aantal gegevens bij, zie
guur 4.8.
Normaliseer dit overzicht tot en met de derde normaal normaal-
vorm. Ga er daarbij van uit dat een werknemer hoogstens voor
n werkgever tegelijkertijd werkt. Iemand kan meerdere keren bij
hetzelfde bedrijf worden ingezet. Een werknemer volgt een cursus
slechts n keer.
Teken ook het bijbehorende ERD.
Figuur 4.8
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
66
Databaseontwikkeling 4 Access 2003
66
4.3 Integreren
Gegeven is het overzicht zoals dat gebruikt wordt bij een camping,
zie guur 4.9. Daarbij is de volgende derde normaalvorm gevon-
den.
3 NV PLAATS (plaats, max. aantal tenten,
max. aantal personen,
prijs laagseizoen,
prijs hoogseizoen,
voorzieningcode)
VOORZIENING (voorzieningcode, omschrijving)
Bij dezelfde camping maakt men ook gebruik van het overzicht
zoals afgebeeld in guur 4.10. Daarbij is de volgende derde nor-
maalvorm gevonden.
Figuur 4.9
Figuur 4.10
Copyright 2007 Academic Service
4 Normaliseren, verdieping
67
4 Normaliseren, verdieping
67
3 NV PLEK (plaatscode, toelichting plaats)
KLANT (klantcode, naam, adres,
postcode, plaats,
bank/gironummer,
telefoonnummer)
RESERVERING (reserveringcode, plaatscode,
datumbegin, datumeind,
klantcode, omschrijving,
factuurdatum, betaaldatum)
NACHTREGISTER (reserveringscode, volgnummer,
geslacht, voorletters, naam,
geboortedatum)
Integreer de gevonden derde normaalvormen tot n derde nor-
maalvorm. Verwijder daarbij homoniemen en synoniemen. Teken
tevens het bijbehorende ERD.
4.4 Datadictionary
a. In paragraaf 4.6 hebben we twee normaalvormen gentegreerd
tot n. Maak voor deze gentegreerde normaalvorm n geza-
menlijke datadictionary.
b. In paragraaf 4.3 is uitgaande van het overzicht zoals getoond
in guur 4.11 (zie pagina 58) de bijgaande derde normaalvorm
gevonden. Maak de hierbij behorende datadictionary.
FACTUUR (factuurnummer, kenteken, kmstand,
datum)
FACTUURWERK (factuurnummer, werknummer, aantal,
werkprijs)
FACTUURONDERDEEL(factuurnummer, onderdeelnummer,
aantal onderdelen, onderdeelprijs)
WERK (werknummer, werkomschrijving,
adviesprijs)
ONDERDEEL (onderdeelnummer,
onderdeelomschrijving,
advies-onderdeelprijs)
AUTO (kenteken, merk, type)
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
68
Databaseontwikkeling 4 Access 2003
68
Figuur 4.11
Copyright 2007 Academic Service
5 Eenvoudige
bewerkingen in Access
5.1 Inleiding
In dit hoofdstuk komt het werken met het pakket Access ter sprake.
Access is een databasepakket van Microsoft. Met een database-
pakket zijn we in staat het logisch ontwerp zoals dat tijdens het
normaliseren is ontstaan technisch te implementeren. We kunnen
vervolgens (grote hoeveelheden) gegevens invoeren, bijhouden,
bewaren, manipuleren en opvragen. Het pakket is toepasbaar in
allerlei situaties. Zo kan een bibliotheek bijhouden welke boeken
aan welke personen zijn uitgeleend en een magazijnmeester van
een groot productiebedrijf kan bijhouden welke goederen in voor-
raad zijn, in welke aantallen, wat het verbruik is en welke open-
staande bestellingen er nog zijn.
Om gegevens te kunnen bijhouden moeten deze gestructureerd
worden opgeslagen. Hoe gegevens gestructureerd kunnen worden,
door te normaliseren, is in de vorige hoofdstukken toegelicht. Het
resultaat van het structureren bestaat uit een verzameling entiteit-
Boeknummer Titel Schrijver Aanschafdatum Etc.
EC466-32 Boekhouden Fuchs e.a. 23-5-1996 ..
gestaafd
MM844-02 Marketing Kotler 06-7-1997 ..
Management
WK536-78 Basis wiskunde Van den Hoek 23-5-1996 ..
LO466-06 Inleiding logistiek Schmidt e.a. 12-12-1998 ..
Rijen
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
70
typen die iets met elkaar te maken hebben die met elkaar gere-
lateerd zijn. Een entiteittype kan ook gezien worden als een tabel.
Op de vorige pagina is een tabel weergegeven waarin de gegevens
van de boeken van een schoolbibliotheek staan vermeld.
We kunnen een tabel opvatten als een verzameling rijen. En rij
bevat dan alle gegevens, alle van belang zijnde kenmerken, van
n boek. In plaats van rijen hebben we het in Access over records.
Een record bevat dan alle gegevens van n item uit de tabel, in dit
geval dus alle gegevens van steeds n boek. We kunnen een tabel
echter ook zien als een verzameling kolommen. In iedere kolom
wordt n gegeven bijgehouden: bijvoorbeeld de titel of de schrij-
ver. In plaats van over kolommen praten we in Access meestal over
velden of attributen. Om tabellen aan te kunnen duiden geven we
ze een naam. Deze naam dient een zo goed mogelijke beschrijving
te zijn van het object zoals dat in de tabel wordt weergegeven. In
dit voorbeeld is als naam gekozen voor boeken.
Een aantal bij elkaar horende tabellen die tezamen een werkbaar
geheel vormen, wordt wel een database genoemd. De database
van de bibliotheek zou kunnen bestaan uit de tabellen boeken,
uitleningen, lezers en reserveringen. Hiermee kan worden vast-
gelegd wie welke boeken heeft geleend of wenst te lenen. We zul-
len in de rest van dit boek leren werken met tabellen en databases;
we laten zien hoe deze moeten worden gecreerd, gevuld, gemu-
teerd en geraadpleegd. Daartoe zal steeds eerst worden besproken
welke handelingen we moeten verrichten, waarna er een opdracht
volgt waarbij we de zojuist besproken handelingen gaan uitvoeren.
5.2 Het programma Access starten
Om te kunnen werken met Access moeten we eerst op de gebrui-
kelijke manier de computer opstarten en eventueel inloggen op
een netwerk. Ga naar de Start-knop en kies achtereenvolgens
Programmas, Ofce en Microsoft Access. In sommige gevallen
verloopt het starten van Access op een iets afwijkende manier, dit
is afhankelijk van hoe de instellingen ter plekke zijn.
De praktijk in dit boek wordt gedaan met behulp van databases die
te vinden zijn op de cd-rom die bij dit boek wordt geleverd. Deze
databases moeten gekopieerd worden naar de harddisk of de dis-
kette. Bewerkingen zijn immers alleen mogelijk als er schrijfrech-
tabel
records
velden of atributen
database
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
71
ten op het medium zijn. In het vervolg zullen we ervan uitgaan dat
de databases op een diskette zijn opgeslagen.
5.3 De database en de tabel creren
5.3.1 De database aanmaken
Na het starten van Access meldt het programma zich met het dia-
loogvenster dat is afgebeeld in guur 5.1 of guur 5.2.
Het scherm van guur 5.1 laat aan de rechterkant niet het taak-
venster zien, dat guur 5.2 wel laat zien. Figuur 5.2 verschijnt ook
door in guur 5.1 op de knop Nieuw te drukken of door te kiezen
voor Bestand, Nieuw. We nemen in de rest van het boek aan dat na
het starten direct guur 5.2 op het scherm verschijnt. Je kunt dit
overigens afdwingen door na het openen van een database in het
menu te kiezen voor Extra, Opties, Weergave en vervolgens een
vinkje te plaatsen bij Taakvenster opstarten.
In het scherm van guur 5.2 kun je opgeven of je wilt werken
met een al bestaande database via Bestand, Openen. Maar het is
makkelijker om op het bestaande bestand in het taakvenster te
klikken, waarna het direct wordt geopend. Wordt het gewenste
bestand niet getoond dan kun je in het taakvenster via Meer ..... het
Figuur 5.1
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
72
scherm Openen oproepen, dat je al kent uit andere Microsoft-appli-
caties. Wil je een nieuwe database aanmaken dan klik je in het
taakvenster op Een nieuw bestand maken, waarna je in een nieuw
taakvenster terechtkomt. Hier klik je onder het kopje Nieuw op de
keuze Lege database.
Een database is de basis voor een verzameling bij elkaar horende
tabellen. Voordat je tabellen kunt aanmaken of gebruiken, moet je
eerst de bijbehorende database aanmaken en selecteren. Omdat we
nog geen database hebben, gaan we deze nu maken.
Kies Bestand, Nieuw.
Kies in het taakvenster, onder het kopje Nieuw, voor Lege database
door er n keer op te klikken.
Geef op waar de database moet worden opgeslagen en met welke
naam. Zie guur 5.3.
Selecteer boven in het venster van guur 5.3 bij Opslaan in de
juiste schijf en typ onderin bij Bestandsnaam de naam: Oefening.
Klik vervolgens op de knop Maken.
De database wordt nu aangemaakt. Deze bevat natuurlijk nog
geen enkele tabel. Het getoonde venster (zie guur 5.4) met daarin
de inhoud van de database bevat daarom alleen een aantal items
waarmee we tabellen kunnen gaan maken.
Figuur 5.2
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
73
Maak het venster eventueel beeldvullend.
5.3.2 De tabel aanmaken
Een database bevat onder meer een aantal tabellen die onderling
verband houden. We kunnen tabellen toevoegen aan een database
door deze database eerst te openen:
Kies in het venster Oefening : Database in het linkerdeel, onder het
kopje Objecten, het object Tabellen en vervolgens in de menubalk
voor Nieuw. Het scherm van guur 5.5 verschijnt.
We willen de tabel gaan ontwerpen.
Figuur 5.3
Figuur 5.4
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
74
Kies voor de Ontwerpweergave. Klik daarna op OK. We had-
den dit ook kunnen bereiken door in het scherm, zoals getoond in
guur 5.4, direct te kiezen voor Tabel maken in ontwerpweergave.
Een tabel beschrijft een object, bijvoorbeeld een klant of een boek.
We moeten nu opgeven welke beschrijvende gegevens, attributen
ofwel velden, we willen opnemen in de tabel. Bovendien moeten
we bij ieder veld opgeven welk soort gegeven daar mag worden
ingevoerd, een getal, een tekst, een datum, enzovoort. In het ven-
ster van guur 5.6 kunnen we opgeven welke velden we in de tabel
willen opnemen en welke eigenschappen we aan dit veld wensen
toe te kennen.
In het bovenste gedeelte van het venster, bij Veldnaam, geven we
van ieder veld allereerst de naam op, vervolgens bij Gegevenstype
het soort veld en ten slotte de beschrijving van het veld bij
Figuur 5.5
Figuur 5.6
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
75
Beschrijving. We maken voor het soort veld een keuze uit de keu-
zelijst (klik op de knop om de keuzelijst te krijgen):
Tekst Hier kunnen we tekst opnemen. De tekst mag uit iedere
combinatie van willekeurige tekens bestaan met een maximale
lengte van 255, dus ruim voldoende voor de meeste toepassingen
als namen, omschrijvingen, enzovoort.
Memo Een veld van het type memo kunnen we zien als een soort
kladblok. We kunnen hier tekst opnemen tot een maximum van
64.000 tekens.
Numeriek Dit veldtype is bedoeld voor het opnemen van getal-
len, al dan niet voorzien van decimalen. Het soort getallen dat we
kunnen gebruiken, wordt gedetailleerd besproken in bijlage A.
Datum/tijd Een veld bedoeld voor het opnemen van datums en
tijdstippen. Er wordt automatisch gecontroleerd op juistheid. De
datum 29 februari 1998 zal dus niet geaccepteerd worden. De
manier waarop Access datums accepteert en waarop we datums
moeten invoeren, is afhankelijk van de instellingen zoals we
die onder Windows hebben opgegeven. Het kan zijn dat eerst de
maand moet worden ingevoerd, het kan zijn dat er punten in plaats
van streepjes gebruikt worden, het kan zijn dat we altijd twee
cijfers moeten invoeren, het kan zijn dat...
Valuta Te vergelijken met een veld van het type numeriek, maar
nu voorzien van een valuta-aanduiding en met maximaal vier deci-
malen.
Autonummering Een veld waarvan de inhoud automatisch steeds
met n verhoogd wordt, bedoeld om automatisch te nummeren.
De startwaarde waarmee het nummeren begint, kan eventueel
worden gewijzigd (zie bijlage A).
Ja/Nee Is iets wel of niet waar?
OLE-object Hier kunnen we objecten uit andere Windows-appli-
caties opnemen, bijvoorbeeld graeken, plaatjes, geluiden, enzo-
voort.
Hyperlink Een adres dat verwijst naar een bestand ergens anders
op een computer. Het betreffende bestand kan zelfs benaderd wor-
den via een netwerk of internet.
Wizard Opzoeken Hiermee kunnen we ervoor zorgen dat de in
te voe-ren waarden ergens anders worden opgezocht. We kunnen
zo bijvoorbeeld boeken alleen laten uitlenen aan lezers van wie het
nummer in de lezertabel voorkomt.
In het onderste deel van het scherm kunnen we voor ieder veld
nadere beperkingen opgeven door deze in te voeren op de tabbla-
den Algemeen en Opzoeken. We gebruiken hier voorlopig alleen
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
76
het gegeven Veldlengte om de lengte van tekstvelden te beperken.
Standaard krijgen die namelijk een lengte van 50 tekens. In het
geval van numerieke velden kan de veldlengte worden gebruikt om
het soort getal op te geven, bijvoorbeeld Integer of Decimaal. Later
zullen we op de andere mogelijkheden van deze twee tabbladen
terugkomen. Een uitgebreide bespreking van de veldeigenschappen
staat in bijlage A.
In iedere tabel moet een sleutelveld (of een combinatie van sleu-
telvelden) worden aangewezen. Met behulp van dit sleutelveld
kunnen we later gegevens terugzoeken. Om dit te kunnen doen
dient een sleutelwaarde altijd uniek te zijn. Als in de tabel Boek
het veld Boeknummer de rol van sleutelveld speelt, dan dient ieder
boeknummer hooguit n keer voor te komen. Anders kunnen we
immers niet bepalen welk boek wordt bedoeld. In hoofdstuk 3 en 4
is hier nader op ingegaan.
Om een veld als sleutelveld aan te wijzen plaatsen we de cursor in
de regel van het betreffende veld en klikken in de werkbalk op het
sleutelsymbool of kiezen in het menu Bewerken, Primaire sleutel.
Voor aan de regel van het betreffende veld verschijnt nu het sleu-
telsymbool. Access zal er zelf zorg voor dragen dat alle waarden
in het betreffende veld uniek blijven. Willen we de sleutel uit een
combinatie van twee of meer velden laten bestaan dan dienen
we de betreffende velden eerst te selecteren door, terwijl we de
Control-toets ingedrukt houden, te klikken op de grijze blokjes
voor de betreffende veldnamen. Hierna maken we ze op de boven-
staande wijze bekend als sleutel.
Nadat op deze wijze alle velden bekend gemaakt zijn, slaan we het
ontwerp van de tabel op door in het menu te kiezen voor Bestand,
Opslaan. Geef, als dit nog niet is gedaan, de tabel een naam.
We kunnen het werken met de database beindigen door in het
menu te kiezen voor Bestand, Sluiten. Hierna kunnen we Access
afsluiten door te kiezen voor Bestand, Afsluiten.
Opgave
5.1 a. Start Access en creer de database oefening, zoals is beschre-
ven.
b. Ontwerp een tabel met de indeling die hieronder staat weerge-
geven. Zorg ervoor dat het veld Volgnummer sleutelveld wordt.
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
77
5 Eenvoudige bewerkingen in Access
77
c. Beindig het aanmaken van de tabel, sla daarbij de tabel op
onder de naam Boeken en sluit de database af.
Veldnaam Gegevenstype Veldlengte
Volgnummer Autonummering
Boeknummer Tekst 8
Titel Tekst 30
Schrijver Tekst 30
Aanschafdatum Datum/tijd
Aanschafprijs Valuta
Afgeschreven Ja/Nee
5.4 Een bestaande database openen
5.4.1 Een bestaande database selecteren
Om te werken met een tabel moeten we eerst de database waar die
tabel toe behoort activeren. Start allereerst Access, zie guur 5.7.
Als het taakvenster niet getoond wordt, druk dan eenmaal op
Nieuw. Of kies in het menu voor Bestand, Nieuw. Door nu te klik-
ken op de betreffende bestandsnaam open je de database. Het kan
Figuur 5.7
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
78
zijn dat je eerst nog een beveiligingswaarschuwing te zien krijgt,
bedoeld om te voorkomen dat je onbewust onveilige code activeert
die mogelijk in het te openen bestand is opgenomen. Vertrouw je
de makers van de database dan open je deze. Je kunt het beveili-
gingsniveau eventueel aanpassen via Extra, Macro, Beveiliging.
Door het laagste niveau te kiezen blijft de waarschuwing welis-
waar achterwege, maar neem je wel risico! Wordt het gewenste
bestand niet getoond dan kun je in het taakvenster via Meer ..... het
scherm Openen oproepen, dat je al kent uit andere Microsoft-appli-
caties. Na het openen van de database kunnen we alle in deze data-
base opgenomen elementen benaderen, ook de tabellen.
5.4.2 Een bestaande tabel selecteren
Na het openen van een database zijn alle tabellen uit de betreffende
database te benaderen. Om een tabel te openen moeten we in het
databasevenster het overzicht Tabellen activeren, de betreffende
tabel markeren en vervolgens op de knop Openen klikken. De ta-
bel wordt zo getoond dat we direct gegevens kunnen toevoegen of
bestaande gegevens kunnen wijzigen (guur 5.8).
De eerder ingevoerde records zijn zichtbaar. Verder wordt er een
lege regel getoond waarin we de gegevens van een nieuw record
kunnen invoeren. Op het moment dat we met het invoeren van een
nieuw record beginnen, verschijnt aan het begin van de regel een
pennetje. Dit geeft aan dat de ingevoerde gegevens nog moeten
worden weggeschreven naar de tabel. Het record is dus nog niet
echt aan de tabel toegevoegd: dat gebeurt pas op het moment dat
we de recordwijzer naar een ander record verplaatsen.
Figuur 5.8
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
79
Als de tabel een groot aantal rijen bevat, kunnen deze niet alle-
maal tegelijk getoond worden. We kunnen dan door de records
bladeren door gebruik te maken van de pijltjestoetsen op het
toetsenbord, door gebruik te maken van de schuifbalken die in
het venster worden getoond of door gebruik te maken van de ver-
plaatsingsknoppen linksonder in het venster ( , ). Om in n
keer naar het eerste record te springen kunnen we gebruikmaken
van de verplaatsingsknop of de toetsencombinatie Ctrl+Home.
Naar het einde van de tabel springen we snel met de knop of
met de toetsencombinatie Ctrl+End. Met de knop springen we
in n keer naar het einde van de tabel en voegen daar een nieuwe,
nog lege rij toe. Binnen een record verplaatsen we de cursor met
de muis, de pijltjestoetsen, met de toets Tab of Shift+Tab of met de
toetsen Home dan wel End.
5.4.3 Het ontwerp van de tabel aanpassen
Het kan zijn dat er bij het ontwerpen van de tabel fouten zijn
gemaakt. We kunnen dan het ontwerp aanpassen:
Open de tabel Oefening met de knop Ontwerpen. We komen in
hetzelfde scherm terecht als eerder is gebruikt om de tabel te ont-
werpen.
Selecteer het betreffende veld en breng de gewenste wijziging aan.
Het kan gebeuren dat we de melding krijgen dat er gegevens verlo-
ren (kunnen) gaan. Dat gebeurt bijvoorbeeld wanneer we de lengte
van een veld verkleinen. De tekens die niet meer in het verkleinde
veld passen, raken we in dat geval kwijt.
Voeg zonodig velden toe door deze er op de bekende manier onder
aan de lijst bij te plaatsen.
Het kan ook zijn dat we een veld willen verwijderen. Markeer
daartoe het betreffende veld door links van de veldnaam op de
knop te klikken. We markeren daarmee de hele regel. Verwijder
nu met behulp van de toets Delete het veld. We kunnen ook ge-
bruikmaken van de knop Knippen of in het menu kiezen voor
Bewerken, Verwijderen.
Op soortgelijke wijze passen we de volgorde van de velden onder-
ling aan. Markeer een te verplaatsen veld en versleep het vervol-
gens naar de nieuwe plaats.
Sluit na het aanbrengen van alle wijzigingen op de bekende manier
het ontwerpen af met Bestand, Sluiten.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
80
Het is verstandig eerst een kopie te maken van een tabel voordat
we overgaan tot het aanbrengen van wijzigingen in het ontwerp
dit om te voorkomen dat we belangrijke informatie kwijtraken
doordat we bijvoorbeeld per ongeluk een veel te kleine veldlengte
opgeven. Het maken van een kopie van een tabel is eenvoudig:
Selecteer na het openen van de database de betreffende tabel in het
overzicht Tabellen.
Kies in het menu Bewerken, Kopiren of klik op de knop
Kopiren.
Plaats de kopie in het databasescherm met de menukeuze
Bewerken, Plakken of met de knop Plakken. Het venster Plakopties
voor tabel (guur 5.9) wordt nu getoond.
We kunnen de naam voor de kopietabel opgeven, maar we kun-
nen ook opgeven wat er precies moet worden gekopieerd, alleen de
structuur, zowel de structuur als de gegevens, of dat de gegevens
van de tabel moeten worden toegevoegd aan een reeds bestaande
tabel.
5.5 Records manipuleren
5.5.1 Records toevoegen
We voegen records toe door de cursor te plaatsen in de nieuwe,
lege regel. Deze regel is gemarkeerd met een asterisk (*). We hoe-
ven nu alleen nog maar de nieuwe gegevens in te toetsen.
5.5.2 Records wijzigen
Records wijzigen doen we door het betreffende record te zoeken en
de cursor in het betreffende record te plaatsen. Vervolgens kunnen
we de nieuwe gegevens intoetsen.
Figuur 5.9
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
81
5.5.3 Records verwijderen
We kunnen records verwijderen door de cursor in het betref-
fende record te plaatsen en vervolgens in het menu te kiezen voor
Bewerken, Record verwijderen. Willen we meerdere records tege-
lijk verwijderen, dan kunnen we deze markeren door met de muis
in de linkerbalk te slepen of door het eerste record in de linkerbalk
te markeren, naar het laatste record van de te verwijderen reeks te
gaan en dit te markeren met de Shift-toets ingedrukt. Hierna kun-
nen we met Bewerken, Record verwijderen de selectie laten ver-
wijderen. Gemarkeerde records kunnen we ook verwijderen door
op de toets Delete te drukken. Voordat de records denitief ver-
wijderd worden, waarschuwt Access nog even voor de gevolgen.
Verwijderde records kunnen we niet meer terugroepen. We moeten
dan opnieuw de gegevens invoeren!
Het kan zijn dat de menuoptie Record verwijderen niet direct
getoond wordt nadat we hebben gekozen voor Bewerken. Dat is
het gevolg van de intelligente menus zoals die ook in Access aan-
wezig zijn. Alleen de veel gebruikte menukeuzes worden getoond.
Dit heeft tot gevolg dat de menus er van gebruiker tot gebruiker
net even iets anders uit kunnen zien. Willen we van een bepaalde
menukeuze alle items zien, dan klikken we op de dubbele pijltjes
onderaan de menulijst. Nu worden wel alle items getoond.
5.5.4 Records sorteren
Records worden standaard getoond in volgorde van sleutelwaarde.
Om de volgorde te wijzigen plaatsen we de muiswijzer in de kolom
waarop de volgorde gebaseerd moet zijn. Kies voor de gewenste
sortering door in het menu te kiezen voor Records, Sorteren en
vervolgens Oplopend sorteren of Aopend sorteren. We heffen een
sortering op door te kiezen voor Records, Filter/sorteervolgorde
ongedaan maken. Of we maken gebruik van de desbetreffende
knoppen in de menubalk.
5.5.5 Records filteren
Normaal gesproken worden alle rijen getoond die in de tabel zijn
opgenomen. Het is echter mogelijk om alleen records te tonen die
voldoen aan een door ons op te geven criterium. We lteren daar-
mee deze records eruit. De overige records worden niet getoond.
Een selectielter geven we op door in een veld van een record de
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
82
gewenste waarde te markeren (er met de muis overheen slepen) en
hierna te kiezen voor Records, Filter. Alleen de records die vol-
doen, worden nu getoond. Onder in het venster wordt getoond dat
er een lter actief is. Een lter heffen we op door te kiezen voor
Records, Filter/sorteervolgorde ongedaan maken.
Willen we lteren op meer dan n gegeven, dan kunnen we
gebruikmaken van een formulierlter via Records, Filter,
Formulierlter. We kunnen nu in iedere kolom een of meer waar-
den opgeven. Deze waarden kunnen we bovendien kiezen uit alle
waarden die in de betreffende kolom voorkomen. Om meerdere
waarden in n kolom op te geven maken we gebruik van het
tabblad Of onder in beeld. Ieder record dat voldoet aan de voor-
waarden zoals in n van de tabbladen is opgegeven, zal worden
getoond. We activeren het lter door in het menu te kiezen voor
Filter, Filter/sorteervolgorde toepassen. Ook hier kunnen we weer
gebruik maken van de desbetreffende knoppen in de menubalk.
5.5.6 Records zoeken
In grote tabellen is het vaak een hele klus om een speciek record
te selecteren omdat het handmatig opzoeken hiervan veel tijd in
beslag neemt. Met Access is het mogelijk records te zoeken aan de
hand van een door ons op te geven zoekwaarde:
Zet de cursor eerst in de kolom waarin we willen laten zoeken en
kies Bewerken, Zoeken. Zie guur 5.10.
Geef in het veld Zoeken naar de waarde op die gezocht moet worden.
Het veld Zoeken in gebruiken we om op te geven of alleen in het
geselecteerde veld moet worden gezocht of in de gehele tabel.
Geef in het veld Waar op hoe precies er gezocht moet worden. De
Figuur 5.10
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
83
keuze Gedeelte van veld heeft tot gevolg dat er gekeken wordt of
de zoekwaarde ergens in het veld voorkomt. De keuze Heel veld
zoekt naar records waarvan de veldwaarde precies gelijk is aan de
opgegeven zoekwaarde. Met de keuze Begin van veld kijken we of
het veld begint met de opgegeven waarde.
Het veld Zoeken geeft de mogelijkheid om op te geven in welke
richting gezocht moet worden. Met de keuze Alles doorzoeken we
alle records, Omhoog zoekt vanaf het actieve record naar boven en
Omlaag zoekt vanaf het geselecteerde record naar beneden.
Geef ten slotte ook nog op, door middel van afvinken, of er ver-
schil gemaakt moet worden tussen hoofd- en kleine letters en of er
ook op de opmaak gelet moet worden. Let erop dat een computer
in het algemeen verschil maakt tussen hoofd- en kleine letters.
De tekst Popmuziek is voor een computer niet gelijk aan de tekst
POPMUZIEK. Het is dus vaak zinvol om de optie Identieke hoofd-
letters/kleine letters NIET af te vinken. In dat geval zal er namelijk
geen verschil gemaakt worden tussen beide teksten omdat Access
dan geen onderscheid maakt tussen hoofdletters en kleine letters.
De knop Volgende zoeken zoekt steeds naar het eerstvolgende
record dat voldoet.
Bij het opgeven van de te zoeken waarde kunnen we gebruik-
maken van jokers (wildcards). Dit zijn tekens die voor een of meer
letters of cijfers staan. Er zijn drie tekens die veel gebruikt worden.
Het teken * geeft aan dat een willekeurig aantal tekens voldoet.
Het teken ? staat voor n teken. Het teken # komt overeen met n
cijfer. Dus bij b*s voldoen bijvoorbeeld: bas, bos, baas, buitenhuis,
zolang het woord maar begint met de letter b en eindigt op de letter
s. Bij b?s voldoen bas, bos, bis, enzovoort. Tussen de letters b en s
mag nu slechts n ander teken voorkomen. Aan het zoekcriterium
19#5 voldoen onder meer 1905, 1915, 1925. Het derde teken moet
wel een cijfer zijn.
5.5.7 Records zoeken (en vervangen)
Op soortgelijke wijze als bij het zoeken naar records kunnen we
ook de inhoud van velden automatisch laten wijzigen. We laten
dan zoeken naar een door ons op te geven veldwaarde en deze
laten we vervolgens vervangen door een ook door ons op te geven
waarde. Om het zoeken en vervangen uit te laten voeren kiezen
we voor Bewerken, Zoeken. Vervolgens selecteren we het tabblad
Vervangen. De verdere afhandeling lijkt sterk op wat in de vorige
paragraaf is besproken.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
84
Databaseontwikkeling 4 Access 2003
84
Opgaven
5.2 a. Selecteer de database Oefening en open de tabel Boeken.
b. Voer vijf records in. In het veld Afgeschreven kunnen we een
vinkje plaatsen om hier de waarde Ja op te nemen. Een vinkje
plaatsen we met behulp van de spatiebalk of door erop te dub-
belklikken.
c. Let op de manier waarop een datum moet worden ingevoerd.
Deze is afhankelijk van de instellingen van Windows. Probeer
de datum 28 januari 2000 eens in te voeren. Het kan zijn dat we
moeten invoeren: 28-1-2000, 28-01-2000, 1-28-2000 of
01-28-2000. Het kan zelfs zijn dat we het jaartal 2000 moeten
invoeren als 00. Let ook op het formaat waarin Access de
datum vervolgens in de tabel weergeeft. Deze kan weer afwij-
kend zijn van het formaat zoals we dat hebben ingevoerd.
d. Sorteer de gegevens op basis van de aanschafprijs.
e. Zoek alle records waarbij de naam van de schrijver begint met
de letter W. (Als die er niet is, kies dan een andere beginletter.)
f. Verwijder het derde record.
g. Voor vrijwel iedere besproken handeling is er ook een knop
opgenomen in de werkbalk. Zoek de knoppen voor achtereen-
volgens Record verwijderen, Nieuw record, Zoeken,
Selectielter en Oplopend sorteren.
h. Sluit de tabel en de database af.

5.3 a. Selecteer de database Reisbureau en activeer de tabel
Bestemming.
b. In verband met de politieke situatie worden er geen reizen meer
georganiseerd naar Irak. Verwijder op een zo gemakkelijk mo-
gelijke manier alle bestemmingen gelegen in dit land. (Zorg er
dus voor dat ze direct onder elkaar komen te liggen!)
c. Iemand wenst een vakantie te boeken ergens in Zuid-Amerika.
Welke bestemmingen kunnen wij aanbieden? Laat alleen deze
bestemmingen zien. (Gebruik dus een lter!)
d. Hef het lter weer op.
e. Welke reizen duren er 14 dagen en kosten 1600,? Toon
tegelijkertijd de reizen met een vertrekdatum van 10 mei 2005.
Gebruik de tabel Reis en gebruik een formulierlter.
f. Hef het lter weer op.
g. Een wat slordige medewerker heeft de naam van Spanje onjuist
in de tabellen opgenomen. Verbeter deze foute naam (Spagne)
op de meest efcinte manier.
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
85
5.6 De bestandsweergave wijzigen
Een tabel wordt getoond in een standaard lay-out, die we echter
kunnen aanpassen. We zullen kort bespreken hoe we het letter-
type, de opmaak van een cel, de kolombreedte en rijhoogte kun-
nen wijzigen en hoe we de plaats en eigenschappen van kolommen
kunnen instellen. Om dit te kunnen doen moeten we uiteraard
eerst de betreffende tabel openen.
5.6.1 Lettertype aanpassen
Het lettertype passen we aan door in het menu te kiezen voor
Opmaak, Lettertype, waarna het bijbehorende venster (guur 5.11)
verschijnt.
We kunnen het lettertype, de tekenstijl, de puntgrootte oftewel
punten, onderstrepen en kleur instellen. Het font wordt voor de
hele tabel ingesteld.
5.6.2 Opmaak van een cel aanpassen
Om de opmaak van een cel aan te passen kiezen we voor Opmaak,
Gegevensblad, zodat het venster uit guur 5.12 verschijnt.
Hierin kunnen we opgeven of we rasterlijnen wensen weer te
geven, welke kleur we willen gebruiken voor de rasterlijn en
achtergrond en op welke wijze, met welk effect, een cel moet wor-
den getoond. We kunnen de stijl van de diverse randen en lijnen
aangeven (gesloten, gestippeld, gestreept, enzovoort). Ten slotte
kun je in het veld Richting aangeven of je de velden van links naar
Figuur 5.11
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
86
rechts wilt plaatsen. Dat is gebruikelijk in de Engelstalige landen
en in West-Europa. Je kunt ook aangeven dat je de velden van
rechts naar links wilt plaatsen. Dit laatste is gebruikelijk in de
landen van het Midden-Oosten. Het sluit aan op de daar gebrui-
kelijke lees- en schrijfrichting. Ook deze instellingen gelden voor
de hele tabel.
5.6.3 Kolombreedte en rijhoogte instellen
De kolombreedte of rijhoogte passen we aan met Opmaak,
Kolombreedte of Opmaak, Rijhoogte. Afhankelijk van de keuze
verschijnt guur 5.13 of 5.14.
We kunnen nu de kolombreedte instellen. De breedte wordt inge-
steld voor de geselecteerde kolom(men) of voor de kolom waar
de cursor zich bevindt. De rijhoogte wordt ingesteld voor de hele
tabel. Door het vakje Standaardhoogte/breedte af te vinken zet-
ten we de hoogte of breedte weer terug op de standaardwaarde.
De optie Best passend bij het instellen van de kolombreedte zorgt
ervoor dat de breedte zo wordt ingesteld dat de gegevens precies in
de kolom passen.
Figuur 5.12
Figuur 5.13 Figuur 5.14
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
87
We kunnen de breedte van een kolom ook aanpassen door in de
kolomtitelbalk de kolomscheiding te verslepen of erop te dubbel-
klikken. De rijhoogte passen we op soortgelijke wijze aan.
5.6.4 Kolommen verplaatsen
De onderlinge volgorde van de kolommen van een tabel kan wor-
den gewijzigd. Hiertoe markeren we eerst een of meer kolommen
door erover te slepen. Nadat we dit gedaan hebben, slepen we nog-
maals. Hiermee verplaatsen we de gemarkeerde kolommen. Bij het
afsluiten van de tabel zal Access vragen of de nieuwe lay-out be-
waard moet blijven of niet. In het eerste geval zal de nieuwe volg-
orde ook de volgende keer dat we werken, aangehouden worden.
5.6.5 Kolommen verbergen
Niet altijd willen we alle kolommen in beeld hebben. We kunnen
kolommen die we (tijdelijk) niet willen zien, verbergen. Selecteer
daartoe eerst de te verbergen kolommen en kies Opmaak, Kolom
verbergen. De geselecteerde kolommen worden niet langer ge-
toond. Bij het afsluiten van de tabel zal Access vragen of we deze
instelling willen opslaan. Kiezen we daarvoor, dan zal de kolom
(blijvend) verborgen blijven totdat we expliciet de opdracht geeft
de kolom weer te tonen.
We kunnen een kolom weer zichtbaar maken door in het menu te
kiezen voor Opmaak, Kolommen zichtbaar maken.
In het venster (guur 5.15) worden alle bestaande kolommen ge-
toond, waarbij door een vinkje wordt aangegeven welke kolommen
wel en welke niet zichtbaar zijn. Door een verborgen kolom af te
Figuur 5.15
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
88
vinken wordt deze weer zichtbaar. We kunnen dit venster overi-
gens ook gebruiken om kolommen te verbergen.
5.6.6 Kolommen vastzetten
Het is niet altijd mogelijk om alle kolommen tegelijkertijd op het
scherm te tonen. In zon geval kunnen we horizontaal schuiven
(scrollen) om de andere kolommen te zien. Hierbij worden andere
kolommen echter weer niet getoond. Om te weten met welk record
we aan het werk zijn, is het vaak makkelijk om een of meer kolom-
men vast in beeld te hebben. Hierdoor kunnen we bijvoorbeeld de
linkerkolom, waarin dan de naam van de klant getoond wordt, op
het scherm vast zetten. Deze blijft zichtbaar, hoever we ook naar
rechts gaan.
Als we een kolom willen vastzetten, markeren we de betreffende
kolom (of plaatsen de cursor in de betreffende kolom) en kiezen in
het menu voor Opmaak, Kolom blokkeren. De betreffende kolom
wordt aan de linkerkant van het scherm geplaatst en gevolgd door
een dikke lijn. Deze kolom zal vanaf nu in beeld blijven. We kun-
nen meerdere kolommen bevriezen door deze als n geheel te
markeren en vast te zetten of door de een na de ander te blokkeren.
We kunnen het vastzetten opheffen door in het menu te kiezen
voor Opmaak, Kolomblokkering opheffen. De geblokkeerde kolom
blijft overigens links staan, maar is niet langer altijd in beeld. Ook
kan de kolom nu weer worden versleept naar de originele positie.
Bij het opslaan van de tabel zal Access weer vragen of we de nieu-
we instellingen willen opslaan.
5.7 Afdrukken van gegevens
Het zal regelmatig voorkomen dat we gegevens uit een tabel op
papier willen afdrukken. We kunnen dat op twee manieren tot
stand brengen. Allereerst kunnen we de knop Afdrukken uit de
werkbalk gebruiken. Alle gegevens uit de tabel worden dan direct
naar de printer gestuurd. Eventueel laten we eerst met behulp van
de knop Afdrukvoorbeeld een voorbeeld van de afdruk op het
scherm tonen, om te controleren of alles er goed uitziet.
We kunnen ook afdrukken door te kiezen voor Bestand,
Afdrukken. Zie guur 5.16.
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
89
In het dialoogvenster Afdrukken kunnen we nog een aantal za-
ken instellen. We kunnen de te gebruiken printer selecteren, laten
afdrukken naar een bestand op schijf en opgeven welke records
moeten worden afgedrukt: alle records, alleen de op te geven pagi-
nas of alleen de geselecteerde records. Ten slotte is ook de print-
volgorde op te geven. Bij het afdrukken worden de instellingen die
zijn aangebracht met betrekking tot de volgorde van kolommen,
het verbergen van kolommen, de kolombreedte, enzovoort aan-
gehouden.
Opgave
5.4 a. Selecteer de database Reisbureau en open de tabel Klant.
b. Voeg een record toe en zet daar eigen gegevens in. Access kent
automatisch het klantnummer 23 toe.
c. Verberg de kolommen met de adressen en postcodes.
d. Zet de kolom met de plaatsnaam helemaal links en zet deze
kolom ook vast.
e. Zorg ervoor dat de onderlinge recordvolgorde gebaseerd is op
klantnaam.
f. Laat alle gegevens afdrukken op papier. Controleer eerst de
uitvoer via het printvoorbeeld.
g. Zorg ervoor dat er geen rasterlijnen meer getoond worden.
h. Maak alle kolommen precies passend, zet de rijhoogte op 20,
laat de gegevens tonen in het lettertype Times New Roman
puntgrootte 12.
i. Selecteer nu de records van de klanten uit Rotterdam en laat
alleen deze records afdrukken op papier.
j. Maak alle kolommen weer zichtbaar.
k. Sluit de tabel af zonder de wijzigingen op te slaan.
Figuur 5.16
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
90
5.8 Met meerdere tabellen tegelijkertijd werken
5.8.1 Verbanden leggen
Veelal zullen de tabellen die binnen n database zijn opgenomen
verband houden met elkaar, met andere woorden: er bestaan rela-
ties tussen de tabellen. Zo zullen we bij een klant op basis van het
klantnummer alle boekingen van de klant kunnen (en willen) zoe-
ken. Op basis van de reiscode kunnen we de reis erbij zoeken en
op basis van de bestemmingcode kunnen we de gegevens van de
bestemming erbij zoeken. De database Reisbureau bevat meerdere
tabellen tezamen met de onderlinge relaties.
De indeling van de tabellen:
KLANT BOEKING REIS BESTEMMING
Klantnummer Boekingnummer Reisnummer Bestemmingcode
Naam Klantnummer Bestemmingcode Plaats
Adres Reisnummer Vertrekdatum Land
Postcode Boekdatum Aantal dagen Werelddeel
Woonplaats Aantal volwassenen Prijs per persoon
Telefoonnummer Aantal kinderen
Betaald bedrag
De bestaande relaties staan weergegeven in het volgende ERD
(Entiteit Relatie Diagram):
Ook binnen Access kunnen we de relaties bekend maken.
Bovendien kunnen we opgeven dat we de bijbehorende referentile
integriteit (referential integrity) willen afdwingen. Access zal dan
automatisch hierop controleren. Daardoor wordt het onmogelijk
een boeking te registreren op een (nog) niet bestaande reis of naar
een bestemming die (nog) niet in de bestemmingtabel voorkomt.
Om relaties op te geven moeten we op de volgende manier te werk
gaan:
KLANT REIS BOEKING BESTEMMING
o.b.v. klantnummer o.b.v. reisnummer o.b.v. bestemmingcode
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
91
Open de database waarbinnen de relaties bekendgemaakt moeten
worden.
Klik op de knop Relaties in de werkbalk of kies Extra, Relaties.
Het relatievenster verschijnt, zie guur 5.17. Hierin staan alle bek-
ende relaties vermeld.
We zien de relatie die er bestaat tussen Bestemming en Reis, op
basis van de bestemmingcode. Dit is een n-op-veel relatie. Iedere
bestemmingcode kan in Bestemming hooguit n keer voorkomen
maar in Reis nul, n of meer keer. We kunnen de nog niet
gedenieerde relaties hier nu opgeven.
Plaats eerst de betreffende tabellen op het scherm. Klik hiervoor
op de knop Tabel weergeven of kies Relaties, Tabel toevoegen.
Selecteer in het venster dat verschijnt (guur 5.18) de ontbrekende
tabellen (Boeking en Klant) en voeg deze toe aan het relatiescherm
door op de knop Toevoegen te klikken.
Sluit het toevoegvenster weer af.
Figuur 5.17
Figuur 5.18
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
92
De nieuwe tabellen zijn nu opgenomen in het relatiescherm, maar
ze zijn nog niet verbonden.
Klik in de tabel waar het gemeenschappelijke veld de sleutel is
(de primaire tabel, dus Reis) op dit sleutelveld om alle relaties
bekend te maken en sleep het vervolgens naar de andere tabel (de
gerelateerde tabel, dus Boeking).
Access toont nu het scherm waarin de relatie nauwkeurig kan
worden ingesteld (guur 5.19). Hier wordt de relatie tussen Reis en
Boeking bekendgemaakt.
Zet een vinkje voor de optie Referentile integriteit afdwingen.
Access zal nu de referentile integriteit verzorgen. Dat betekent dat
we bijvoorbeeld geen reis kunnen boeken voor een klant van wie
het klantnummer niet in het klantenbestand voorkomt.
Als we de keuze Gerelateerde velden trapsgewijs bijwerken afvin-
ken, wordt het mogelijk om in de primaire tabel (de tabel waar het
veld de sleutel is) wijzigingen aan te brengen in de sleutelwaarde.
Deze wijzigingen worden dan automatisch doorgevoerd in het
gerelateerde veld. Bijvoorbeeld: een wijziging in het klantnummer
in de klantentabel wordt automatisch ook doorgevoerd bij de over-
eenkomstige boeking(en). Let op: vinken we deze mogelijkheid
niet af, dan kunnen we de sleutelwaarden in de primaire tabel niet
wijzigen als deze waarde ook nog in een van de gerelateerde tabel-
len voorkomt! We kunnen dus bijvoorbeeld in de klantentabel geen
klantnummer wijzigen van een klant waarvan nog een boeking
bestaat!
Geef met de keuze Gerelateerde records trapsgewijs verwijderen
op dat we records uit de primaire tabel willen kunnen verwijderen;
gerelateerde records worden hierbij automatisch uit de gerelateerde
tabellen verwijderd. Hierdoor wordt er bijvoorbeeld door het ver-
Figuur 5.19
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
93
wijderen van een bestemming automatisch voor gezorgd dat ook
alle bijbehorende reizen worden verwijderd. Let op: vinken we
deze mogelijkheid niet af, dan kunnen we geen record verwijderen
in de primaire tabel als er nog verwijzingen naar dit record
bestaan! We kunnen dus bijvoorbeeld in de klantentabel geen
klant verwijderen als er voor die klant nog een boeking bestaat!
Nadat alles goed is ingesteld, kunnen we met de knop Maken de
relatie laten opnemen. In het scherm Relaties kunnen we de teken-
ing overzichtelijker maken door de tabellen op het scherm zodanig
te verslepen dat er nette, rechte lijnen ontstaan (guur 5.20).
Het kan voorkomen dat we een relatie tussen twee tabellen willen
deniren waarbij de relatie is gebaseerd op een meervoudige sleu-
tel. In dat geval selecteren we alle betreffende velden in de tabel
waar deze tezamen de gehele sleutel vormen (de primaire tabel).
Daartoe houden we tijdens het selecteren de Control-toets inge-
drukt. Hierna verslepen we de geselecteerde sleutelvelden naar de
andere, gerelateerde, tabel en laten ze daar los. In het dan getoonde
scherm geven we voor ieder afzonderlijk sleutelveld aan met welk
veld het in de gerelateerde tabel moet worden verbonden. We kun-
nen ook weer aangeven of we de referentile integriteit wensen af
te dwingen. Met de knop Maken wordt de relatie daadwerkelijk
gelegd. Access toont hierna meerdere verbindingslijnen tussen
de beide tabellen. Dit is echter slechts n, meervoudige, relatie.
Figuur 5.20
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
94
Proberen we een van de verbindingslijnen te verwijderen, dan zal
Access alle betrokken lijnen verwijderen en daarmee de gehele
relatie.
We kunnen de gedenieerde relaties laten afdrukken door het
scherm waarmee we relaties deniren (zie guur 5.20) te acti-
veren en vervolgens in het menu te kiezen voor Bestand, Relaties
afdrukken. Het overzicht wordt niet direct afgedrukt, maar eerst in
een rapport geplaatst. Dit rapport kunnen we vervolgens afdrukken.
5.8.2 Relaties verwijderen
We kunnen bestaande relaties verwijderen door in het scherm
van guur 5.20 de lijn die de relatie weergeeft aan te klikken met
de rechtermuisknop. In het opgeroepen snelmenu kunnen we nu
kiezen voor Verwijderen. Sluit het onderdeel relaties af door het
betreffende scherm te sluiten.
Terzijde
De relatie kan ook verwijderd worden door aanklikken met de
linkermuisknop, gevolgd door het indrukken van de Delete-
toets.
5.8.3 Toepassing van relaties, referentile integriteit
Het begrip referentile integriteit is direct verbonden met de
relaties die er bestaan tussen de diverse tabellen. Als er tussen
de tabellen Bestemming en Reis een relatie ligt op basis van de
Bestemmingcode, is het niet toegestaan om een reis in te voeren
naar een bestemming die nog niet bestaat. We kunnen ook zeggen
dat het alleen mogelijk is om reizen in te voeren naar bestemmin-
gen die al bestaan, die dus eerder zijn ingevoerd.
In Access is het mogelijk om bij het invoeren van gegevens in een
tabel bij velden die verwijzen naar de sleutel in een andere (pri-
maire) tabel, bijvoorbeeld de bestemmingcode in Reis die verwijst
naar bestemmingcode in Bestemming, een keuzelijst te laten tonen
met daarin de gegevens die in de primaire tabel voorkomen. Alleen
uit deze gegevens kan dan gekozen worden. Bij het invoeren van
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
95
een reis kunnen we dan bij het veld Bestemmingcode een lijst laten
tonen met alle codes en bijbehorende gegevens zoals die in de pri-
maire tabel Bestemming zijn ingevoerd (zie guur 5.21). Hierdoor
wordt het voor de persoon die de gegevens moet invoeren makke-
lijker om de juiste codes op te zoeken en in te voeren.
We kunnen een dergelijke keuzelijst op vrij eenvoudige wijze ma-
ken nadat we alle relaties tussen de diverse tabellen hebben opge-
geven. Om ervoor te zorgen dat bij het invoeren van een reis alleen
gekozen kan worden uit bestaande bestemmingen, gaan we op de
volgende wijze te werk:
Open de betreffende tabel, in dit geval Reis.
De tabel moet worden getoond in de ontwerpweergave. Selecteer
deze door na het openen van de tabel te kiezen voor Beeld,
Ontwerpweergave.
Plaats de cursor in de regel van het veld Bestemmingcode (guur
5.22).
Selecteer onder in het scherm het tabblad Opzoeken.
Zet de muisaanwijzer in het veld Weergave besturingselement
Klik op en kies voor Keuzelijst met invoervak.
We willen gegevens laten opzoeken vanuit een andere tabel. Kies
voor Type rijbron dus Tabel/query.
Figuur 5.21
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
96
Plaats de cursor in het veld Rijbron.
We kunnen nu een opdracht (query) opstellen waarmee we de
gegevens kunnen laten opzoeken in de andere tabel(len). Klik
op de knop met de drie puntjes. We komen nu in het scherm
Opbouwfunctie voor querys, zie guur 5.23.
Figuur 5.22
Figuur 5.23
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
97
We moeten opgeven uit welke tabel(len) we gegevens nodig hebben.
Selecteer de tabel Bestemming vanwege de bestemmingcode,
plaatsnaam en het land.
Die drie gegevens willen we op het scherm tonen. Selecteer de
betreffende tabel met behulp van de knop Toevoegen. Access zal
de tabel in het ontwerpscherm opnemen (guur 5.24). Hebben
we meer dan n tabel geselecteerd, dan zullen ook de bestaande
relaties tussen de tabellen getoond worden.
Sluit het selecteren van de tabel af met de knop Sluiten.
In het onderste deel van het ontwerpscherm is te zien welke velden
we geselecteerd hebben: nu nog niets. We moet de te tonen velden
nog toevoegen door ze te selecteren.
Selecteer een veld door het in de betreffende tabel aan te klikken.
Sleep het naar het onderste deel en laat het in een kolom los.
Sleep op deze manier alle gewenste velden, Bestemmingcode,
Plaats en Land uit Bestemming, naar beneden, zie guur 5.25.
Figuur 5.24
Figuur 5.25
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
98
Klik bij het betreffende veld in de regel Sorteervolgorde om de
volgorde op te geven waarin de keuzelijst getoond moet worden.
Omdat men bij het toevoegen van reizen veelal zal zoeken op
plaats van bestemming, is het verstandig de lijst in volgorde van
plaatsnaam te leggen.
Sluit het venster af via Bestand, Sluiten. Access vraagt of de wij-
zigingen moeten worden bewaard. Beantwoord deze vraag bevesti-
gend. We keren automatisch terug in het tabelontwerpscherm.
Standaard wordt er van de zojuist ontworpen query slechts n
kolom getoond. We willen er echter drie zien. Daartoe moeten we
de details van de keuzelijst instellen. We kunnen de volgende
details omtrent het uiterlijk van de keuzelijst opgeven:
Afhankelijke kolom. Welke kolom uit de keuzelijst wensen we
over te nemen in het veld? In ons geval de eerste kolom (bestem-
mingcode), dus 1.
Aantal kolommen. Hoeveel kolommen moeten er in de keuzelijst
worden getoond? We hebben er drie geselecteerd (code, plaats en
land), dus 3.
Kolomkoppen. Moeten er boven de kolommen in de opzoeklijst
kopjes worden getoond of niet? We willen dit niet, dus nee.
Kolombreedten. Hoe breed moeten de afzonderlijke kolommen
worden getoond? De afzonderlijke waarden worden van elkaar
scheiden door middel van een puntkomma. Wij kiezen hier voor
3cm;4cm;4cm.
Aantal rijen. Hoeveel rijen, records, moeten er tegelijkertijd in
de opzoeklijst worden getoond? Standaard zijn dit er acht. Deze
waarde accepteren we.
Lijstbreedte. Wat moet de totale breedte van de opzoeklijst wor-
den? Wij willen alle kolommen goed getoond hebben, dus moet de
breedte op 3+4+4 ofwel 11cm worden gezet.
Alleen lijst. Mag de invoer alleen worden geaccepteerd als deze
ook in de lijst voorkomt? In ons geval is dat zo, anders zouden we
reizen boeken naar bestemmingen die we niet in ons assortiment
hebben, dus ja.
Vul deze gegevens in en sluit daarna het deniren af door het
scherm af te sluiten.
Sla de wijzigingen op.
Open opnieuw de tabel Reis. Bekijk het resultaat door de cursor in
het veld Bestemmingcode te plaatsen.
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
99
Wanneer we de tabel Reis hebben geopend in de gegevensblad-
weergave, zien we dat er voor iedere rij een plusteken is geplaatst.
Dit vindt zijn oorzaak in het feit dat er tussen de tabellen Reis en
Boeking een relatie is gedenieerd. Op basis van deze relatie wor-
den alle boekingen bij een bepaalde reis automatisch bijgezocht.
Deze boekingen worden getoond op het moment dat we op het
plusteken voor een bepaalde reis klikken. Zo zien we bijvoorbeeld
dat er bij reisnummer 10 twee boekingen worden gevonden. Dit
principe van automatisch opzoeken werkt alleen vanuit de tabel
waarin het gemeenschappelijke veld tevens de gehele sleutel is. Zo
geldt bijvoorbeeld dat er tussen Boeking en Klant een relatie ligt op
basis van het klantnummer. Het klantnummer is sleutel in de tabel
Klant. Dus bij de weergave van de inhoud van het klantenbestand
kunnen automatisch de boekingen van iedere klant worden bij-
gezocht. Andersom niet, maar dat heeft ook geen zin omdat er bij
iedere boeking toch altijd slechts n klant wordt gevonden.
Opgave
5.5 a. Open de database Reisbureau. Open het scherm waarin de rela-
ties worden opgegeven. Voeg de tabellen Boeking en Klant toe
aan het relatiescherm.
b. Leg de relatie tussen Reis en Boeking en de relatie tussen
Boeking en Klant.
c. Zorg ervoor dat de referentile integriteit wordt afgedwongen.
Het is niet nodig trapsgewijs wijzigen en trapsgewijs verwijde-
ren te activeren.
d. Probeer eens een boeking in te voeren voor een niet-bestaande
klant op een niet-bestaande reis. Neem hiervoor klantnummer
52 en reisnummer 47. Als dit niet lukt, beindig dan het invoe-
ren van de boeking door op de toets Esc te drukken.
e. Open de tabel Klant en probeer eens de klant met het nummer
15 (Brugman) te verwijderen uit de klantentabel. Verklaar zelf
waarom dit nu wel of niet lukt.
f. Open de tabel Reis en zorg ervoor dat bij het veld
Bestemmingcode een keuzelijst wordt getoond, zoals in de
vorige paragraaf is toegelicht.
g. Open de tabel Boeking en zorg ervoor dat bij het veld
Reisnummer een keuzelijst getoond wordt.
Laat in de keuzelijst relevante gegevens tonen, dus niet alleen
het reisnummer uit de tabel Reis, maar ook de vertrekdatum uit
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
100
Databaseontwikkeling 4 Access 2003
100
de tabel Reis en de plaatsnaam en het land van bestemming uit
de tabel Bestemming. Pas op! We kunnen in de keuzelijst het
veld Reisnummer opnemen vanuit twee tabellen, te weten van-
uit de tabel Reis of vanuit de tabel Boeking. We moeten er hier
uiteraard voor kiezen het reisnummer uit de tabel Reis te tonen.
Daar komen namelijk alle nummers, van alle verzorgde reizen
voor, ongeacht of er al een boeking voor bestaat of niet. Laten
we het Reisnummer selecteren uit de tabel Boeking, dan komen
we daar alleen nummers tegen van reizen waarvoor al een boe-
king bestaat!
h. Open de tabel Boeking nogmaals en zorg er nu voor dat bij het
veld Klantnummer een keuzelijst wordt getoond. Laat het klant-
nummer, de naam en de plaats van de klant in de lijst opnemen.
Zorg voor een zinvolle volgorde. Pas op! We moeten nu in het
scherm waarin we de lijst deniren, alleen de tabel Klant
opnemen. We kunnen dan beschikken over alle klantgegevens.
Nemen we echter (ten onrechte) ook de tabel Boeking op in het
scherm, dan zal Access direct zien dat er een relatie tussen deze
twee tabellen bestaat en nu alleen nog maar de klanten tonen
die zowel in de tabel Klant als in de tabel Boeking voorkomen.
Klanten die nog nooit geboekt hebben, kunnen we dan niet
selecteren omdat deze klanten niet in beide tabellen tegelijker-
tijd voorkomen (zie ook de opmerking aan het einde van de
volgende paragraaf)!
i. Eerder hebben we onszelf toegevoegd aan de klantentabel. Boek
nu zelf een reis naar Tanger (in Marokko).
5.9 Gegevens selecteren en manipuleren
5.9.1 Gegevens selecteren, selectiequery
Om gegevens te selecteren uit de database kunnen we gebruik-
maken van een query (een vraag opgemaakt in een speciale vraag-
taal). Het opstellen van een query is al bekend: we hebben een
query gebruikt bij het opstellen van een keuzelijst ten behoeve van
de invoer van gegevens. We kunnen met een query echter meer
dan tot nu toe aan bod gekomen is.
Open de database Reisbureau.
Selecteer het overzicht Querys.
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
101
In het scherm van guur 5.26 worden alle bestaande querys
getoond. Om een query te kunnen maken dienen we eerst een
informatiebehoefte oftewel een vraag naar informatie te heb-
ben. Stel we willen weten wie er een reis hebben geboekt naar
Azi. Van de betreffende personen willen we de naam, de woon-
plaats en het telefoonnummer weten, zodat we even contact kun-
nen opnemen.
Klik op de knop Nieuw om de bijbehorende query te maken.
We kunnen opgeven hoe we de query willen maken: hand-
matig met Ontwerpweergave of met behulp van een Wizard
Selectiequery; zie guur 5.27.
Kies Wizard Selectiequery. Dit is een hulpprogramma dat ons veel
werk uit handen neemt.
Klik op de knop OK.
Figuur 5.26
Figuur 5.27
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
102
De Wizard moet nu een aantal zaken weten (guur 5.28).
Allereerst zal worden gevraagd welke velden we nodig hebben om
in onze informatiebehoefte te voorzien.
Selecteer eerst een van de benodigde tabellen. Alle velden uit de
betreffende tabel worden links getoond. We kunnen in de linker-
helft van het scherm een veld selecteren en op de knop > klikken.
Het veld wordt opgenomen in de query. Het verschijnt nu in het
rechtergedeelte. Zijn alle getoonde velden nodig, klik dan op de
knop >>. We kiezen hierna de volgende tabel en voegen ook hier-
uit de benodigde velden toe aan de query.
Voor ons overzicht selecteren we achtereenvolgens uit de tabel
Klant de gegevens Naam, Woonplaats en Telefoonnummer. Uit de
tabel Bestemming kiezen we het gegeven Werelddeel.
Zijn alle velden die bij de query betrokken zijn geselecteerd, klik
dan op de knop Volgende.
Geef in het tweede scherm van de Wizard (guur 5.29) op of de
afzonderlijke gegevens getoond moeten worden of alleen een sa-
menvatting met totalen. Kies voor het tonen van de details en klik
op de knop Volgende. Hebben we gegevens uit slechts n tabel
gebruikt, dan zal dit scherm overigens achterwege blijven en kun-
nen we direct de naam van de query opgeven.
Geef de query een naam, zie guur 5.30. Deze naam gebruiken we
om later de query nogmaals te laten uitvoeren.
Figuur 5.28
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
103
We kunnen opgeven of we de query direct willen laten uitvoeren,
de query openen om gegevens weer te geven, of dat we het ont-
werp direct willen aanpassen, het queryontwerp wijzigen. In het
eerste geval wordt de query direct uitgevoerd. Alle geselecteerde
velden worden dan getoond voor alle records.
Kies voor het kunnen aanpassen van de query we willen name-
lijk nog een selectie kunnen laten uitvoeren (alleen Azi) en klik
op de knop Voltooien. We komen nu terecht in het ontwerpscherm
(guur 5.31).
Figuur 5.29
Figuur 5.30
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
104
We zien boven in het scherm de tabellen die nodig zijn voor de
query. De Wizard heeft deze tabellen zelf bepaald. Onderin staan
de velden die we eerder hebben opgegeven als de velden die bij de
query van belang zijn. De instellingen van deze velden kunnen we
nu nader speciceren.
Het veld Werelddeel hoeft niet te worden getoond in de uitvoer. Dit
is alleen benodigd als selectiecriterium. We willen immers alleen
gegevens van de klanten die een reis naar Azi hebben geboekt.
Verwijder om dit aan te geven bij het veld Werelddeel het vinkje in
de regel Weergeven.
Voer in de regel Criteria het criterium in, dus de tekst Azie bij het
veld Werelddeel.
Om de uitvoer zinvoller te maken willen we deze op volgorde van
plaatsnaam gepresenteerd te krijgen. Klik bij het veld plaats in de
regel Sorteervolgorde en kies de sorteervolgorde: Oplopend. Het
scherm ziet er nu ongeveer uit als guur 5.32.
Figuur 5.31
Figuur 5.32
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
105
Sla de query op door het venster te sluiten via Bestand, Sluiten. We
komen dan weer terecht in het overzicht Querys van het database-
scherm. De zojuist gemaakte query is hier nu in opgenomen.
Laat eventueel de query uitvoeren door de naam van de query te
selecteren en op de knop Openen te klikken of door op de naam te
dubbelklikken. De gewenste uitvoer wordt op het scherm getoond.
De voorgaande query was vrij eenvoudig, omdat er slechts n
voorwaarde bij betrokken was. We kunnen querys echter aanzien-
lijk ingewikkelder maken. Bijvoorbeeld een query waarin dezelfde
gegevens getoond worden als in de voorgaande query, maar nu
alleen voor de personen die naar Azi gaan, of die in West-Europa
blijven maar niet in Rotterdam wonen, of reizen waarvan de prijs
ligt tussen de 500, en 1250,.
We gaan dan op dezelfde wijze te werk als hiervoor beschreven is.
We selecteren echter meer velden dan zojuist omdat we nu ook de
velden Prijs per persoon en Vertrekdatum uit de tabel Reis nodig
hebben. Het queryscherm zal er nu uitzien als guur 5.33.
Nu moeten we nog opgeven welke velden we wel en niet wen-
sen te zien. We verwijderen daartoe alle vinkjes in de regel
Weergeven, met uitzondering van die bij Naam, Woonplaats en
Telefoonnummer. Ten slotte moeten we de voorwaarden opgeven.
We hebben te maken met drie (meervoudige) voorwaarden, te we-
ten:
bestemming is Azi, of
bestemming is West-Europa en de woonplaats is niet Rotterdam,
of
de prijs van de reis ligt tussen 500, en 1250,.
Figuur 5.33
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
106
We geven deze voorwaarden in drie, afzonderlijke, onder elkaar
gelegen Criteria-regels. Voorwaarden die we op dezelfde criteria-
regel opnemen, moeten tegelijkertijd waar zijn om te voldoen, de
zogenaamde EN-constructie. Voorwaarden die we onder elkaar, in
afzonderlijke regels opnemen, vormen een OF-constructie: als er
aan de (gecombineerde) voorwaarden op n regel wordt voldaan
is het goed. Het scherm ziet eruit als in guur 5.34.
Let op de regelindeling van de voorwaarden. Bij de voorwaarden
kunnen we gebruikmaken van:
Teken Betekenis Invoeren als
= gelijk aan (standaard) = 250
> groter dan > 250
< kleiner dan < 250
>= groter dan of gelijk aan >= 250
<= kleiner dan of gelijk aan <= 250
< > ongelijk <> 250
Between tussen, inclusief de grenzen Between 250 And 750
In komt voor in een verzameling In ( 30, 345, 715, 890 )
Is Null veld heeft geen waarde, niet ingevuld Is Null
Is Not Null veld is niet leeg Is Not Null
Like ziet eruit als Like Rot*
And allebei waar >250 And <500
Or een van beide of beide waar <250 Or >500
Not niet Not In (3,45,214)
Figuur 5.34
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
107
Deze bewerkingen werken op alle veldsoorten, dus op getallen en
teksten, maar ook op datums. Ook de eerdergenoemde jokers kun-
nen we gebruiken.
Bij datum en tijd kunnen we nog een aantal extra functies gebrui-
ken. Let er daarbij op dat het veld waarop de functie wordt uit-
gevoerd tussen rechte haken moet staan en dat het argument van
de functie zelf tussen ronde haken staat.
Functie Betekenis Invoeren als
Day selecteert de dagaanduiding Day ([Boekdatum]) = 27
uit een datum
Month selecteert de maandaanduiding Month([Boekdatum]) = 12
Year selecteert het jaartal Year([Boekdatum]) = 1999
Weekday selecteert de dag van de week, Weekday([Boekdatum])=7
zondag=1, maandag=2, ...
Hour selecteert de uuraanduiding Hour([Vertrektijd])=15
Datepart selecteert het weeknummer (ww) Datepart(q,[Boekdatum])=2
of het kwartaalnummer (q) Datepart(ww,[Boekdatum])=30
bij een datum
Terzijde
Wat de taal betreft: bij het opgeven van functies kunnen/moeten
we van de hiervoor genoemde, Engelstalige functies gebruik-
maken zodra we f een Engelstalige versie van Windows f een
Engelstalige versie van Access gebruiken. Alleen bij gebruik van
de Nederlandstalige versie van zowel Windows als Access
kunnen we de functies in het Nederlands opgeven, hoewel hier
in specieke gevallen weer uitzonderingen op bestaan.
Opmerkingen met betrekking tot querys:
We kunnen een query ook opstellen zonder gebruik te maken van
de wizard. Daartoe klik je in het databasescherm, in het overzicht
Querys op de knop Ontwerpen. Je moet nu als eerste de te gebrui-
ken tabellen toe voegen. Hierna sleep je de benodigde velden zelf
naar het onderste deel van het ontwerpscherm en voegt eventuele
voorwaarden toe. Op deze manier kunnen we ook een eerder ont-
worpen query achteraf aanpassen.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
108
Soms wordt een voorwaarde erg lang en hebben we eigenlijk te
weinig ruimte om het criterium goed in te voeren. Klik in dat
geval met de rechtermuisknop bij het betreffende veld in de crite-
riumregel. We kunnen dan inzoomen. Er verschijnt een venster
waarin we het criterium kunnen plaatsen. We kunnen dit venster
ook oproepen door op de betreffende knop in de menubalk te klik-
ken.
Hebben we niet alle benodigde velden geselecteerd, dan kun-
nen we later nog velden toevoegen door ze van het bovenste deel
(aanklikken in de betreffende tabel) te slepen naar het onderste
deel en ze daar neer te zetten.
Een veld dat we achteraf toch niet nodig hebben bij de query,
selecteren we door in het dunne balkje direct boven de veldnaam
te klikken (de hele kolom wordt nu gemarkeerd). Vervolgens ver-
wijderen we het door op de toets Delete te drukken of door in het
menu te kiezen voor Bewerken, Verwijderen.
Hebben we een veld nodig uit een tabel die niet in het bovenste
deel wordt getoond, voeg de tabel dan toe door in het menu te
kiezen voor Query, Tabel weergeven. Hierna kunnen we het betref-
fende veld selecteren en het door te slepen opnemen in de query.
Om een query direct vanuit het ontwerpscherm te laten uitvoeren
klikken we op de run-knop, de knop met het opschrift !. Om van-
uit het uitvoerscherm van de query weer direct terug te keren naar
het ontwerpscherm klikken we op de knop Beeld, links in de werk-
balk.
We kunnen de betekenis van de relaties tussen de tabellen aanpas-
sen. Standaard wordt een relatie alleen getoond als de waarde in
beide tabellen voorkomt. Een overzicht van alle klanten, met de
door hen geboekte reizen, zal alleen klanten tonen die daadwerke-
lijk een reis geboekt hebben. Klanten zonder boeking worden niet
getoond, omdat hun klantnummer niet in beide tabellen voorkomt.
Als we die klanten toch wensen te zien, klikken we met de rech-
termuisknop op de betreffende relatie tussen Klant en Boeking
(op de lijn) en kiezen voor Joineigenschappen. Vervolgens kun-
nen we de relatie speciceren: voorkomen in beide tabellen, of in
slechts n van beide. In het laatste geval moeten we nog opgeven
in welke van de twee tabellen de waarde alleen mag voorkomen
(guur 5.35). We kunnen de eigenschappen van de relatie op twee
plaatsen aanpassen: in het algemene relatiescherm (guur 5.20) en
tijdens het opbouwen van een query (guur 5.24). Wijzigen we de
relatie in het relatiescherm, dan geldt vanaf dat moment de nieuwe
instelling bij alle opvragingen en querys die we nog gaan maken.
Wijzigen we een relatie tijdens het opbouwen van een query, dan
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
109
geldt deze gewijzigde instelling alleen voor die betreffende query.
Buiten deze query blijft de algemeen ingestelde relatie gehand-
haafd.
Opgave
5.6 a. Open de database Reisbureau.
b. Verzorg een overzicht met alle gegevens van de bestemmingen
in Noord- of Zuid-Amerika.
c. Geef de nummers en de prijzen van de reizen waarvan de prijs
meer dan 1500, bedraagt.
d. Geef ook de plaats van bestemming van de reizen uit onderdeel
c, op volgorde van plaats.
e. Geef de namen en telefoonnummers van de klanten die op 23
of 24 maart 2005 een reis hebben geboekt. De datum mag niet
worden getoond.
f. Laat het voorgaande overzicht nogmaals tonen, maar nu alleen
voor de klanten van wie de reis langer dan 14 dagen duurt. Laat
ook de reisduur tonen.
g. Naar welke plaatsen in Azi vertrekken er in de periode van
5 t/m 12 mei 2005 reizen? Laat plaats en land zien, op volgorde
van land.
h. Welke klant heeft er geen boeking? Laat naam en woonplaats
weergeven. Aanwijzing: pas eventueel tijdens het opbouwen
van de query de relatie tussen klant en boeking zo aan dat klan-
ten zonder boeking ook worden getoond (via joineigenschap-
pen) en geef bij de query zelf als criterium dat er in het veld
boekingnummer niets mag zijn ingevuld. We vinden als het
goed is twee klanten, te weten Taks en Brigman.
Figuur 5.35
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
110
5.9.2 Gegevens opvragen, rekenkundige bewerkingen
We kunnen querys ook gebruiken om samengevatte gegevens op
te vragen, zoals het aantal klanten dat een reis naar Spanje heeft
geboekt of het gemiddelde reisbedrag van de boekingen gedaan
in de afgelopen maand. Daarbij kunnen we gebruikmaken van de
volgende functies:
Functie Berekent
Som het totaal van het veld
Gem de gemiddelde waarde van het veld
Min de kleinste waarde in het veld
Max de grootste waarde in het veld
Aantal het aantal keren dat er in het veld iets is ingevuld (niet leeg)
Eerste de waarde in het eerste record
Laatste de waarde in het laatste record
Een rekenkundige query stellen we als volgt op:
Open eerst het query-ontwerpscherm waarmee we een nieuwe
query kunnen opstellen.
Voeg op de bekende manier alle betrokken tabellen weer toe.
Plaats het veld waarop de rekenkundige bewerking moet worden
uitgevoerd, in ons geval Prijs per persoon. Druk hierna op de knop
Totalen in de werkbalk of kies in het menu de keuze Beeld en vink
de optie Totalen aan. Er wordt nu een regel toegevoegd aan het
query-ontwerpscherm, de regel Totaal. In de regel Totaal wordt de
tekst Group By weergegeven. Klik met de muiscursor eenmaal op
de tekst Group By en gebruik het driehoekje om het bijbehorende
menu uit te vouwen. Kies in het getoonde menu de gewenste func-
tie, in ons geval de functie Gem, zie guur 5.36.
Figuur 5.36
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
111
De uitvoer wordt nu ietwat slordig getoond, zie guur 5.37.
Eigenlijk willen we bij de uitvoer netjes het kopje Gemiddelde
bedrag zien. Dat kunnen we bereiken door in het ontwerpscherm
van de query in de regel Veld de tekst Prijs per persoon: te ver-
vangen door de door ons gewenste tekst Gemiddelde bedrag: Prijs
per persoon. Vergeet daarbij niet om ook weer de dubbele punt te
plaatsen, zie guur 5.38.
De uitvoer ziet er nu netter uit, zie guur 5.39.
We hebben in het voorgaande voorbeeld alle bestemmingen bij
het gemiddelde betrokken. Stel dat we het gemiddelde willen zien
van alleen de reizen naar Spanje. Dan moeten we ook de tabel
Bestemming bij de query betrekken en het veld Land in de query
opnemen. Bij dit veld plaatsen we dan de betreffende voorwaarde.
Dit doen we door in de regel Totaal te kiezen voor de functie
Waar (van Waarvoor geldt dat) en door in de regel Criteria de
betreffende waarde te plaatsen waarop moet worden geselecteerd,
in ons geval de tekst Spanje. We zien dat het vinkje in de regel
Weergeven automatisch wordt verwijderd. Er zijn immers meer-
dere reizen naar Spanje. Dit betekent dat de query dus meerdere
keren iets wenst te tonen. Er is echter maar n gemiddelde prijs
Figuur 5.37
Figuur 5.38
Figuur 5.39
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
112
voor deze reizen. Aan de ene kant moet iets dus vaker worden ge-
toond, het land, en aan de andere kant moet iets slechts n keer
worden getoond. Dat kan niet. Access lost dit op door het land niet
te laten opnemen in de query, zie guur 5.40.
Opgave
5.7 Zorg ervoor dat alle uitvoer netjes wordt getoond.
a. Wat is de gemiddelde duur van alle door het reisbureau aan-
geboden reizen? We vinden als het goed is 16,29.
b. Hoeveel klanten heeft het reisbureau? We vinden als het goed is
22.
c. Hoeveel reizen zijn er geboekt naar Frankrijk? We vinden er
drie.
d. Wat is het totale aantal kinderen dat via het reisbureau op reis
gaat of is gegaan? We vinden er als het goed is 19.
e. Wat is het hoogste bedrag dat inmiddels betaald is voor een reis
door een klant die langer dan 14 dagen op reis gaat? We vinden
als het goed is 2250.
5.9.3 Gegevens opvragen, geavanceerde selectiequery
De querys zoals we die tot nu toe hebben gemaakt, zijn vaste
querys. Ze geven altijd antwoord op dezelfde vragen, bijvoorbeeld
welke klanten een reis naar Azi hebben geboekt. Om een soort-
gelijk overzicht te krijgen van de klanten die een reis naar Noord-
Amerika hebben geboekt, moeten we een nieuwe query aanmaken,
met een iets andere voorwaarde. Op deze manier ontstaan er echter
erg veel querys die eigenlijk in niets van elkaar verschillen, alleen
een kleine wijziging in een criterium.
Figuur 5.40
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
113
Het is mogelijk om querys exibeler te maken en bij het uitvoeren
van de query te laten vragen om de waarde van het selectiecrite-
rium. Voordat de query wordt uitgevoerd, wordt dan eerst het
gewenste werelddeel gevraagd, waarna op basis van het gegeven
antwoord de uitvoer wordt gegenereerd.
Om een exibele query te maken moeten we bij de betreffende
voorwaarde (het criterium) een vraag opgeven. Tijdens het uitvoe-
ren van de query zal de vraag vervangen worden door een door de
gebruiker ingetoetste waarde. De vraag dient tussen rechte haken
te worden geplaatst. In guur 5.41 staat aangegeven hoe we het
criterium moeten invullen om ervoor te zorgen dat Access eerst
zal vragen om het gewenste werelddeel en pas daarna de query
uitvoert.
Na uitvoering van de query verschijnt eerst het scherm uit guur
5.42, waarin om het gewenste werelddeel wordt gevraagd.
Het is ook mogelijk om in een query een rekenveld op te nemen.
Een rekenveld is een veld dat niet daadwerkelijk bestaat, een
virtueel veld. Het is dus geen onderdeel van een van de tabellen,
maar een (tijdelijk) veld dat we een naam kunnen geven en kunnen
Figuur 5.41
Figuur 5.42
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
114
voorzien van een inhoud. Omdat we de inhoud meestal krijgen via
het laten uitvoeren van een berekening, heet een dergelijk veld een
rekenveld.
Stel dat we bij het reisbureau de regel hanteren dat een reis binnen
30 dagen na de boekdatum moet zijn betaald. We willen deze uiter-
ste betaaldatum opnemen in de query. Dit doen we als volgt:
Open het query-ontwerpscherm; maak dus een nieuwe query of
wijzig een bestaande query.
Zet in een lege kolom, op de regel Veld de naam van het nieuwe
veld, bijvoorbeeld Uiterste datum:. Let erop dat we ook de dubbele
punt moeten opnemen.
Plaats achter deze dubbele punt de berekening zelf.
Behandel het veld verder alsof het een normaal, bestaand veld is;
we kunnen dus sorteren, voorwaarden opgeven, enzovoort.
Denk eraan dat bij het gebruik van veldnamen in de berekening,
de veldnaam tussen rechte haken moet worden geplaatst, dus:
[Boekdatum] + 30.
Komt de betreffende veldnaam in meer dan n tabel voor, geef
dan ook op uit welke tabel het veld afkomstig is, bijvoorbeeld
[Boeking].[Boekdatum] + 30. Dus de naam van het veld vooraf
laten gaan door de naam van de tabel (tussen rechte haken), gevol-
gd door een punt. In guur 5.43 is het voorbeeld te zien, let op de
vierde kolom van de query.
In het zojuist besproken voorbeeld geldt voor iedere reis dat er uiter-
lijk binnen dertig dagen na de boekdatum moet zijn betaald. Stel
Figuur 5.43
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
115
dat we dit alleen willen hanteren bij reizen waarvan de prijs min-
der dan 1000, bedraagt. Voor alle andere reizen willen we een
periode van 45 dagen hanteren. Dan geldt dat de uiterste datum
afhankelijk is van de prijs. We kunnen deze afhankelijkheid in de
voorwaarde brengen door gebruik te maken van de functie IIF.
Deze functie zijn we misschien eerder als IF (als) tegengekomen
bij Excel. De functie luidt:
IIF ( [Prijs per persoon] < 1000 ; [boekdatum] + 30;
[boekdatum]+45 )
De functie kent drie argumenten. Het eerste argument bevat de
voorwaarde: is de inhoud van het veld Prijs per persoon minder
dan 1000? Het tweede argument bevat de uitkomst van de functie
indien aan de voorwaarde is voldaan. In het voorbeeld wordt dan
dus de inhoud van het veld boekdatum verhoogd met 30. Het derde
argument bevat de uitkomst van de functie indien niet aan de voor-
waarde wordt voldaan. Er geldt dan dus een periode van 45 dagen.
Let erop dat alle veldnamen tussen rechte haken staan vermeld en
dat de argumenten van de functie van elkaar worden gescheiden
door een puntkomma. Het kan zijn dat bij de gebruikte versie van
Access een ander scheidingsteken, bijvoorbeeld de komma,
gebruikt moet worden. Dat is mede afhankelijk van de instellingen
van Windows.
De volledige inhoud van het rekenveld wordt nu:
Uiterste datum : IIF ( [Prijs per persoon] < 1000 ; [boekdatum] +
30 ; [boekdatum] + 45 ).
In het algemeen geldt dat wanneer we werken met querys de kans
bestaat dat er in de uitvoer dubbele rijen voorkomen. Een query die
de namen en adressen oplevert van alle klanten die ooit een reis
naar Spanje hebben geboekt, zal ongetwijfeld klanten tonen die
meer dan eens aan een dergelijke reis hebben deelgenomen. Willen
we elke klant toch maar n keer zien, dan kunnen we daarvoor
zorgen. Daartoe klikken we in het scherm waarin de querys wor-
den opgebouwd (zie guur 5.38) op de rechtermuisknop en kiezen
vervolgens in het getoonde menu voor Eigenschappen. We kunnen
nu een aantal eigenschappen opgeven, zie guur 5.44.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
116
Drie van de getoonde eigenschappen zijn heel goed bruikbaar. Dit
betreft als eerste de instelling Top-waarden. Hiermee kunnen we
ervoor zorgen dat van een grote hoeveelheid uitvoerrijen bijvoor-
beeld slechts de eerste 25 rijen of de eerste 5% van de rijen worden
getoond. De twee andere zeer bruikbare instellingen zijn die van
Unieke waarden en Unieke records. Nu wordt dubbele uitvoer op
het scherm achterwege gelaten. Kiezen we voor unieke waarden,
dan wordt er alleen gekeken of de getoonde velden (tezamen) uniek
zijn. Kiezen we voor unieke records, dan wordt naar alle velden
van de betrokken records (rijen) gekeken, ook als deze velden
niet op het scherm worden getoond. Daardoor kan het lijken of er
wel degelijk sprake is van dubbele waarden in de uitvoer. Op het
scherm is dat dan ook zo, maar zouden we alle velden van de
betrokken records laten tonen, dan blijken ze wel degelijk uniek
te zijn. Voor unieke uitvoer op het scherm kiezen we dus voor
unieke waarden.
5.9.4 Gegevens groeperen, group-by-query
Tot nu zijn querys aan bod geweest waar gegevens per record
werden gepresenteerd. Soms hebben we echter de behoefte om
per groep records iets te bepalen; bijvoorbeeld per woonplaats het
aantal klanten, of per reis het aantal boekingen, of per land van
bestemming de hoogste reisprijs. We groeperen daarbij een aantal
gegevens en bepalen van de groep de som, het aantal, het maxi-
mum, enzovoort. Per groepje gegevens laten we dit vervolgens op
het scherm tonen. Een dergelijke query maken we als volgt:
Figuur 5.44
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
117
Zorg dat het query-ontwerpscherm actief is.
Plaats de cursor in het onderste deel van het queryscherm, in het
veld op basis waarvan gegroepeerd moet worden.
Klik op de sommatieknop . Er verschijnt dan een nieuwe regel,
de regel Totaal. In deze regel kunnen we per veld opgeven welke
rekenfunctie we willen gebruiken.
In guur 5.45 is gebruikgemaakt van de tabellen Bestemming en
Reis. Per land van bestemming is hier de maximumprijs, de gemid-
delde prijs en het aantal reizen bepaald. De gegevens worden alleen
getoond als de gemiddelde prijs hoger is dan 1000,. Daartoe is
eerst het veld Land geplaatst. Vervolgens is op de sommatieknop
geklikt om te laten groeperen, waarna twee maal het veld Prijs
per persoon is ingevoegd. In de regel Totaal is daar vervolgens de
functie Max en de functie Gem aan toegevoegd. Daardoor worden
per land van bestemming de hoogste prijs en de gemiddelde prijs
(een maal) getoond. Ten slotte is het veld Reisnummer toegevoegd,
voorzien van de functie Aantal. Daardoor wordt per land van be-
stemming het aantal reizen (reisnummer) bepaald en afgedrukt.
Overigens, om een query direct vanuit het ontwerpscherm te
laten uitvoeren klikken we op de run-knop, de knop met het
opschrift !. Om vanuit het uitvoerscherm van de query weer
direct terug te keren naar het ontwerpscherm klikken we op de
knop Beeld, links in de werkbalk.
We kunnen bij het groeperen onder andere de volgende functies
gebruiken:
Figuur 5.45
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
118
Functie Berekent (per groep)
Som het totaal van het veld
Gem de gemiddelde waarde van het veld
Min de kleinste waarde in het veld
Max de grootste waarde in het veld
Aantal het aantal keren dat er in het veld iets is ingevuld
(niet leeg)
Eerste de waarde in het eerste record
Laatste de waarde in het laatste record
Als we gegevens groeperen (Group By) en een criterium gebrui-
ken, dan geldt dit criterium voor de groep. Dat wil zeggen dat er
eerst wordt gegroepeerd en dat er pas op het moment van afdruk-
ken wordt gekeken naar het opgegeven criterium. Alleen groepen
die voldoen aan het criterium worden opgenomen in het overzicht.
In de query die in guur 5.46 is afgebeeld wordt per land van
bestemming het aantal georganiseerde reizen getoond, als de
gemiddelde prijs van die reizen hoger is dan 2000. Hierbij wordt
dus niet gekeken naar de afzonderlijke reizen, maar alleen naar de
reizen als groep.
Wat nu als we per afzonderlijke reis ook nog een beperking willen
opleggen? Bijvoorbeeld dat we alleen naar de reizen willen kijken
die precies drie weken duren? In dat geval plaatsen we een extra
kolom, met daarin opgenomen het veld waarop de beperking van
toepassing moet zijn. In de regel Totaal (Total) selecteren we de
optie Waar (Where). Ten slotte plaatsen we het criterium 21. We
krijgen dan de query zoals deze in guur 5.47 staat weergegeven.
Figuur 5.46
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
119
Allereerst worden nu de reizen geselecteerd die voldoen aan de
voorwaarde dat deze 21 dagen duren. Vervolgens worden deze rei-
zen per land van bestemming gegroepeerd en worden de gegevens
per groepje weergegeven. Tenminste als voor de groep als geheel
geldt dat de gemiddelde prijs hoger is dan 2000! Let erop dat de
kolom waar de optie Waar (Where) gebruikt wordt, nooit getoond
wordt in het overzicht. Het gaat hier namelijk niet om een groeps-
gegeven, maar om een gegeven van de individuele records! Access
verwijdert daarom automatisch het vinkje in de weergaveregel.
5.9.5 Gegevens wijzigen, bijwerkquery
Een bijwerkquery gebruiken we om op eenvoudige wijze de
waarde in een veld aan te passen; bijvoorbeeld: door een staking
van de vluchtleiders moeten alle reizen die in de eerste week van
mei vertrekken met een week worden uitgesteld. We handelen als
volgt:
Zorg dat het query-ontwerpscherm actief is.
Selecteer in het menu Query of klik op de knop Querytype en
selecteer in de lijst Query bijwerken. In het queryscherm wordt nu
een extra regel opgenomen, de regel Wijzigen in.
Geef hier bij de desbetreffende te wijzigen velden een nieuwe
waarde op. Verhoog in het geval van de uitgestelde reis dus
bij de Vertrekdatum de datum met zeven dagen; de formule
[Vertrekdatum]+7.
Dit alleen moet gebeuren bij de reizen in de eerste week van mei.
Voeg er de voorwaarde Between #1-5-2005# And #7-5-2005# aan
toe, zie guur 5.48. Door de query te laten uitvoeren worden de
wijzigingen aangebracht.
Figuur 5.47
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
120
5.9.6 Gegevens verwijderen, verwijderquery
We kunnen ook een query gebruiken om records te verwijderen.
We gaan op dezelfde wijze te werk als hiervoor beschreven. Nu
kiezen we echter met behulp van de knop Querytype het type
Verwijderquery. De regel Verwijderen wordt toegevoegd. Onder
deze regel kunnen we weer de voorwaarden opnemen. Alle records
die voldoen aan de voorwaarde(n) zullen tijdens de uitvoering
worden verwijderd. In het voorbeeld van guur 5.49 zullen alle
reizen worden verwijderd die korter dan zeven dagen duren.
Bij de verwijderquery kunnen we slechts records uit n tabel
tegelijkertijd verwijderen. Als er bij het verwijderen meer dan n
tabel betrokken is, moeten we in de regel Veld alle velden uit de
betreffende tabel (de tabel waaruit moet worden verwijderd) selec-
teren, door daar de naam van de tabel op te geven gevolgd door de
toevoeging .*, dus bijvoorbeeld: Bestemming.*. Als we bij de relatie
tussen de betrokken tabellen de mogelijkheid trapsgewijs verwij-
deren hebben geactiveerd, zullen indien nodig ook gerelateerde
records uit de andere bestanden worden verwijderd, zie ook para-
graaf 5.8.1. Tevens moeten we dan in het tabblad Eigenschappen,
zie guur 5.44, de eigenschap Unieke records op Ja instellen.
Bij het verwijderen van records uit een tabel is het belangrijk
dat we de relaties naar de tabel juist hebben gedenieerd omdat
het ons anders niet zal lukken records te verwijderen! Het is van
belang om van iedere relatie waarbij de tabel als primaire tabel
optreedt, dat wil zeggen dat in de tabel het veld waarop de relatie
is gebaseerd de sleutel is, de eigenschap Gerelateerde records trap-
Figuur 5.48
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
121
gewijs verwijderen aan te vinken. Je kunt dit achteraf doen door in
het scherm Relaties de bestaande relatie te verwijderen en vervol-
gens opnieuw te deniren. Tijdens het deniren kun je het trap-
gewijs verwijderen opgeven. Wordt er nu een record uit de primai-
re tabel verwijderd, dan zullen ook alle overeenstemmende records
(op basis van de gedenieerde relatie) uit de gerelateerde tabel(len)
worden verwijderd. Door nu een klant te verwijderen worden
automatisch ook alle boekingen van die klant verwijderd! Bedenk
dat door het verwijderen van n record uit de betreffende tabel,
er vele honderden records uit gerelateerde tabellen kunnen worden
verwijderd. Je bent niet verplicht de gerelateerde tabellen speciek
bij de query te betrekken. Access betrekt ze er op de achtergrond
zelf wel bij. Dit heeft als gevolg dat de verwijderquery zoals die
staat afgebeeld in guur 5.49 niet alleen de betreffende records
uit de tabel Reis verwijdert maar ook de boekingen die voor deze
reizen gemaakt zijn. Dit komt omdat het verband tussen Boeking
en Reis is gebaseerd op het gegeven Reisnummer, en Reisnummer
is in Reis de sleutel. Zouden de bijbehorende boekingen niet auto-
matisch worden verwijderd, dan zouden er boekingen ontstaan die
verwijzen naar een niet meer bestaande reis! En dat willen we niet.
Want waar ging die klant dan naar toe? En hoeveel moest hij ei-
genlijk betalen? En wanneer moeten we de klant gepakt en gezakt
voor de balie verwachten (vertrekdatum)?
Vinken we het trapsgewijs verwijderen niet aan, dan kun je een
record uit de primaire tabel niet verwijderen zolang er in de
gerelateerde tabel overeenstemmende records bestaan! Dit om te
voorkomen dat er in de gerelateerde tabel records overblijven die
verwijzen naar een niet langer bestaande sleutelwaarde.
Figuur 5.49
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
122
5.9.7 Overige querys
Naast de hiervoor besproken querys (opvraag, group by, bijwerk
en verwijder) kunnen we ook querys deniren om een nieuwe
tabel aan te maken of een bestaande tabel uit te breiden. Hiertoe
ontwerpen we eerst een normale opvraagquery. Gewoonlijk wordt
hiervan de uitvoer op het scherm getoond. We kunnen echter de
uitvoer ook gebruiken om een nieuwe tabel aan te maken. Alle
uitvoer wordt dan in de nieuwe tabel opgenomen. De velden van de
nieuwe tabel worden bepaald door de velden zoals die in de uitvoer
voorkomen. Na het testen van de normale query selecteren we in
het query-ontwerpscherm met behulp van de knop Querytype het
type Tabelmaakquery. Vervolgens laten we de query nogmaals
uitvoeren.
Op soortgelijke wijze kunnen we de uitvoer van een normale query
laten toevoegen aan een reeds bestaande tabel. Daartoe selecteren
we, nadat de query is getest, het type Toevoegquery. Ook nu laten
we hierna de query nogmaals uitvoeren. In beide gevallen zal
Access de naam van de tabel vragen die moet worden aangemaakt
of moet worden uitgebreid.
In guur 5.27 kun je zien dat er nog twee andere soorten querys
bestaan die soms goed kunnen worden toegepast. De eerste query
zoekt naar wat Access noemt dubbele records. Daarbij kunnen we
in een tabel laten zoeken naar records waar in de door ons
opgegeven velden waarden meer dan n keer voorkomen. Records
die daaraan voldoen worden opgenomen in de uitvoer. Het andere
type biedt de mogelijkheid om te zoeken naar Niet gerelateerde
records. Daarbij laten we Access zoeken naar records in een tabel
waarvoor geen bijbehorende records in een andere tabel worden
aangetroffen. We kunnen zelf opgeven op basis van welk gemeen-
schappelijk veld de vergelijking tussen de beide tabellen moet
worden gemaakt. Hiermee kun je snel een overzicht maken van de
klanten zonder boeking, of van bestemmingen zonder reizen, of
Opgave
5.8 a. Verzorg een overzicht met alle gegevens van de klanten uit een
door de gebruiker in te toetsen woonplaats.
b. Bepaal per land van bestemming het aantal reizen naar dat
land. Toon per land het gevonden aantal.
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
123
5 Eenvoudige bewerkingen in Access
123
c. Bepaal per reis het totale bedrag dat inmiddels al betaald is.
Toon de reisnummers en de gevonden bedragen.
d. Bepaal per reis het aantal boekingen, toon de plaats van
bestemming en de gevonden aantallen, in volgorde van
oplopende aantallen.
e. Bepaal per land het aantal reizen naar dat land. Alleen landen
waar meer dan twee reizen naartoe gaan, mogen worden
getoond, op volgorde van dalend aantal reizen. (Er zijn vijf
landen.)
f. Men wil reizigers die binnen twee weken na het boeken van
hun reis het verschuldigde bedrag voldoen, een korting van 5%
geven. Laat een overzicht afdrukken met daarin per reis de vol-
gende gegevens: plaatsnaam, land, vertrekdatum, standaardprijs
en prijs inclusief 5% korting.
Aanwijzing: gebruik voor de prijs inclusief korting een reken-
veld.
g. Ten gevolge van politieke spanningen wordt besloten dat op
reizen een extra brandstoftoeslag wordt geheven. Buiten West-
Europa bedraagt de toeslag 35, per reis per persoon, binnen
West-Europa geldt een opslag van 25,. Verzorg een over-
zicht met daarin het reisnummer, de plaats van bestemming, het
werelddeel en de te heffen toeslag. Aanwijzing: denieer de
toeslag als rekenveld en maak gebruik van de functie IIF.
h. Verhoog alle prijzen. De prijs moet worden verhoogd met 3%,
mits de huidige prijs ligt tussen 1000, en 1500,. Ligt de
prijs buiten dit bereik (dus onder de 1000, of boven de
1500,) verhoog dan de prijs met 4
1
/2 %. Aanwijzing: gebruik
hier de functie IIF. (Maak eerst een kopie van de database via
Bestand, Backup maken van de database. Er wordt bij achttien
reizen een prijswijziging doorgevoerd.)
i. Maak een kopie van de database en voer de volgende acties in
deze kopie uit! Bepaal het totale aantal boekingen. Bepaal ook
het totale aantal boekingen dat door klanten uit Rotterdam is
gemaakt. Maak een query waarbij alle Rotterdamse klanten
worden verwijderd. (Controleer eventueel eerst nog even of bij
de relatie tussen Boeking en Klant de optie trapgewijs verwij-
deren is aangevinkt.) Gebruik de query om alle Rotterdamse
klanten daadwerkelijk te verwijderen. Controleer of inderdaad
alle Rotterdammers zijn verwijderd. Bepaal nu nogmaals het
aantal boekingen en controleer of dit aantal klopt.
Zet ten slotte de gemaakte kopie van je database weer terug.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
124
5.10 Rapporten
Tot nu toe zijn alle overzichten op het scherm getoond. We hebben
ons daarbij voornamelijk beperkt tot de uitvoer van querys. Het
is mogelijk om de uitvoer op papier te verkrijgen. Daarbij kunnen
de gegevens op vele manieren worden gepresenteerd. We kunnen
lange lijsten laten genereren, maar ook gedetailleerde overzichten,
waarbij de gegevens gegroepeerd worden getoond, voorzien van
allerlei extra informatie. We maken daarbij gebruik van rapporten.
Er zijn drie manieren om een rapport te ontwerpen. We kunnen
gebruikmaken van een standaardrapport ofwel AutoRapport (snel-
rapport): dit is een zeer eenvoudige standaard lay-out voor een rap-
port. Daarnaast kunnen we gebruikmaken van de Wizard Rapport.
We worden dan aan de hand meegenomen tijdens het ontwerpen.
We kunnen de rapporten grotendeels naar eigen inzicht opmaken.
Ten slotte is het ook mogelijk rapporten handmatig te ontwerpen.
Daarbij moeten we alle handelingen zelf uitvoeren, maar in dat
geval kunnen we alles tot op detailniveau instellen. We kunnen het
handmatig ontwerpen ook gebruiken om een via een Wizard gege-
nereerd rapport later met de hand te vervolmaken. Het zelf aanpas-
sen en ontwerpen van rapporten komt in een later hoofdstuk ter
sprake, in deze paragraaf beperken we ons tot het ontwerpen met
behulp van wizards.
5.10.1 Rapport ontwerpen via AutoRapport
Een rapport aanmaken via AutoRapport gaat als volgt:
Open de bijbehorende database.
Selecteer in het databasescherm het overzicht Rapporten. Alle
bestaande rapporten worden getoond, zie guur 5.50.
Klik op de knop Nieuw om een nieuw rapport te ontwerpen. Geef
aan op welke wijze het rapport moet worden ingedeeld, zie guur
5.51.
Kies voor Autorapport: in kolomvorm of AutoRapport: in tabel-
vorm. In het eerste geval worden de gegevens (per record) onder
elkaar getoond, in het tweede geval worden de gegevens als tabel
getoond, dus de gegevens van n record naast elkaar.
Geef aan op welke tabel of op welke query het rapport moet wor-
den gebaseerd.
Klik op de knop OK; het rapport wordt gegenereerd en op het
scherm getoond.
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
125
Klik om het rapport af te drukken in de werkbalk op de knop
Afdrukken of kies Bestand, Afdrukken. Bekijk zonodig eerst het
printvoorbeeld, klik op de knop Afdrukvoorbeeld. Zo kunnen we
bijvoorbeeld de grootte instellen, evenals het aantal paginas dat
tegelijkertijd moet worden getoond. Figuur 5.52 bevat een voor-
beeld van een rapport in kolomvorm, gebaseerd op de tabel Reis.
Sluit af door in de werkbalk op de knop Sluiten te klikken of door
op de knop X te klikken in het scherm waarin het printvoorbeeld
wordt getoond. (Klikken we op de knop Sluiten om af te sluiten,
dan komen we terecht in het rapportontwerpscherm. Hier kunnen
we het rapport verder bewerken; we komen hier later op terug.
Sluit dit scherm af door op de knop X te klikken.)
Figuur 5.50
Figuur 5.51
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
126
Voordat we het genereren van het rapport volledig afsluiten, zal
Access nog vragen of we het rapport willen opslaan en onder wel-
ke naam. De naam die we hier opgeven, wordt later getoond op het
tabblad met alle bestaande rapporten.
5.10.2 Rapport ontwerpen via de Wizard
Willen we een rapport met meer vrijheid dan het standaardrapport,
dan gebruiken we de Wizard Rapport:
Activeer in het databasescherm het overzicht Rapporten en klik op
de knop Nieuw.
Kies voor de mogelijkheid Wizard Rapport.
Geef in dit venster een tabel of query op waarop het rapport geba-
seerd dient te worden; dit hoeft trouwens niet meteen.
Klik op de knop OK. We komen in het scherm terecht waarin we
opgeven welke tabellen en met name welke velden er in het rapport
moeten worden opgenomen, zie guur 5.54. We kunnen meerdere
tabellen of querys na elkaar selecteren en hiervan velden op laten
nemen in het rapport door ze naar het deel Geselecteerde velden te
verplaatsen.
Figuur 5.51
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
127
In guur 5.54 zijn achtereenvolgens velden uit de tabellen
Bestemming, Reis, Boeking en Klant geselecteerd. Klik nadat alle
velden zijn geselecteerd op de knop Volgende .
Geef in het scherm dat verschijnt op (zie guur 5.55) of de gege-
vens gegroepeerd moeten worden en als dat zo is, op basis van
welk veld dat dan moet gebeuren. Access zal zelf, op basis van de
gebruikte tabellen en de volgorde bij het selecteren van de velden,
een voorstel doen voor het groeperen. Pas dit eventueel aan door
een van de getoonde tabellen te selecteren. De bijbehorende inde-
ling verschijnt in het rechterdeel.
Klik nadat de juiste indeling is opgegeven op de knop Volgende.
Denieer in het nu getoonde scherm (zie guur 5.56) eventueel
nog extra groepeerniveaus door n van de velden waarop kan
worden gegroepeerd over te zetten naar het rechterdeel van het
scherm.
Figuur 5.53
Figuur 5.54
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
128
De plaats waar de groep moet worden ondergebracht, kan met de
Prioriteit-knoppen worden benvloed. Met de knop Opties voor
groeperen hebben we inspraak en kunnen we er bijvoorbeeld voor
zorgen dat gegevens in groepjes van tien stuks worden getoond.
Sluit dit scherm af met de knop Volgende.
Geef in het scherm dat nu verschijnt (zie guur 5.57) op hoe de
getoonde gegevens moeten worden gesorteerd. We kunnen de
detailgegevens op basis van maximaal vier velden tegelijkertijd
laten sorteren, dus bijvoorbeeld op naam en bij gelijke naam op
boekdatum.
Klik na het maken van een keuze op Volgende. Het volgende
scherm (zie guur 5.58) geeft gelegenheid de lay-out voor het rap-
port op te geven. We hebben de keuze uit zes verschillende moge-
lijkheden.
Figuur 5.55
Figuur 5.56
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
129
Van de gekozen lay-out wordt het voorbeeld getoond. Geef hier
ook op of het rapport Staand of Liggend moet worden afgedrukt.
Kies de optie Veldbreedte aanpassen... eventueel om aan te geven
dat Access de breedte van de velden mag aanpassen, zodat alle
velden getoond kunnen worden. Sluit met de knop Volgende ook
dit scherm weer af.
We komen nu terecht in het voorlaatste scherm van de Wizard, zie
guur 5.59. Geef hierin de stijl van het rapport op door een keuze
te maken uit de zes verschillende stijlen. Van iedere stijl wordt een
voorbeeld getoond. Sluit weer af met de knop Volgende.
Figuur 5.57
Figuur 5.58
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
130
Geef in het laatste scherm van de Wizard, guur 5.60, het rapport
een naam. De lay-out en alle andere instellingen van het rapport
worden onder de opgegeven naam bewaard voor later gebruik.
Geef desgewenst op of er een afdrukvoorbeeld moet komen of dat
het zojuist ontworpen rapport direct handmatig gewijzigd moet
worden. Meestal zullen we kiezen voor het afdrukvoorbeeld.
Sluit de Wizard af met de knop Voltooien. De Wizard zal het rap-
port genereren en het vervolgens tonen in het zojuist gekozen
scherm (afdrukvoorbeeld of ontwerpscherm).

Figuur 5.59
Figuur 5.60
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
131
In hoofdstuk 7 wordt uitgebreid ingegaan op het ontwerpen en ver-
jnen van rapporten.
5.10.3 Etiket ontwerpen
Een etiket is feitelijk niets anders dan een speciaal opgemaakt rap-
port, afgedrukt op een afwijkend papierformaat. Een etiket ontwer-
pen gaat als volgt:
Start in het databasescherm overzicht Rapporten via de knop
Nieuw de Wizard Adresetiketten.
Geef daarbij direct op op welke tabel of query het etiket moet zijn
gebaseerd, zie guur 5.61.
De Wizard zal als eerste vragen welk type etiketten gebruikt moet
worden (zie guur 5.62). De meest voorkomende formaten zijn
voorgeprogrammeerd. Maak een keuze. Op de doos van de etiket-
ten staat de soortaanduiding ook vermeld, bijvoorbeeld Avery
J8159. De fabrikant (Avery) maken we bekend door op de naam
van de fabrikant te laten lteren. Hierna kunnen we het juiste pro-
ductnummer (J8159) selecteren. Let erop dat ook de maateenheid
(inches, Engels of cm, metrisch) opgegeven kan worden. Geef ook
op of er gebruikgemaakt moet worden van losse etiketvellen (la-
serprinter, sheetfeeder) of van kettingformulieren (matrixprinter).
Denieer eventueel een nieuw, afwijkend formaat met behulp van
de knop Aanpassen.
Klik op de knop Volgende om door te gaan. Geef in het scherm
(guur 5.63) de tekenopmaak op, dus het lettertype, de puntgroot-
te, zwarting, tekengewicht en tekenkleur. Geef eventueel ook op of
de gegevens cursief en/of onderstreept afgedrukt moet worden.
Figuur 5.61
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
132
Klik op de knop Volgende. Geef op welke gegevens op het etiket
opgenomen moeten worden, zie guur 5.64. Selecteer een regel
in het rechterdeel van het scherm, het Modeletiket. Typ eventueel
eerst wat begeleidende tekst en selecteer vervolgens in het linker-
gedeelte van het scherm een van de beschikbare velden. Neem met
de knop > het gegeven vervolgens ook op in het modeletiket. Op
deze wijze bouwen we het etiket op.
Klik op de knop Volgende; we komen in het voorlaatste scherm
van de Wizard. Geef op wat de gewenste sorteervolgorde is (guur
5.65). We kunnen op meer dan n veld laten sorteren. Plaats de
velden op de bekende wijze over naar het gedeelte Sorteren op.
Geven we meer dan n veld op, dan wordt eerst gesorteerd op de
Figuur 5.62
Figuur 5.63
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
133
waarden van het eerste veld. Bij gelijke waarden in dit veld worden
deze onderling verder gesorteerd op het veld dat we als tweede
hebben opgegeven.

Klik op de knop Volgende, zie guur 5.66. We kunnen het etiket-
ontwerp een naam geven en bepalen of we de gegevens willen zien
in een printvoorbeeld of dat we het ontwerp direct willen verjnen
door het in het ontwerpscherm op te roepen. Dit laatste scherm
wordt in een later hoofdstuk besproken.
Figuur 5.64
Figuur 5.65
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
134
5.10.4 Een rapport of etiket afdrukken
Een rapport of etiket afdrukken:
Selecteer in het databasescherm het tabblad Rapporten.
Kies het betreffende rapport of etiket en activeer het met behulp
van de knop Voorbeeld. Het rapport of etiket wordt als afdruk-
voorbeeld op het scherm getoond.
Laat het hier vervolgens afdrukken via Bestand, Afdrukken.
Omdat in een rapport niet alleen is opgegeven hoe de opbouw van
het rapport is, maar ook op welke tabel(len) of op welke query
het is gebaseerd, ligt de uitvoer in principe vast; bijvoorbeeld
een overzicht van alle reizen binnen Europa, of etiketten voor de
klanten die over twee weken vertrekken. Willen we de toepassings-
mogelijkheden van rapporten vergroten, dan is het verstandig deze
te baseren op exibele querys. Doordat de gebruiker hier zelf
(exibel) kan opgeven welke selectiecriteria gelden, kan het rap-
port aan waarde winnen. Met n rapport kan dan zowel een over-
zicht worden verkregen van de reizen binnen als buiten Europa, of
etiketten voor de klanten die met een nader te bepalen reis mee-
gaan. We komen hier later op terug.
Figuur 5.66
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
135
5 Eenvoudige bewerkingen in Access
135
Opgave
5.9 a. Ontwerp een eenvoudig rapport (AutoRapport) met daarin in
tabelvorm de gegevens van alle bestemmingen.
b. Ontwerp met behulp van de Wizard het voorgaande rapport
nogmaals. Laat nu echter de gegevens per land groeperen. Het
overzicht moet (per land) liggen op volgorde van plaats.
c. Ontwerp met behulp van de Wizard een rapport waarin per
plaats van bestemming wordt getoond: de plaats van bestem-
ming, het land en per geplande reis naar deze bestemming de
datum van vertrek en de namen en woonplaatsen van de klan-
ten die voor de betreffende reis hebben geboekt. De klanten die
op dezelfde reis hebben geboekt moeten op volgorde van naam
worden getoond. Zie het voorbeeld in guur 5.67.
d. Bij onderdeel a. van opdracht 5.8 hebben we een query opge-
steld voor het afdrukken van de gegevens van de klanten uit een
nader op te geven woonplaats. Gebruik deze query om etiketten
te verzorgen. Kies een standaardformaat en laat de gebruike-
lijke gegevens op het etiket tonen.
5.11 Formulieren
Bij het toevoegen van gegevens aan een tabel hebben we tot nu toe
gebruikgemaakt van de standaardtabelweergave, waarbij we onder
aan de tabel rijen kunnen toevoegen. We kunnen echter voor het
invoeren of wijzigen van gegevens ook gebruikmaken van formu-
lieren. Bij het werken met een formulier bepalen we zelf hoe de
lay-out van de gegevens op het scherm moet zijn. Bovendien heb-
ben we nu de mogelijkheid om steeds slechts n record tegelijker-
tijd op het scherm te laten tonen. We kunnen bij het ontwerpen van
formulieren weer hulp krijgen van Access.
5.11.1 Formulier ontwerpen via AutoFormulier
Een AutoFormulier (snelformulier) gebruiken we om gegevens
van n tabel of n query tegelijkertijd te benaderen, te tonen, te
wijzigen of in te voeren. De records worden daarbij afzonderlijk
van elkaar op het scherm getoond, de een na de ander. Om een
AutoFormulier te ontwerpen gaan we op de volgende manier te
werk.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
136
Open de betreffende database.
Selecteer in het databasescherm het overzicht Formulieren en klik
op de knop Nieuw.
Geef in het venster dat verschijnt (guur 5.68) op hoe het autofor-
mulier moet worden opgezet: in kolomvorm, tabelvorm of in de
vorm van een gegevensblad.
Kiezen we voor een formulier in kolomvorm, dan krijgen we een
formulier waarbij de afzonderlijke gegevens van n record in
kolomvorm (onder elkaar) staan weergegeven. In de tabelvorm
worden de gegevens van n record naast elkaar afgebeeld. Er
worden meerdere records tegelijkertijd getoond. Dit lijkt sterk op
de standaardwijze van invoeren, met dat verschil dat het scherm
Figuur 5.67
Figuur 5.68
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
137
alleen is voorzien van een achtergrondstructuur. Kiezen we voor
de gegevensbladvorm, dan krijgen we het standaardscherm zoals
we dat tot nu toe steeds hebben gebruikt. De laatste twee vormen
zullen we waarschijnlijk niet gauw kiezen. De eerste manier, in
kolomvorm, wel.
Geef behalve de gewenste presentatiewijze (kolom, tabel of gege-
vensblad) ook op welke tabel of (uitvoer van de) query benaderd
moet worden.
Klik op de knop OK. Het formulier wordt ontworpen en we kun-
nen het gebruiken om door de tabel te grasduinen of om nieuwe
gegevens toe te voegen.
Sluit het formulier af door het formuliervenster te sluiten. Access
zal vragen onder welke naam het formulier moet worden bewaard.
Deze naam kunnen we later gebruiken om het formulier weer te
activeren.
5.11.2 Formulier ontwerpen via de Wizard
We kunnen een formulier laten ontwerpen met behulp van de
Wizard. Daarbij krijgen we iets meer mogelijkheden dan die gebo-
den zijn bij het gebruik van een AutoFormulier. Om een formulier
te maken met behulp van de Wizard gaan we op dezelfde wijze
te werk als in de vorige paragraaf. Nu kiezen we echter voor de
Wizard Formulier.
We hoeven hier vooralsnog niet op te geven welke tabel of query
we willen benaderen. Klik dus op OK.
Geef in het scherm dat verschijnt (zie guur 5.69) op welke tabel-
len en welke velden op het formulier geplaatst moeten worden. Zet
de betreffende velden van het gedeelte Beschikbare velden naar het
gedeelte Geselecteerde velden.
We kunnen gegevens uit meer dan n tabel selecteren. In deze
paragraaf wordt alleen toegelicht hoe we werken met n tabel of
query tegelijkertijd. In een van de volgende hoofdstukken wordt
het werken met meerdere tabellen tegelijkertijd toegelicht. We wer-
ken dan met hoofd- en subformulieren.
Klik als op de gebruikelijke wijze alle relevante velden zijn
geselecteerd op de knop Volgende. Geef hier op op welke wijze de
gegevens gepresenteerd moeten worden (zie guur. 5.70).
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
138
Hierbij geldt weer dat we waarschijnlijk alleen de kolomvorm
of uitvulvorm zullen gebruiken. De laatste vorm is gelijk aan de
kolomvorm, alleen worden de gegevens nu ook gedeeltelijk naast
elkaar geplaatst, zodat de volle breedte van het scherm gebruikt
wordt. Maak een keuze en klik op Volgende.
Geef in het scherm dat verschijnt (guur 5.71) op op welke achter-
grond het formulier geplaatst moet worden. We hebben de keuze
uit tien mogelijkheden. Na het maken van de keuze klikken we
weer op Volgende.
Figuur 5.69
Figuur 5.70
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
139
Geef het formulier een naam (zie guur 5.72) en geef op of het
geopend moet worden om te gebruiken of dat het formulier direct
gewijzigd moet worden om alle details naar eigen wens in te stel-
len. Op het laatste komen we later uitgebreid terug. Klik ten slotte
op de knop Voltooien.
In hoofdstuk 6 wordt uitgebreid ingegaan op het ontwerpen en ver-
jnen van formulieren.
Figuur 5.71
Figuur 5.72
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
140
5.11.3 Een formulier gebruiken
Een formulier dat we eerder hebben ontworpen, kunnen we acti-
veren door in het databasescherm het tabblad Formulieren te
activeren. Vervolgens selecteren we het betreffende formulier en
klikken op de knop Openen om het te activeren. We kunnen met
het formulier gegevens toevoegen, verwijderen en wijzigen. Onder
in het scherm staan weer de bekende knoppen waarmee we door
de gegevens kunnen bladeren. Na aoop sluiten we het formulier-
scherm door op de knop X te klikken.
Opgave
5.10 a. Gebruik de mogelijkheid AutoFormulier om een formulier te
ontwerpen waarmee we gegevens kunnen toevoegen aan de
tabel Bestemming. Gebruik de tabelvorm en noem het formulier
Bestemming.
b. Gebruik de Wizard Formulier om formulieren te maken voor
het invoeren van reizen. Doe dit ook voor het invoeren van
boekingen en voor het invoeren van klanten. Kies hier de tabel-
vorm voor het invoeren van reizen en boekingen en kies voor
het invoeren van klanten voor de vorm Uitgevuld. Sla de formu-
lieren op onder respectievelijk de naam Reis, Boeking en Klant.
5.12 Webpaginas
Access biedt de mogelijkheid om Data Access-paginas te ontwer-
pen en te koppelen aan bestaande databases. Met een Data Access-
pagina kan informatie die ligt opgeslagen in een database (Access
of MS SQL) worden opgevraagd of worden gemuteerd via een
webbrowser, dus via het internet of via een intranet. Als gebruikers
de Data Access-pagina willen bekijken en ermee willen werken,
moeten ze beschikken over Microsoft Internet Explorer 5 (of ho-
ger) en een gebruiksrecht voor Microsoft Ofce 2000 (of hoger).
Een Data Access-pagina kan gebruikt worden voor het doorvoe-
ren van mutaties (toevoegen, wijzigen, verwijderen) als er op de
betreffende pagina slechts gegevens gebruikt worden die uit n
enkele tabel afkomstig zijn. Als de gegevens vanuit meerdere, met
elkaar gerelateerde tabellen, afkomstig zijn, kan de pagina
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
141
alleen maar gebruikt worden om bestaande gegevens te raad-
plegen. De gegevens worden daarbij over het algemeen gegroe-
peerd aangeboden, bijvoorbeeld per reis alle namen van de deel-
nemers of per deelnemer alle geboekte reizen. Helaas blijkt het niet
mogelijk te zijn om dergelijke raadpleegpaginas met behulp van
een wizard direct in een bruikbare lay-out te ontwerpen. Een met
een wizard ontworpen raadpleegpagina dient handmatig te worden
aangepast. In een van de volgende hoofdstukken wordt daar verder
op ingegaan. Hier zullen wij ons beperken tot het ontwerpen van
paginas die gebaseerd zijn op slechts n enkele tabel. Daarmee
kunnen we bijvoorbeeld klanten toevoegen of reizen raadplegen.
We kunnen dus niet per reis de gegevens van alle deelnemers
opvragen.
Om een pagina aan te maken of te bewerken, selecteren we in het
databasescherm het overzicht Paginas. Hier gebruiken we de knop
Nieuw en vervolgens kiezen we voor Autopagina: in kolomvorm.
Tevens geven we aan op welke tabel de pagina betrekking moet
hebben. Hierna wordt de betreffende pagina gegenereerd en op het
scherm getoond. We kunnen door de records van de betreffende
tabel grasduinen zoals we dat ook bij een formulier gewend zijn.
Als we de pagina afsluiten, vraagt Access of we het ontwerp wil-
len opslaan. Kiezen we ervoor om het ontwerp op te slaan, dan
vraagt Access allereerst de naam waaronder dat moet gebeuren.
De standaard extensie wordt htm; het betreft hier immers een
pagina die via een webbrowser kan worden benaderd. Tevens
vraagt Access de locatie waar het ontwerp moet worden opgesla-
gen. De pagina is namelijk geen onderdeel van de database, maar
wordt afzonderlijk opgeslagen. Hierdoor kan de betreffende pagina
vrijelijk en afzonderlijk worden gedistribueerd over alle mogelijke
gebruikers, zonder dat deze ook echt over de database dienen te
beschikken. In het ontwerp van de pagina is onder andere vast-
gelegd met welke database deze pagina verbinding moet maken
en waar de betreffende database ligt opgeslagen. Dit heeft dus
het voordeel dat we kunnen volstaan met het verspreiden van de
pagina, bijvoorbeeld via internet. Het heeft echter ook een nadeel.
Omdat de naam van de te gebruiken database is vastgelegd in
de pagina, kunnen we de plaats waar de database ligt opgesla-
gen naderhand niet zonder meer wijzigen. Als de database fysiek
verplaatst wordt, van de ene folder naar de andere, of van de ene
computer (server) naar de andere, zal ook in de pagina deze wijzi-
ging moeten worden doorgevoerd. Het is daarom verstandig om de
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
142
pagina niet echt te verspreiden over de potentile gebruikers,
maar om deze via het (inter)net aan te bieden. Mochten we nood-
gedwongen de database moeten verplaatsen, omdat we bijvoor-
beeld van provider veranderen, dan hoeven we deze wijziging
slechts nmaal door te voeren in de door ons via internet aan-
geboden pagina.
De wijziging kunnen we op twee manieren aanbrengen. De eerste
manier is dat we de pagina opnieuw ontwerpen en daarbij direct de
nieuwe locatie van de database opgeven. De tweede manier bestaat
eruit dat we de internetversie van onze pagina (extensie htm) in
de browser laden en vervolgens de broncode aanpassen, via Beeld,
Bron. Hier zoeken we de eigenschap Connectionstring. Bij deze
eigenschap geven we vervolgens de nieuwe locatie van de Data
Source op. Hierna slaan we de webpagina weer op.
Opgave
5.11 Ontwerp Data Access-paginas voor alle vier de tabellen uit de
database Reisbureau. Sluit hierna Access af en probeer de zojuist
ontworpen paginas uit in de webbrowser. Let er daarbij op dat we
tijdens het invoeren van nieuwe records in een veld van het type
Autonummering geen gegevens kunnen plaatsen. Deze gegevens
worden door de op de achtergrond automatisch geopende database
zelf toegevoegd. We kunnen dit controleren door even te gras-
duinen door de nieuw ingevoerde records.
Tip: Door het werken met de database blijkt de ruimte die het
bestand op schijf in beslag neemt almaar toe te nemen. Access
neemt het niet zo nauw met het weer vrijgeven van ruimte die niet
meer nodig is, met als gevolg dat de database veel ongebruikte
ruimte in beslag neemt. We kunnen de omvang van de database
aanzienlijk terugbrengen (soms tot wel 20%) door de database
eerst te openen en daarna in het menu te kiezen voor Extra,
Databasehulpprogrammas, Database comprimeren en herstellen.
De data binnen de database wordt nu geoptimaliseerd en
aaneengesloten weggeschreven waardoor de omvang op schijf
sterk afneemt. Het verdient aanbeveling deze activiteit met enige
regelmaat te laten uitvoeren.
Copyright 2007 Academic Service
5 Eenvoudige bewerkingen in Access
143
5 Eenvoudige bewerkingen in Access
143
Herhalingsopdrachten
5.12 Creren database en bestand
a. Ontwerp de database Telefoon. Neem hierin de tabel Telefoon
op met daarin de velden: telefoonnummer, naam, adres, post-
code en plaats. Zorg ervoor dat het telefoonnummer sleutelveld
wordt. Neem voor naam, adres en plaats een lengte van
25 tekens; voor de postcode 7 tekens. Het telefoonnummer
moet 10 cijfers kunnen bevatten.
b. Voer een aantal personen in.
c. Sluit de database weer af.
5.13 Manipuleren/tonen gegevens
a. Selecteer de database Reisbureau. Activeer de tabel Klant.
b. Gebruik een lter om alleen de klanten uit Rotterdam te laten
zien.
c. Hef het lter op.
d. Geef een overzicht van de klanten, gesorteerd op postcode.
e. Geef het overzicht nogmaals, nu echter alleen de namen en tele-
foonnummers.
f. Geef het overzicht ook op papier.
5.13 Meerdere tabellen
a. Selecteer de database Reisbureau.
b. Verwijder de relatie tussen Reis en Bestemming.
c. Leg de relatie weer aan. Zorg ervoor dat referentile integriteit
wordt afgedwongen. Zorg ervoor dat ook stapsgewijs wijzigen
en stapsgewijs verwijderen wordt geactiveerd.
d. Controleer of de reizen 4 en 28 naar Corsica gaan.
e. Wijzig in de tabel Bestemming de code CORSI in CRSCA.
f. Controleer wat de gevolgen van de wijziging is bij de reizen uit
onderdeel d.
g. Maak de wijziging van onderdeel e. weer ongedaan.
h. Zorg ervoor dat de relatie tussen Reis en Bestemming weer zon-
der stapsgewijs wijzigen en verwijderen wordt.
5.14 Querys
a. Selecteer de database Reisbureau.
b. Geef de namen van de personen die geboekt hebben voor een
bestemming in Frankrijk.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
144
Databaseontwikkeling 4 Access 2003
144
c. Wat is de gemiddelde duur van de reizen?
d. Welke bestemmingen zijn bezocht door Rotterdammers? Laat
ook de naam van de klant en de vertrekdatum afdrukken, in
volgorde van datum.
e. Wijzig de voorgaande query zodanig dat de woonplaats
gevraagd wordt voordat de gegevens van de in die plaats
wonende klanten worden getoond.
f. Ten gevolge van een gemeentelijke herindeling wordt
Abbenbroek toegevoegd aan de gemeente Spijkenisse; dit dorp
houdt dus op te bestaan. Maak een query waardoor deze wijzi-
ging ook in het klantenbestand wordt aangebracht.
g. Wat is de totale omzet geweest van de boekingen uit de eerste
week van april 2005?
5.16 Rapport / etiket / formulier
a. Selecteer de database Reisbureau.
b. Ontwerp een autorapport met de gegevens van de klanten
c. Ontwerp een rapport (gebruik een Wizard) om een overzicht te
krijgen met daarin per klant de gemaakte reizen. Laat naast de
NAW-gegevens de vertrekdatum en de plaats van bestemming
afdrukken.
d. Laat voor alle klanten die ooit een reis naar Frankrijk geboekt
hebben een etiket afdrukken. Maak daartoe eerst de query die
een tabel oplevert met de gegevens van de betreffende klanten
en ontwerp hierbij vervolgens een etiket.
e. Maak een rapport met daarin per plaats van bestemming het
totale aantal personen dat met een reis naar die plaats is mee-
gegaan.
f. Ontwerp een formulier om gegevens toe te voegen aan de tabel
Klant uit de database Reisbureau.
5.17 Rapport
a. Selecteer de database Reisbureau.
b. Ontwerp een rapport om per bestemming een overzicht te krij-
gen van alle reizen. Laat alle relevante gegevens tonen.
c. Ontwerp een rapport om per klant een overzicht te krijgen van
alle gemaakt boekingen. Toon alle relevante gegevens.
Copyright 2007 Academic Service
6 Uitgebreide
formulieren
Bij de bovenstaande opsomming gaan wij ervan uit dat de leer-
lingen een case uitwerken waarbij de docent/begeleider de rol van
opdrachtgever/gebruiker speelt.
In dit hoofdstuk gaan we de mogelijkheden van een formulier
verder toelichten. Zo wordt het plaatsen van keuzerondjes, selectie-
vakjes en groepsvakken besproken. De keuzelijsten worden verder
toegelicht. Ook het opnemen van afbeeldingen in het formulier
wordt behandeld. Ten slotte worden subformulieren, tabbladen,
opdrachtknoppen en draaitabellen besproken.
6.1 Keuzemogelijkheden
In veel databases komt het gegevenstype Ja/nee een logisch veld
genoemd veelvuldig voor. Denk aan zaken als: gehuwd?, in bezit
van rijbewijs?, zwembad aanwezig?, bevorderd?, bezit mobiele
telefoon? Wanneer met de Wizard een formulier is ontworpen,
zal het logische veld automatisch een selectievakje zijn. Dat is een
vakje waarin we met de muis kunnen klikken om het vakje al of
niet af te vinken.
Naast het selectievakje kunnen we voor zon veld ook een keuze-
rondje of wisselknop gebruiken. Om het een en ander toe te lichten
gaan we in de tabel Boeking een logisch veld toevoegen. Het moet
mogelijk worden om bij een boeking op te geven of men een annu-
leringsverzekering wenst:
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
146
Open om de wijziging in de structuur van de tabel aan te bren-
gen de tabel. Selecteer in de database Reisbureau het overzicht
Tabellen.
Open de tabel Boeking in de ontwerpweergave. De structuur van
de tabel wordt getoond.
Maak een nieuw veld aan onder Betaald bedrag en noem dit Annu-
leringsverzekering. Het gegevenstype dient Ja/nee te worden.
Sla op de bekende manier het nieuwe ontwerp op en sluit de tabel.
We gaan met de Wizard een nieuw formulier voor de tabel Boeking
ontwerpen:
Selecteer in het overzicht Formulieren de optie Formulier maken
met wizard.
Kies de tabel Boeking.
Selecteer alle velden. Het formulier dient In kolomvorm getoond te
worden.
Kies het opmaakproel Standaard en wijzig de titel (naam) van het
formulier in Boeking voorbeeld. Het formulier wordt nu getoond,
zie guur 6.1.
We zien dat bij het besturingselement Annuleringsverzekering
een selectievakje staat. We zien ook dat de lay-out niet optimaal
is: de tekst Annuleringsverzekering is niet helemaal leesbaar. We
kunnen dit eenvoudig aanpassen door in de ontwerpweergave het
selectievakje te verplaatsen en het tekstvakje te vergroten. Merk
op dat records die al waren ingevoerd geen vinkje bevatten, want
het veld Annuleringsverzekering bestond toen nog niet. De records
kunnen nu wel afgevinkt worden. Voor nieuwe records wordt wel
standaard een waarde ingevoerd. Als detail kunnen we nog melden
Figuur 6.1
Copyright 2007 Academic Service
6 Uitgebreide formulieren
147
dat Access in het veld Annuleringsverzekering niet de waarde Ja of
Nee wegschrijft in de tabel, maar voor Ja het getal 1 en voor Nee
het getal 0. Op het scherm toont Access dit echter als Ja en Nee.
We kunnen het selectievakje ook vervangen door een keuzerondje
of wisselknop. In dit geval kiezen we een keuzerondje:
Open het formulier in de ontwerpweergave.
Selecteer het selectievakje (niet de tekst).
Kies in de menubalk Opmaak, Wijzigen in, Keuzerondje. Het kan
zijn dat in eerste instantie de keuze Wijzigen in niet zichtbaar is in
de menu-opties. Klik in dat geval op de twee pijltjes onderaan de
menu-opties.
Het selectievakje is nu gewijzigd in een keuzerondje, zie guur 6.2.
Op soortgelijke wijze kunnen we het selectievakje vervangen door
een wisselknop.
Naast de informatie of de klant bij een boeking een annulerings-
verzekering wenst, zullen we nog een aanpassing maken. Men wil
informatie over de betaalwijze. Er zijn drie manieren van betalen,
te weten: contant bij boeking, elektronisch pinnen of na ontvangst
van een acceptgiro. We gaan gebruikmaken van een groepsvak. In
een groepsvak kan een selectie gemaakt worden uit een aantal
mogelijkheden. In ons voorbeeld: Contant, Pinnen, Acceptgiro.
Om deze wijziging door te voeren moeten we eerst de structuur
van de tabel Boeking aanpassen.
Figuur 6.2
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
148
Sed gaat van start. Er wordt gevraagd om de namen (labelnamen)
van onze opties; zie guur 6.3.
Kies als eerste label Contant. Druk op de Tab-toets en voer vervol-
gens Pinnen en Acceptgiro in.
Ga naar het volgende scherm via de knop Volgende.
Het scherm dat verschijnt (zie guur 6.4), biedt de mogelijkheid
om voor nieuwe records een standaardoptie te activeren. De optie
die het meest voorkomt, kan dan automatisch voor gezet worden.
Wij willen dat. Selecteer Acceptgiro als standaardoptie en klik op
de klecteer het overzicht Tabellen en open de tabel Boeking in de
ontwerpweergave.
Voeg het veld Betaalwijze toe. Het gegevenstype moet numeriek
zijn.
Selecteer bij Veldlengte, Byte. Bij die veldlengte kunnen de getal-
len 0-255 worden opgeslagen; ruim voldoende voor onze getallen.
Figuur 6.3
Figuur 6.4
Copyright 2007 Academic Service
6 Uitgebreide formulieren
149
Standaard krijgt de eerste optie de waarde 1. De tweede optie
krijgt de waarde 2, enzovoort. Extra informatie over veldlengte
kun je vinden in bijlage A.
Sla de nieuwe structuur op.
Selecteer vervolgens in het overzicht Formulieren het zojuist
gemaakte formulier, Boeking voorbeeld, in de ontwerpweergave.
Onder het veld Annuleringsverzekering gaan we het nieuwe
veld toevoegen. Als daar geen ruimte voor is, sleep dan de
Formuliervoettekst iets naar beneden of vergroot de rechterkant
iets.
Open indien nodig de werkset met de knop Werkset op de werk-
balk.
Activeer eventueel in de werkset de knop Wizards voor besturings-
elementen. Hierdoor krijgen we hulp bij het maken van een groeps-
vak.
Klik in de werkset op de knop Groepsvak, verplaats de muis naar
het formulier en markeer het gebied waar het groepsvak moet
komen.
De Wizarnop Volgende.
De optie die we kiezen, krijgt een numerieke waarde toegekend,
die aan het veld Betaalwijze in onze tabel Boeking wordt opgesla-
gen. De waarden zijn, zoals reeds eerder opgemerkt, standaard op
1, 2 en 3 gezet, zie guur 6.5. Eventueel kunnen we die waarden
veranderen. We doen dat niet. Kies voor de standaardwaarden en
klik op de knop Volgende.
In het scherm dat verschijnt (guur 6.6) wordt gevraagd of we de
geselecteerde waarde willen gebruiken voor later gebruik of wil-
len opslaan in de database. Wij willen het geselecteerde opslaan
Figuur 6.5
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
150
in het veld Betaalwijze uit de tabel Boeking. Klik op het keuze-
rondje Opslaan in dit veld en selecteer uit de keuzelijst het veld
Betaalwijze. Klik weer op de knop Volgende.
In het volgende scherm van de Wizard hebben we de keuze uit ver-
schillende opmaakmogelijkheden van het groepsvak; zie guur 6.7.
We kunnen kiezen uit Selectievakjes, Keuzerondjes of Wissel-
knoppen. Nadat we een keuze hebben gemaakt, wordt direct een
voorbeeld getoond. Verder kunnen we opgeven hoe het kader
getoond moet worden. We hebben de keuze uit Omkaderd,
Normaal, Verhoogd, Scha-duw en Verlaagd. Na een keuze wordt
ook hier direct een voorbeeld getoond. Kies voor Selectievakjes en
Omkaderd. Klik nadat het voorbeeld is goedgekeurd op de knop
Volgende.
In het laatste scherm van de Wizard gaan we weer door de nish-
vlag. Hier kunnen we het groepsvak nog van een bijschrift voor-
zien. Kies als bijschrift Betaalwijze en klik op de knop Voltooien.
Figuur 6.6
Figuur 6.7
Copyright 2007 Academic Service
6 Uitgebreide formulieren
151
Bekijk vervolgens het nieuwe formulier in de formulierweer-
gave. Merk op dat de vinkjes bij bestaande records nog niet aan-
wezig zijn. Toen die records werden ingevoerd, bestond het veld
Betaalwijze nog niet. Aangezien die standaard de waarde 0 hebben
en dus niet 1, 2 of 3 wordt het vinkje niet getoond. We kunnen ze
nu wel van een vinkje voorzien. Bij nieuwe records wordt de
opgegeven standaardwaarde, Acceptgiro, afgevinkt.
Als we later de instellingen en teksten willen veranderen, kan dat
door de eigenschappen van het groepsvak en de selectievakjes te
wijzigen. De teksten kunnen we in het formulier eenvoudig aan-
passen. Overigens is een groepsvak niet bedoeld om later vaak
gewijzigd te worden. Als gegevens wel kunnen veranderen, is het
verstandiger om een keuzelijst te maken, zie onder andere para-
graaf 6.3, Keuzelijsten.
Opgave
6.1 a. Open het formulier Boeking voorbeeld in de formulierweer-
gave. Vul bij iedere boeking in of een annuleringsverzekering
gewenst is en de gewenste betaalwijze.
b. Wijzig in het formulier Boeking voorbeeld het veld Annulerings-
verzekering zodanig dat het getoond wordt als wisselknop.
c. Het groepsvak Betaalwijze dient in hetzelfde formulier weer-
gegeven te worden als een verzameling keuzerondjes.
6.2 Afbeeldingen OLE-objecten
In Access is het mogelijk om een veld te maken dat afbeeldingen
kan bevatten. Hierbij kunnen we denken aan een cd-database,
die naast de gegevens van de artiest en de nummers ook een foto
van die cd toont. Een ander voorbeeld is een makelaar in huizen,
die naast de gegevens van het huis ook een foto van dat huis kan
tonen. In onze Reisbureau-database zouden we nog hotels kun-
nen opnemen met hotelgegevens en een foto van het hotel. Een
afbeelding dient als gegevenstype OLE-object te krijgen. In een
OLE-objectveld kunnen niet alleen afbeeldingen van fotos wor-
den opgeslagen, maar ook videofragmenten, Excel-graeken of
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
152
-werkbladen, geluidsfragmenten, tekeningen die gemaakt zijn met
bijvoorbeeld Paint en nog veel meer.
Een OLE-object kan weergegeven worden in een afhankelijk kader
of in
een niet-afhankelijk kader. We spreken over een afhankelijk en
niet-afhankelijk objectkader. In een afhankelijk objectkader wor-
den de OLE-objecten weergegeven die opgeslagen liggen in een
tabel van de database. Onze genoemde voorbeelden worden dus
getoond in een afhankelijk objectkader, de plaatjes komen immers
uit een tabel van de database. Als we een afbeelding op een formu-
lier of rapport willen tonen die niet uit een tabel komt, moeten we
een niet-afhankelijk objectkader kiezen. Hierbij valt te denken aan
het tonen van een bedrijfslogo op formulieren of rapporten. Ook
zou in onze Reisbureau-database een openingsscherm getoond
kunnen worden met hierop een foto van een mooi strand.
6.2.1 Afhankelijk objectkader
Open de database Oefening, die we eerder hebben gemaakt. Is
dat nog niet gedaan, creer dan eerst deze database. Ontwerp een
nieuwe tabel met de volgende structuur.
Veldnaam Gegevenstype Veldlengte
Kenteken Tekst 8
Bouwjaar Numeriek Integer
Foto OLE-object
Status Tekst 8
Kies het veld Kenteken als sleutel.
Sla de tabel op onder de naam Auto.
We gaan een formulier voor deze tabel ontwerpen. In het veld Foto
gaan we fotos van de autos opslaan. We zullen dan fotos van de
autos moeten maken met een digitale camera, zodat ze in de data-
base opgeslagen kunnen worden. Op de cd-rom bij dit boek zijn
drie plaatjes van autos opgenomen.
Selecteer de tabel Auto en kies vervolgens in het menu voor Invoe-
gen, AutoFormulier. Het formulier in de formulierweergave staat
in guur 6.8. We zien dat er een kader is getekend waar de foto in
geplaatst kan worden. Aangezien het een lege tabel betreft, zijn er
nog geen gegevens en fotos te zien. We gaan een record vullen.
Copyright 2007 Academic Service
6 Uitgebreide formulieren
153
Voer een kenteken en bouwjaar in en ga vervolgens met de muis in
het fotokader staan.
Nu moeten we onze foto invoegen. Kies uit de menubalk Invoegen,
Object. Er verschijnt een scherm waarin we nieuwe of bestaande
objecten kunnen invoegen, zie guur 6.9.
Door Nieuw te kiezen kunnen we verschillende nieuwe objecten
maken en deze vervolgens in het kader plaatsen; bijvoorbeeld Bit
Images, Excelgraeken en fotos uit Microsoft Photo Editor. De
foto van onze auto staat echter al op schijf.
Selecteer Bestand gebruiken.
Klik op de knop Bladeren om het fotobestand te zoeken. In dit
voorbeeld PorscheBoxter.bmp.
Figuur 6.8
Figuur 6.9
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
154
Verder staan op dit scherm nog twee selectievakjes, Koppelen
en Als pictogram weergeven. We zetten een vinkje bij Koppelen
als een koppeling gewenst is met het geselecteerde object. Het
object in de database wordt dan gekoppeld aan het origineel.
Wijzigingen aan het origineel worden op die manier doorgevoerd
in het object in de database. Het databaseobject verwijst immers
naar het origineel. Als we bijvoorbeeld een Excel-graek opnemen
in de database en later de graek met Excel wijzigen, zal de gra-
ek in de database ook aangepast zijn. Zetten we geen vinkje bij
Koppelen, dan wordt het object ingesloten in de database en zullen
wijzigingen in het origineel niet worden doorgevoerd in de data-
base. Wij vinken Koppelen niet af; we gaan later de foto immers
toch niet bewerken.
We kunnen Als pictogram weergeven van een vinkje voorzien als
we niet het plaatje wensen te zien, maar een pictogram dat na het
aanklikken daarvan het plaatje laat zien. Wij doen dit niet, aan-
gezien we de foto direct wensen te zien.
Klik op de knop OK en de foto wordt getoond. Voer bij Status in
Te koop, Optie of Verkocht.
De Wizard heeft ervoor gezorgd dat het kader waarin de foto is ge-
plaatst bepaalde afmetingen heeft. Die afmetingen kunnen we van-
zelfsprekend wijzigen in de ontwerpweergave. Wat gebeurt er als
de foto niet in het kader past, maar te groot of te klein is? Access
biedt hiervoor drie mogelijkheden, de zogenoemde Formaatmodus.
De drie opties zijn:
Uitsnede Deze optie wordt standaard gekozen door de Wizard.
Als de foto niet in het kader past, wordt het gedeelte linksboven in
het kader geplaatst.
Kader vullen Het kader wordt volledig gevuld met de foto.
Hierdoor worden wel de horizontale en verticale afmetingen aan-
gepast aan het kader, wat tot gevolg kan hebben dat de afbeelding
uit zijn verband wordt getoond.
Kader niet vullen Het kader wordt zo goed mogelijk gevuld ter-
wijl de beeldverhoudingen intact blijven. De onderkant of rechter-
kant van het kader kan dan niet gevuld zijn.
Copyright 2007 Academic Service
6 Uitgebreide formulieren
155
Selecteer de opties door in de ontwerpweergave het object-
kader aan te klikken en vervolgens op de werkbalk de knop
Eigenschappen te kiezen. Het tabblad Opmaak bevat de eigenschap
Formaatmodus. Hier kunnen we onze keuze kenbaar maken. Als
veel fotos van verschillende afmetingen getoond moeten worden,
is de optie Kader niet vullen de beste optie in combinatie met de
eigenschap Speciaal effect op Geen. Zijn alle fotos van gelijke
afmetingen, dan kan voor Kader vullen gekozen worden. De afme-
tingen van het kader dienen dan wel op maat gemaakt te worden,
door het kader te vergroten of te verkleinen en het resultaat te
bekijken.
Activeer het eigenschappenvenster en selecteer het foto-object.
Verander in tabblad Opmaak de eigenschap Formaatmodus in
Kader niet vullen en de eigenschap Speciaal effect in Geen.
Sla het formulier op onder de naam Auto voorbeeld.
6.2.2 Niet-afhankelijk objectkader
Als we op een formulier of rapport een afbeelding willen plaatsen
die niet afkomstig is uit een tabel van de database, maar dient ter
verfraaiing van het formulier of rapport, dan spreken we van een
niet-afhankelijk objectkader. Hierbij kunnen we denken aan een
logo op ieder formulier, een logo bij het afdrukken van een rapport
of een foto van een mooi strand in het openingsscherm voor het
reisbureau. We zullen een logo op het autoformulier van de auto-
handelaar plaatsen.
Maak via het overzicht Formulieren het formulier Auto weer actief
in de ontwerpweergave.
Plaats zo nodig via de werkbalk, knop Werkset, de werkset op het
formulier.
Sleep eventueel met de muis de rechterkant van het formulier naar
rechts om ruimte te maken voor het logo.
Klik in de werkset op de knop Kader voor niet afhankelijk object
en ga met de muis naar het formulier en markeer een kader.
Vervolgens verschijnt het scherm Object invoegen. Dat scherm is
al besproken bij een afhankelijk objectkader. We kunnen dus een
nieuw logo maken of een reeds bestaand logo van schijf halen.
Kies voor Bestand gebruiken en activeer het bestand Logo.bmp.
Merk op dat het logo in de ontwerpweergave direct wordt getoond,
het hoort immers bij het ontwerp.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
156
Om het logo goed in het kader te krijgen dienen we de eigenschap-
pen nog aan te passen. Maak het eigenschappenvenster actief voor
ons logo.
Kies in het tabblad Opmaak de eigenschap Formaatmodus en kies
voor Kader niet vullen. Maak nu eventueel het kader nog passend.
Controleer het formulier in de formulierweergave.
Er is nog een tweede snelle manier om een niet-afhankelijk
objectkader te maken. Als het formulier in de ontwerpweergave
geopend is, kunnen we via Plakken een afbeelding van het klem-
bord in het formulier plaatsen. Als we dus een afbeelding hebben,
plaatsen we deze via Kopiren op het klembord. Hierna kunnen we
de afbeelding direct opnemen in het formulier. De afmetingen en
formaatmodus moeten dan nog wel aangepast worden.
Opgave
6.2 a. Voeg aan de tabel Auto nog twee records toe. We kunnen
nog twee plaatjes toevoegen, te weten MercedesC180.bmp en
FerrariEnzo.bmp.
Pas het kader en de formaatmodus zodanig aan dat de plaatjes
zo gunstig mogelijk worden afgebeeld.
b. Verwijder ons logo en voeg zelf een afbeelding toe als nieuw
logo. Kies eventueel via het venster Object invoegen, Nieuw,
Microsoft Clip Gallery en Transport voor de rode Ferrari.
Zorg wel dat de afbeelding op de juiste wijze in het kader past.
c. Op het formulier staat nog een tekst bij de foto, namelijk foto.
Die tekst is volkomen overbodig, verwijder hem daarom van het
formulier.
6.3 Keuzelijsten
Er zijn twee typen keuzelijsten:
met invoervak;
zonder invoervak.
Een keuzelijst met invoervak biedt de mogelijkheid om een waarde
te typen of op de knop te klikken, waardoor een lijst met mo-
Copyright 2007 Academic Service
6 Uitgebreide formulieren
157
gelijke waarden wordt getoond waaruit een keuze gemaakt kan
worden. De keuzelijst zonder invoervak toont een lijst met opties
waaruit gekozen kan worden, zonder dat een waarde ingevoerd
kan worden.
De tabel Auto, die we eerder in de database Oefening hebben
gemaakt, heeft het veld Status. Hierin kan vermeld worden of de
auto te koop staat, of er een optie door een klant is genomen of dat
de auto al is verkocht. Het veld Status is te vullen met Te koop,
Optie of Verkocht. We zullen bij dit veld een keuzelijst met
invoerveld gaan maken.
Open de database en selecteer de tabel Auto in de
Ontwerpweergave.
Het gegevenstype van Status is Tekst. Klik met de muis in het
vakje gegevenstype van Status. We zien nu overigens direct een
voorbeeld van een keuzelijst met invoervak.
Open de keuzelijst en kies Wizard Opzoeken.
Het venster Wizard Opzoeken biedt nu twee mogelijkheden om
gegevens in te voeren:
de waarden van de opzoekkolom moeten worden opgezocht in een
tabel of
de waarden zullen worden getypt.
Met de eerste optie kunnen we bijvoorbeeld een artiestnummer
opzoeken bij het toevoegen van een nieuwe cd in een cd-database,
of het artikelnummer opzoeken van een snowboard in een sport-
zaak. In voorgaande hoofdstukken hebben we van deze mogelijk-
heid gebruikgemaakt in de Reisbureau-database. Bij de tabel
Boeking hebben we toen een keuzelijst met invoervak gemaakt
voor het invoeren van een klantnummer. Verderop in deze para-
graaf komen we hierop terug. We gebruiken de eerste optie als de
waarden uit de keuzelijst kunnen veranderen. Dit geldt bijvoor-
beeld voor klant- en artikelgegevens: er kunnen immers klanten of
artikelen zijn toegevoegd of verwijderd. Met de tweede optie die-
nen we de waarden uit de keuzelijst te typen. Zon lijst kiezen we
als de waarden uit de lijst niet aan verandering onderhevig zijn.
Kies voor De waarden zullen worden getypt. De opties Te koop,
Optie en Verkocht zullen immers niet veranderen. Kies volgen-
de.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
158
Het venster dat verschijnt (guur 6.10) biedt ons de mogelijkheid
om in te voeren hoeveel kolommen weergegeven dienen te worden
en welke waarden we in die kolommen willen zien.
We hebben maar n kolom met drie items, voer dus bij Aantal
kolommen het getal 1 in (standaardwaarde) en klik onder Kol1 om
de waarden van de items te typen. Druk na het intoetsen van een
waarde steeds op de Tab-toets.
Het is tevens mogelijk om de kolombreedte aan te passen. In dit
voorbeeld hebben we de breedte iets kleiner gemaakt. Het verklei-
nen of vergroten kan door met de muis op de rechterrand van de
cel Kol1 te staan en daarna naar links of rechts te slepen.
We hadden in dit voorbeeld ook kunnen kiezen voor een iets ef-
cintere methode van invoer door het veld Status een lengte te
geven van n teken. Hierin hadden we dan de letter T (Te koop),
O (Optie) of V (Verkocht) kunnen plaatsen. We hadden hier dan
voor twee kolommen moeten kiezen. In de eerste hadden we
de drie letters gezet en in de tweede kolom de daarbij horende
omschrijvingen.
Het volgende scherm vraagt nog om het label (tekst) dat bij het
veld geplaatst moet worden. Accepteer de standaard Status en vol-
tooi de Wizard.
Klik vervolgens op het tabblad Opzoeken; dit bevat onze
keuzemogelijkheden bij Rijbron.
Figuur 6.10
Copyright 2007 Academic Service
6 Uitgebreide formulieren
159
De eigenschap Alleen lijst staat standaard op Nee, wat betekent:
andere waarden mogen ook ingevoerd worden. Als we dat niet
wensen en alleen de genoemde opties willen accepteren, moet de
eigenschap
Alleen lijst op Ja gezet worden. Zet de eigenschap Alleen lijst op
Ja, we accepteren geen andere waarden.
Naast de eigenschap wordt de knop Bijwerkopties voor eigen-
schap zichtbaar. Door hierop te klikken kunt u de gewijzigde
eigenschap van het veld Status automatisch doorvoeren in formu-
lieren en rapporten. Er verschijnt dan een extra venster met alle
formulieren en rapporten die u kunt bewerken waarop het veld
Status voorkomt. Wanneer u dat nu zou uitvoeren krijgt u de mede-
deling dat geen objecten bijgewerkt te hoeven worden. Omdat in
de formulieren die we hebben het veld Status nog als Tekstveld is
gedenieerd en niet als Keuzelijst. Een tekstveld heeft geen opzoe-
keigenschappen.
Sla de nieuwe structuur op en sluit af.
Als we nu querys of formulieren maken, zal het statusveld auto-
matisch een keuzelijst met invoervak zijn.
We gaan een nieuw formulier ontwerpen, waarop Status als keuze-
lijst wordt getoond.
Selecteer in het overzicht Formulieren de optie Formulier maken
met wizard.
Kies de tabel Auto en selecteer de velden Kenteken, Bouwjaar en
Status.
Selecteer in het volgende scherm In kolomvorm, Standaard en sluit
af met de formuliernaam Keuzelijst voorbeeld.
Controleer vervolgens de werking en probeer zelf ook een waarde
in te voeren. Toets een correcte en een niet-toegestane waarde in
en bekijk de reactie.
Als we het formulier sluiten en het formulier Auto in de formu-
lierweergave openen, zien we bij het veld Status geen keuzelijst
met invoervak. In de formulieren die al gemaakt zijn, is de keu-
zelijst voor het veld Status niet bekend. Als we daar een keuzelijst
van willen maken, moeten we het formulier aanpassen.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
160
Zet daartoe het formulier in de ontwerpweergave.
Selecteer de tekst Status en het veld Status en verwijder deze
(Delete-toets).
Klik op de werkbalk op de knop Lijst met velden. Hier zien we een
voorbeeld van een keuzelijst zonder invoervak.
Selecteer Status en sleep deze naar de plaats op het formulier waar
de status moet komen. We hebben nu een veld Status met keuze-
lijst. Eventueel kunnen we de plaats van het veld nog veranderen
om de lay-out te verfraaien.
Controleer de werking in de formulierweergave.
Keuzelijsten met invoervak worden in databases vaak gebruikt om
de referentile integriteit te waarborgen. Stel we zijn een nieuwe cd
aan het invoeren in een cd-database, en na het nummer van de cd
wordt om het artiestnummer gevraagd. Het artiestnummer dat
ingevoerd moet worden, moet in de tabel Artiest bestaan (referen-
tile integriteit). Als we het nummer niet kennen, is het met een
keuzelijst met invoervak eenvoudig op te roepen. Ideaal zou zijn
wanneer we een alfabetische artiestenlijst te zien krijgen waaruit
we de naam kunnen selecteren, terwijl de computer automatisch
het daarbij behorende artiestnummer invoert. Dit lijkt misschien
ingewikkeld, maar is in Access eenvoudig te verwezenlijken.
Eigenlijk zouden we op iedere vreemde sleutel zon keuzelijst
moeten realiseren. In voorgaande opdrachten hebben we in de
tabel Boeking uit de database Reisbureau een dergelijke keuzelijst
gemaakt. Toen is echter niet gebruikgemaakt van de Wizard. We
zullen aan de hand van de database Reisbureau een voorbeeld uit-
werken door gebruik te maken van de Wizard. (Waar zouden we
zijn zonder die Wizard?)
In de tabel Reis is het veld Bestemmingcode een vreemde sleutel.
Het veld is immers niet de sleutel, maar wijst naar de sleutel in de
tabel Bestemming. De waarden van het veld Bestemmingcode, in
de tabel Reis, mogen alleen die waarden aannemen die in de tabel
Bestemming liggen opgeslagen. We hebben dit afgedwongen bij het
leggen van de relaties. We hebben toen aangegeven: referentile
integriteit afdwingen. Als dus in de tabel Reis een bestemming-
code wordt ingevoerd die niet in de tabel Bestemming staat, krijgen
we een boodschap dat die waarde niet wordt geaccepteerd. Via de
keuzelijst kunnen we dan de correcte waarde invoeren.
Copyright 2007 Academic Service
6 Uitgebreide formulieren
161
Pas op: We gaan de Wizard Opzoeken toepassen op velden die
gebruikt worden in relaties. Dat is een situatie die het meest wordt
toegepast. Maar vanaf Access 2002 kan de wizard alleen toegepast
worden als de relatie nog niet bestaat. De wizard legt meteen de
relatie tussen de tabellen, helaas zonder referentile integriteit. De
wizard functioneert dus optimaal bij het ontwerpen van de tabel-
len.
Aangezien wij de relatie al gelegd hebben, moeten we die eerst in
het relatievenster verbreken. Vervolgens moeten we de wizard toe-
passen en ten slotte de referentile integriteit herstellen.
Selecteer het relatievenster via Extra, Relaties of direct uit de
werkbalk en verwijder de relatie tussen de tabellen Reis en
Bestemming. Sluit vervolgens het venster.
Open vervolgens de tabel Reis in de ontwerpweergave.
Klik met de muis in de kolom Gegevenstype van het veld
Bestemmingcode.
Kies Wizard Opzoeken als gegevenstype.
Klik op de optie De waarden voor de opzoekkolom moeten... We
typen de waarden nu niet zelf, maar gaan deze halen uit de tabel
Bestemming.
Geef in het volgende venster aan of in een tabel gezocht moet wor-
den of in een eerder gemaakte query.
Selecteer Tabellen en Bestemming.
Geef op welke velden getoond moeten worden in de keuzelijst; zie
guur 6.11. In dit voorbeeld selecteren we ze allemaal.
Figuur 6.11
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
162
In het volgende venster kunnen we de sorteervolgorde opgeven;
zie guur 6.12. We kunnen op maximaal vier velden sorteren. Een
klantenlijst op volgorde van klantnummer is niet zinvol, op klant-
naam wel. Een lijst op volgorde van bestemmingcode is minder
handig dan een lijst op volgorde van plaats. Selecteer Land en
vervolgend Plaats en laat deze beide oplopend sorteren (standaard
waarde). Er wordt nu gesorteerd op land en daarbinnen op plaats.
In het venster dat verschijnt, wordt de opmaak van de keuzelijst
getoond; zie guur 6.13. We kunnen eventueel de kolommen ver-
kleinen of vergroten. Tevens staat Sleutelkolom verbergen (aan-
bevolen) afgevinkt. Hierdoor wordt het in te voeren sleutelveld
verborgen. Negeer die aanbeveling, maak de sleutelkolom wel
zichtbaar.
Figuur 6.12
Figuur 6.13
Copyright 2007 Academic Service
6 Uitgebreide formulieren
163
Het scherm van guur 6.14 geeft de mogelijkheid om het veld uit
de keuzelijst te selecteren dat we willen invoeren in de tabel Reis;
in ons geval het veld Bestemmingcode. Selecteer dit en ga naar het
volgende scherm.
Ga vervolgens door de nish door de labelnaam Bestemmingcode
te accepteren.
Sla de nieuwe structuur op en dwing in het relatiescherm de
referentile integriteit tussen de tabellen Reis en Bestemming weer
af. Controleer de werking van de keuzelijst met invoervak in de
gegevensbladweergave.
We moeten nog een aanpassing maken. Het is namelijk mogelijk
een waarde in te voeren die niet in de lijst staat en dit willen we
voorkomen.
Plaats de tabel opnieuw in de ontwerpweergave.
Selecteer het veld Bestemmingcode, en vervolgens de tab
Opzoeken. Hierin bevindt zich de eigenschap Alleen lijst. Zet die
op Ja. Nu worden alleen waarden uit de keuzelijst geaccepteerd.
In dit venster kunt u ook de eigenschappen van de keuzelijst veran-
deren. Bijvoorbeeld de sorteervolgorde. Klik daartoe op de eigen-
schap Rijbron en vervolgens op de drie puntjes. De query van de
keuzelijst wordt zichtbaar; zie guur 6.15. Let hierbij eens op de
manier hoe eerst wordt gesorteerd op land en vervolgens op plaats.
Het veld Plaats is een tweede keer verborgen toegevoegd!
Figuur 6.14
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
164
Opgave
6.3 a. Maak in de tabel Auto uit de database Oefening een nieuw veld
Kleur (Tekst). Zorg dat het veld als keuzelijst met invoervak
wordt getoond. De toegestane kleuren moeten getypt worden.
Kies zelf enkele kleuren. Andere kleuren worden bij het selecte-
ren niet toegestaan. Controleer de werking door in het formulier
Keuzelijst voorbeeld het veld Kleur toe te voegen.
b. In voorgaande opdrachten hebben we in de tabel Boeking de
velden Klantnummer en Reisnummer gewijzigd in keuzelijsten
met invoervak. Controleer of deze keuzelijsten voldoen aan de
volgende criteria.
De klantnummers komen uit de tabel Klant en de reisnummers
uit de tabel Reis. Zorg dat de keuzelijst van klantnummer
gesorteerd ligt op naam van de klant, en de keuzelijst van het
reisnummer op volgorde van aopende vertrekdatum en bij
gelijke vertrekdatum op plaats.
Figuur 6.15
Copyright 2007 Academic Service
6 Uitgebreide formulieren
165
6.4 Hoofd- en subformulieren
Bij het ontwerpen van een formulier hebben we tot nu toe gebruik-
gemaakt van slechts n tabel. Vaak zal echter meer dan n tabel
nodig zijn om alle gegevens in te voeren of te tonen. Hierbij kan
het voorkomen dat de gegevens op n formulier geplaatst kunnen
worden, maar ook dat er n of meer subformulieren nodig zijn.
We zullen beide mogelijkheden aan de hand van een voorbeeld
toelichten. In het eerste voorbeeld worden gegevens uit meerdere
tabellen op n formulier geplaatst.
We gaan de gegevens van een boeking op een formulier plaat-
sen. Hierbij maken we gebruik van onze database Reisbureau.
Alvorens het formulier te ontwerpen moeten we eerst weten
welke gegevens op het beeldscherm getoond moeten worden, zie
guur 6.16.
Open de database Reisbureau en maak een nieuw formulier met
Wizard Formulier. In het eerste scherm (guur 6.17) kunnen we
opgeven welke tabellen en welke velden we op het scherm wensen
te plaatsen.
Selecteer onder Tabellen/querys de gewenste tabel, gevolgd door
de velden die uit die tabel op het scherm moeten komen.
Selecteer de volgende tabel waaruit velden nodig zijn en kies uit
die tabel de benodigde velden, zie guur 6.16. Op deze manier
kunnen we alle benodigde velden uit de verschillende tabellen
Figuur 6.16
Tabel Veld
Boeking Boekingsnummer
Klantnummer
Reisnummer
Boekdatum
Aantal Volwassenen
Aantal Kinderen
Klant Naam
Adres
Postcode
Woonplaats
Reis Vertrekdatum
Prijs per persoon
Bestemming Plaats
Land
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
166
benaderen. We hadden ook eerst een query kunnen maken met alle
benodigde velden. Bij Tabellen/querys selecteren we dan de query
en kiezen vervolgens in n keer alle velden.
Klik nadat alle velden geselecteerd zijn op Volgende. Er verschijnt
een venster (guur 6.18) waarin we kunnen opgeven hoe we de
gegevens willen zien: volgens Klant, volgens Boeking, volgens Reis
of volgens Bestemming.
Figuur 6.17
Figuur 6.18
Copyright 2007 Academic Service
6 Uitgebreide formulieren
167
Access zal zelf als dat nodig mocht zijn de gegevens op de juis-
te wijze groeperen. Bij volgens Boeking wordt gekeken vanuit de
tabel Boeking. Een boeking is gekoppeld aan n klant en aan n
reis. Een reis is weer gekoppeld aan n bestemming. Dit is ook in
het gegevensmodel (GSD, ER-diagram) te zien. Uitgaande van de
tabel Klant zouden we bij n klant meerdere boekingen kunnen
hebben (een n-op-veel relatie). Een boeking zit verder gekoppeld
aan n reis, die op zijn beurt weer gekoppeld is aan n bestem-
ming. Voor de andere zienswijzen geldt iets dergelijks.
In onze situatie kiezen we volgens Boeking. We gaan immers een
boeking tonen.
Kies op de gebruikelijke manier de lay-out (Kolomvorm), achter-
grond (Standaard) en naam (Boeking gegevens). In guur 6.19
wordt het resultaat getoond.
Alle gegevens worden nu op het scherm getoond. Een wijziging in
bijvoorbeeld het veld Reisnummer wordt direct doorgevoerd in de
gegevens van de bestemming. We kunnen ook een nieuwe boeking
invoeren via de knop . De gegevens op het formulier worden
door de Wizard niet in de door ons gewenste volgorde in het ven-
ster getoond. Uiteraard kunnen we de gegevens naar onze hand
zetten door ze te verplaatsen, te vergroten, te verkleinen,
enzovoort.
Om te voorkomen dat de basisgegevens per ongeluk gemuteerd
worden en om sneller de noodzakelijke gegevens te kunnen invoe-
ren, gaan we van enkele besturingselementen de eigenschappen
Figuur 6.19
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
168
veranderen. We willen dat de gegevens Naam, Adres, Postcode en
Plaats uit de tabel Klant niet gewijzigd kunnen worden. Ze worden
alleen nog maar getoond. Hetzelfde geldt voor Vertrekdatum en
Prijs per persoon uit de tabel Reis, en Plaats en Land uit de tabel
Bestemming. Hiertoe dienen we de eigenschappen van die bestu-
ringselementen te veranderen.
Plaats het formulier in de ontwerpweergave en selecteer het bestu-
ringselement Naam, niet de begeleidende tekst Naam.
Klik op de werkbalk op de knop Eigenschappen (of doe dit via het
snelmenu, rechtermuisklik). De eigenschappen van het besturings-
element worden getoond; zie guur 6.20.
Selecteer het tabblad Gegevens.
We gaan de eigenschappen Ingeschakeld en Vergrendeld gebrui-
ken:
Ingeschakeld: Ja of Nee. Als deze eigenschap op Ja staat, kan dit
besturingselement de focus krijgen. Het besturingselement is dan
via de muis of de Tab-toets te selecteren. Als we Ingeschakeld op
Nee zetten, is het besturingselement niet te selecteren en boven-
dien wordt het lichter gekleurd.
Vergrendeld: Ja of Nee. De besturingstoets functioneert normaal,
kan de focus krijgen. Echter het bewerken, toevoegen of verwijde-
ren van gegevens kan niet (Ja) of wel (Nee).
Figuur 6.20
Copyright 2007 Academic Service
6 Uitgebreide formulieren
169
De eigenschap Ingeschakeld wordt in toepassingen vaak gebruikt,
de eigenschap Vergrendeld iets minder vaak; deze wordt hier voor
de volledigheid vermeld.
Selecteer de eigenschap Ingeschakeld en kies Nee. Bekijk het resul-
taat in de formulierweergave.
Voor de overige besturingselementen zouden we hetzelfde moe-
ten doen. We kunnen echter in n keer alle gewenste besturings-
elementen selecteren en vervolgens de eigenschap Ingeschakeld op
Nee zetten.
Zet daartoe het formulier in de ontwerpweergave.
Klik op de zojuist gesommeerde besturingselementen, waarvan
we de eigenschap willen veranderen, en houd daarbij de Shift-toets
ingedrukt. We krijgen dan een meervoudige selectie.
Staat het eigenschappenvenster, na de meervoudige selectie,
nog niet op het scherm, klik dan op de werkbalk op de knop
Eigenschappen of doe dit via het snelmenu (rechtermuisklik), zie
guur 6.21.
Kies het tabblad Gegevens en zet de eigenschap Ingeschakeld op
Nee.
Controleer de werking in de formulierweergave.
Figuur 6.21
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
170
Met de eigenschappen Ingeschakeld en Vergrendeld kunnen we
voorkomen dat besturingselementen worden gewijzigd. Het is ook
mogelijk om het gehele formulier van eigenschappen te voorzien,
zodanig dat toevoegen, verwijderen of wijzigen wel of niet zijn
toegestaan.
Plaats het gemaakte formulier Boeking gegevens in de ontwerp-
weergave op het scherm.
Maak tevens het eigenschappenvenster actief, via de knop
Eigenschappen op de werkbalk of via het snelmenu (rechtermuis-
klik).
In de bovenste regel van het eigenschappenvenster, de blauwe balk
indien geselecteerd, kunnen we zien waarvan de eigenschappen
getoond worden. In ons geval moet daar Formulier staan, zie
guur 6.22. Zo niet, dan worden van een ander deel (of delen) van
het formulier bijvoorbeeld Meervoudige selectie de eigenschap-
pen getoond.
Klik, om het formulier te selecteren, op de formulierkiezer, het
vakje links van de liniaal, zie guur 6.23, of selecteer het object
Formulier uit de keuzelijst in het eigenschappenvenster.
Het tabblad Gegevens, van een formulier, bevat de eigenschappen
Bewerken toestaan, Verwijderingen toestaan, Toevoegingen toe-
staan. Hiermee kunnen mutaties, verwijderingen of toevoegingen
wel of niet worden toegestaan.
Figuur 6.22
Copyright 2007 Academic Service
6 Uitgebreide formulieren
171
In het zojuist behandelde voorbeeld hebben we de gegevens
getoond gezien vanuit de tabel Boeking. Als we dezelfde gegevens
willen zien vanaf de tabel Klant, krijgen we een geheel ander over-
zicht. Een klant kan immers meerdere boekingen hebben, zoals
blijkt uit het gegevensmodel. We gaan dit als voorbeeld uitwerken.
Selecteer in het overzicht Formulieren de optie Formulier maken
met wizard.
Selecteer vervolgens dezelfde velden als in het vorige voorbeeld,
zie guur 6.16.
Na de selectie komen we in het scherm waarin we kunnen opgeven
hoe we de gegevens willen zien. Kies voor volgens Klant, zie
guur 6.24.
Figuur 6.23
Figuur 6.24
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
172
Aangezien een klant meerdere boekingen kan hebben, worden nu
twee formulieren aangemaakt: een hoofdformulier met daarop de
klantgegevens en een subformulier met daarop de boekingsgege-
vens. De optie Gekoppelde formulieren laten we vooralsnog buiten
beschouwing. Het subformulier wordt zodanig getoond dat meer-
dere boekingen (records) getoond kunnen worden.
Geef in het volgende scherm aan hoe het subformulier weer-
gegeven moet worden: Als gegevensblad of In tabelvorm. Kies
voor Als gegevensblad.
Ga naar het volgende scherm en kies voor Standaard.
In het laatste scherm, zie guur 6.25, wordt gevraagd om de for-
mulieren een titel (naam) te geven. Het hoofdformulier en sub-
formulier zijn als twee aparte formulieren gemaakt, die door de
onderlinge relatie (op basis van het veld Klantnummer) aan elkaar
zijn gekoppeld. Geef het hoofdformulier de titel (naam) Klant boe-
kingen en het subformulier de titel (naam) Subklant boekingen.
Bekijk het resultaat.
Als we door de klanten navigeren, zien we de boekingen van die
klanten in het subformulier. Het subformulier heeft ook naviga-
tieknoppen, die we kunnen gebruiken als het aantal boekingen
groter wordt dan in het venster kan worden afgebeeld. Het kader
waarin het subformulier, de boekingen, wordt getoond is krap
bemeten. Dat is eenvoudig te verbeteren door het hoofdformulier
Figuur 6.25
Copyright 2007 Academic Service
6 Uitgebreide formulieren
173
in de ontwerpweergave te zetten, het subformulier wordt dan ook
getoond. We kunnen nu het kader, van het subformulier, aan de
rechterkant vergroten.
Controleer het resultaat in de formulierweergave, maximaliseer
eventueel het hoofdformulier.
In de formulierweergave kunnen we diverse kolommen verkleinen
zonder dat informatie verloren gaat. De kopjes boven de kolommen
zijn dan niet of niet volledig te lezen. We kunnen dit aanpassen.
Open het hoofdformulier in de ontwerpweergave. Hierin wordt ook
het subformulier in de ontwerpweergave getoond. Indien het sub-
formulier niet in de ontwerpweergave wordt getoond, sluit dan het
venster en open het hoofdformulier opnieuw in de ontwerpweer-
gave.
Selecteer het bijschrift Aantal volwassenen (niet het veld Aantal
volwassenen).
Maak, via de knop Eigenschappen in de werkbalk, het eigenschap-
penvenster actief.
Selecteer hieruit het tabblad Opmaak.
Zet daar de eigenschap Bijschrift op Volw., zie guur 6.26. Merk
op dat in het subformulier de gegevens in de ontwerpweergave
onder elkaar staan, maar in de formulierweergave naast elkaar.
Figuur 6.26
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
174
Sluit vervolgens het venster en bevestig de vraag of de wijzigingen
bewaard moeten worden.
Open vervolgens het hoofdformulier Klant boekingen in de formu-
lierweergave en bekijk het resultaat.
Pas eventueel nu de kolombreedtes weer aan. Herhaal dit tot alle
kolommen volledig op het scherm passen.
Tip: Je kunt het subformulier ook in een afzonderlijk venster
openen. Selecteer in de ontwerpweergave met de rechtermuis-
knop het subformulier. Kies vervolgens in het snelmenu de optie
Subformulier in nieuw venster.
Opgave
6.4 a. Maak een nieuw formulier waarop de reizen per bestemming
worden getoond. Per reis bestaan vervolgens meerdere boekin-
gen. Selecteer dezelfde velden als in guur 6.16 zijn vermeld.
Bij deze opgave komen dus twee subformulieren voor: n voor
de reizen en n voor de boekingen.
b. Verander in het formulier van opgave a. de eigenschap van het
veld Land zodanig dat dit niet meer geselecteerd (gefocust)
kan worden.
c. Zorg dat in de beide subformulieren die bij opgave a. zijn ge-
maakt het onmogelijk wordt om te wijzigen en te verwijderen.
Toevoegen moet wel mogelijk blijven.
d. Wijzig hoofdformulier Klant boekingen en subformulier
Subklant boekingen zodanig dat alle gegevens op een scherm
passen en dat de kopteksten in het subformulier toch duidelijk
zijn.
6.5 Tabbladen
Binnen het programma Access (en vele andere toepassingspro-
grammas) wordt veel gebruikgemaakt van tabbladen. Denk maar
aan de tabbladen Opmaak, Gegevens, Gebeurtenis, enzovoort uit
het eigenschappenvenster van Access, zie guur 6.26. Het is moge-
lijk om zelf tabbladen te maken op formulieren. We maken daarbij
gebruik van het tabbesturingselement. We gaan het volgende voor-
beeld uitwerken in onze database Reisbureau.
Copyright 2007 Academic Service
6 Uitgebreide formulieren
175
Regelmatig bellen klanten of er nog leuke reizen in de aanbieding
zijn. We willen die klanten zo goed mogelijk adviseren en daarbij
informatie over de klant op het scherm hebben. Daarin moeten
behalve zijn adresgegevens ook de reizen staan die de klant bij ons
reisbureau heeft geboekt. Bij het zoeken naar leuke reizen kunnen
we daar rekening mee houden. Iemand die vorig jaar naar Kreta is
geweest, gaan we dit jaar, in eerste instantie, niet weer naar Kreta
sturen. Tevens willen we snel een overzicht hebben van alle reizen
die we kunnen aanbieden.
Selecteer het overzicht Formulieren en klik op de knop Nieuw.
Kies voor AutoFormulier: in kolomvorm en selecteer de tabel
Klant.
Klik op OK; het nieuwe formulier wordt getoond.
Zet het formulier in de ontwerpweergave.
Maximaliseer het venster en vergroot het werkgebied van het for-
mulier door de Formuliervoettekst naar beneden te slepen en de
rechterkant van het raster naar rechts te slepen.
Onder de klantgegevens kunnen we nu de tabbladen plaatsen. Zorg
dat het Werksetvenster op het scherm staat en dat de knop Wizards
voor besturingselementen ingedrukt is (geactiveerd). Hierdoor
wordt bij het plaatsen van verschillende besturingselementen, bij-
voorbeeld een afbeelding of keuzelijst, automatisch een Wizard
gestart.
Klik in de werkset op de knop Tabbesturingselement.
In het werkgebied verandert de muiswijzer. Geef door te klikken
en te slepen de plaats en de grootte van het tabbesturingselement
op het formulier aan. Er verschijnen standaard twee tabbladen. De
tabs krijgen automatisch een doorgenummerde naam.
Ga met de muis op de naam van de eerste tab staan en dubbelklik.
We komen dan in het eigenschappenvenster van de geselecteerde
tab.
Kies hierin het tabblad Overige en verander de eigenschap Naam
in Vorige boekingen.
Doe hetzelfde met het tweede tabblad en kies hierin als naam
Aanbod. Figuur 6.27 toont het voorlopige resultaat.
Vervolgens moeten de gegevens op de beide tabbladen aangebracht
worden. Op de tab Vorige boekingen gaan we een subformulier
plaatsen met daarop de boekingen van de klant.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
176
Klik op de tab Vorige boekingen. Kies uit de werkset de knop
Subformulier/subrapport.
In het werkgebied verandert de muisaanwijzer. Geef door te klik-
ken en te slepen de plaats en de grootte van het subformulier op de
tab Vorige boekingen aan.
De Wizard wordt actief en vraagt of op het subformulier een
bestaand formulier moet worden getoond of dat we op basis van
de tabellen/querys het subformulier gaan ontwerpen. Kies voor
Tabel/query en ga naar het volgende scherm.
Hier kunnen we een bestaande query selecteren of uit de ver-
schillende tabellen onze gewenste gegevens kiezen. Kies uit de
tabel Boeking het veld Boekdatum, uit de tabel Reis de velden
Vertrekdatum en Aantal dagen en tenslotte uit de tabel Bestemming
de velden Plaats en Land.
Ga na de veldselecties naar het volgende scherm van de Wizard.
Hierin wordt gevraagd hoe het hoofdformulier, onze klantgege-
vens, gekoppeld moet worden aan ons subformulier, de boekings-
gegevens.
Daarbij hebben we twee mogelijkheden. De Wizard geeft een lijst
met mogelijke koppelingen waaruit we een koppeling kunnen
selecteren of we bepalen de koppeling zelf, zie guur 6.28. Bij
zelf bepalen kunnen we opgeven welk veld van het hoofdformulier
gekoppeld moet worden aan het veld uit het subformulier. Die
Figuur 6.27
Copyright 2007 Academic Service
6 Uitgebreide formulieren
177
mogelijkheid kunnen we gebruiken als een uitzonderlijke koppe-
ling gewenst is die niet door de Wizard wordt geselecteerd.
Selecteer uit de lijst: Boeking weergeven voor elke record in
Klant... .
Geef het subformulier de titel (naam) Boekingen van klant.
Bekijk het voorlopige resultaat van het formulier in de formulier-
weergave.
De lay-out van het subformulier is nog niet goed verzorgd.
Pas in de ontwerpweergave de grootte van het gebied, en in de
formulierweergave de kolommen aan, zodat een nette lay-out ont-
staat (zie guur 6.29).
Figuur 6.28
Figuur 6.29
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
178
Plaats het formulier weer in de ontwerpweergave om het tweede
tabblad te ontwerpen.
Klik op de tab Aanbod.
Hierop gaan we ook een subformulier aanbrengen. Kies uit de
werkset de knop Subformulier/subrapport en klik en sleep tot weer
de gewenste plaats en grootte is bereikt.
De Wizard wordt weer actief; kies voor Tabel/query.
Ga naar het volgende scherm. Selecteer uit de tabel Reis de velden
Vertrekdatum, Aantal dagen en Prijs per persoon. Kies uit de tabel
Bestemming de velden Plaats en Land.
In het volgende scherm van de Wizard is automatisch gekozen
voor het zelf bepalen van de koppeling tussen het hoofdformulier,
onze klantgegevens, en het subformulier, de aanbodgegevens. Er
is geconstateerd dat er geen directe relatie bestaat tussen de klant-
gegevens en de aanbodgegevens,
immers bij iedere klant worden dezelfde aanbodgegevens getoond.
Aangezien er geen koppeling is, kunnen we direct naar het vol-
gende scherm gaan.
Geef dit subformulier de titel (naam) Reisaanbod.
Controleer het formulier in de formulierweergave.
De lay-out van het subformulier is nog niet goed verzorgd. Pas in
de ontwerpweergave de grootte van het gebied en in de formulier-
weergave de kolommen aan, zodat een nette lay-out ontstaat (zie
guur 6.30).
Figuur 6.30
Copyright 2007 Academic Service
6 Uitgebreide formulieren
179
Sluit het hoofdformulier en geef dit de titel (naam) Klant met tab-
bladen.
Toevoegen/verwijderen tabblad
Zoals we gezien hebben, geeft het tabbesturingselement standaard
twee tabbladen. In ons voorbeeld is dit precies voldoende, maar
wat als we meer tabbladen nodig hebben? Op eenvoudige wijze
kunnen we het aantal tabbladen vergroten.
Plaats het formulier in de ontwerpweergave.
Selecteer het tabbesturingselement (klik naast het laatste tabblad,
niet in een tabblad) en kies vervolgens in de menubalk Invoegen,
Pagina met tabbesturingselement.
Selecteer voor het verwijderen het tabblad en druk vervolgens op
de Delete-toets.
Volgorde van de tabbladen wijzigen
Selecteer het tabbesturingselement in de ontwerpweergave (klik
naast het laatste tabblad, niet in een tabblad).
Druk op de rechtermuisknop om het snelmenu te activeren. Kies in
het snelmenu Paginavolgorde.
Kies een tabblad en klik op de knop Omhoog of Omlaag om het
tabblad te verplaatsen.
We kunnen ook het tabblad selecteren en de eigenschap Pagina-
index wijzigen. Het eerste tabblad heeft indexwaarde 0, het tweede
heeft indexwaarde 1, enzovoort.
Opgave
6.5 a. Verander de volgorde van de tabbladen en hernoem het tabblad
Aanbod in Volledig aanbod.
b. De gegevens in de subformulieren mogen niet gewijzigd wor-
den. Verander de eigenschappen zodanig dat dit niet kan gebeu-
ren
c. Bij de subformulieren zijn begeleidende teksten afgedrukt,
Boekingen van klant en Reisaanbod. Verwijder die teksten.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
180
6.6 Opdrachtknoppen
Een opdrachtknop op een formulier start een actie (opdracht) of
een reeks van acties. Zon actie kan zijn: het afdrukken van een
rapport, het openen van een formulier, het ongedaan maken van
een zojuist ingevoerde klant of het sluiten van een venster. Met
de Wizard kunnen we ruim dertig verschillende acties aan een
opdrachtknop koppelen. Als we nog meer mogelijkheden met een
opdrachtknop wensen uit te voeren, zal een macro gemaakt moe-
ten worden. Een macro bestaat uit een aantal acties die na elkaar
uitgevoerd worden; bijvoorbeeld een formulier openen, vervolgens
dat formulier maximaliseren en tenslotte een lter op het formulier
plaatsen. Het maken van macros wordt in hoofdstuk 8 besproken.
In deze paragraaf maken we opdrachtknoppen met behulp van de
Wizard.
We zullen enige voorbeelden voor opdrachtknoppen maken. We
tonen de klantgegevens op een formulier en plaatsen daar drie
opdrachtknoppen op: een opdrachtknop om wijzigingen in de
klantgegevens te annuleren, een opdrachtknop om een eerder
gemaakt rapport af te drukken en een opdrachtknop om een ander
formulier te openen.
Selecteer het overzicht Formulieren en maak met de wizard een
nieuw formulier van de tabel Klant in kolomvorm (alle velden
tonen).
Plaats het formulier in de ontwerpweergave en maak het venster en
gebied van de klantgegevens groter, zodat we de opdrachtknoppen
kunnen toevoegen.
Activeer zonodig de werkset met behulp van de knop Werkset uit
de werkbalk. Zorg dat in de werkset de knop Wizards voor bestu-
ringselementen geactiveerd is.
Klik in de werkset met de muis op de knop Opdrachtknop en
plaats de muis onder de tekst Telefoonnummer; de vorm van de
muis is veranderd in een opdrachtknop.
Klik en sleep de opdrachtknop op het formulier. De Wizard wordt
actief en toont het eerste venster, zie guur 6.31.
Er wordt gevraagd welke actie uitgevoerd moet worden bij het
klikken op de opdrachtknop. Er zijn zes categorien waaruit geko-
zen kan worden, van Recordnavigatie tot en met Overige. Per cate-
gorie zijn verschillende acties mogelijk.
Copyright 2007 Academic Service
6 Uitgebreide formulieren
181
Selecteer uit de categorie Recordbewerkingen de actie Record
ongedaan maken.
In het volgende venster kunnen we de opdrachtknop voorzien van
een afbeelding (pictogram) of van tekst, zie guur 6.32.
Kiezen we voor Tekst, dan kunnen we in het vakje tekst invoeren
of de standaardtekst accepteren. Kiezen we Afbeelding, dan wor-
den standaard n of meer afbeeldingen (pictogrammen) getoond
die bij die actie horen. Willen we echter alle mogelijke pictogram-
men zien, zet dan een vinkje bij Alle afbeeldingen weergeven.
Hebben we zelf pictogrammen gemaakt, dan klikken we op de
knop Bladeren... om naar de map te gaan waaruit we een afbeel-
ding willen selecteren.
Figuur 6.31
Figuur 6.32
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
182
Kies voor Afbeelding, Ongedaan maken. Het bekende pictogram-
metje van Ofce wordt op de opdrachtknop geplaatst.
Geef in het laatste venster de knop nog een naam. Dit is niet een
naam die op de knop komt te staan we hebben immers een plaat-
je maar een naam die aan de knop wordt toegekend, zodat later
naar die opdrachtknop verwezen kan worden. Kies voor Klant
ongedaan maken. Merk op dat de opdrachtknop standaardafmetin-
gen krijgt, pas deze desgewenst aan.
Bekijk het resultaat in de formulierweergave.
Wijzig enkele gegevens van een klant en klik vervolgens op de
zojuist gemaakte opdrachtknop.
Deze opdrachtknop heeft standaard een tabstop. Als we met de
Enter-toets door het formulier lopen, komen we automatisch op de
opdrachtknop terecht. Het zojuist ingevoerde wordt dan (per onge-
luk) direct weer gewist! Om vergissingen te voorkomen krijgt de
opdrachtknop geen tabstop.
Plaats het formulier in de ontwerpweergave en selecteer de
opdrachtknop. Plaats het eigenschappenvenster op het scherm.
De eigenschappen van de opdrachtknop worden nu getoond.
Kies voor de tab Overige en verander de eigenschap Tabstop in
Nee.
Controleer de uitwerking van deze eigenschap in de formulierweer-
gave.
Sla het formulier op onder de titel (naam) Klant met opdrachtknop-
pen.
We gaan een nieuwe opdrachtknop maken die een bestaand rap-
port gaat afdrukken. Dat rapport gaan we eerst maken.
Selecteer in het databasevenster het overzicht Rapporten.
Selecteer Rapport maken met wizard en kies in het eerste venster
de tabel Klant.
Kies alle velden, geen groepeerniveaus, sorteer op klantnaam,
overzicht in tabelvorm, compact opmaakproel en kies als titel
Klantenlijst. Sluit vervolgens het venster.
Selecteer in het databasevenster het overzicht Formulieren en open
het formulier Klant met opdrachtknoppen in de ontwerpweergave.
Plaats rechts naast de bestaande opdrachtknop een nieuwe
opdrachtknop.
Copyright 2007 Academic Service
6 Uitgebreide formulieren
183
Kies in het eerste venster van de Wizard voor categorie
Rapportbewerkingen en uit de acties Rapport afdrukken.
Selecteer vervolgens het zojuist gemaakte rapport Klantenlijst.
Kies voor Tekst en verander de tekst van Rapport afdrukken
in: Klantenlijst. Maak de naam van de opdrachtknop tevens
Klantenlijst.
We gaan ten slotte nog een opdrachtknop op het formulier plaatsen
die een bestaand formulier opent.
Zet rechts van de bestaande opdrachtknoppen een nieuwe opdracht-
knop op het formulier.
Selecteer de categorie Formulierbewerkingen en kies uit de acties
Formulier openen.
Kies uit de gemaakte formulieren Boeking gegevens. We krijgen
nu de mogelijkheid om specieke gegevens van het nieuwe formu-
lier te tonen of aan te geven dat alle gegevens op het nieuwe for-
mulier getoond moeten worden, zie guur 6.33.
Kies voor Formulier openen en specieke gegevens zoeken, zodat
we de boekingen te zien krijgen van de klant waar we mee bezig
zijn.
Hierna wordt gevraagd welke velden aan elkaar gekoppeld moe-
ten worden; zie guur 6.34. Kies uit Klant met opdrachtknop-
pen het veld Klantnummer en uit Boeking gegevens eveneens
Klantnummer.
Klik vervolgens op de knop <-->, waardoor de koppeling plaats-
vindt.
Figuur 6.33
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
184
Zet Boekingen als tekst op de opdrachtnop. Ook de naam van de
opdrachtknop wordt Boekingen.
Bekijk en onderzoek het resultaat van het formulier in de formu-
lierweergave.
Wanneer we met de muis op de knop Ongedaan maken gaan staan,
komt automatisch de melding record ongedaan maken tevoor-
schijn. Bij de opdrachtknoppen met tekst wordt die melding niet
getoond. We kunnen die eenvoudig aanbrengen door, in de ont-
werpweergave, de eigenschappen van de opdrachtknop te wijzigen:
in het tabblad Overige bij de eigenschap Knopinfo.
Opgave
6.6 a. Maak op het formulier Klant met opdrachtknoppen nog een
opdrachtknop. Deze moet ervoor zorgen dat het formulier wordt
gesloten. Kies voor de afbeelding afsluiten.
b. Maak ook in het formulier Boeking gegevens een opdrachtknop
om het formulier af te sluiten.
c. Zorg dat de opdrachtknoppen Klantenlijst en Boekingen in het
formulier Klant met opdrachtknoppen van een melding worden
voorzien als we met de muis op de opdrachtknop gaan staan.
De melding moet respectievelijk zijn: Alfabetische klantenlijst
en Boekingen van de klant.
Figuur 6.34
Copyright 2007 Academic Service
6 Uitgebreide formulieren
185
6.7 Draaitabellen/Draaigrafieken
Een draaitabel, ook wel kruistabel genoemd, is een speciaal soort
tabel waarin een samenvatting wordt getoond van de opgegeven
velden uit de database. Als we een query hebben gemaakt waarin
op meerdere velden gegroepeerd kan worden, kan die informatie
overzichtelijker worden weergegeven in een draaitabel. Het over-
zicht wordt in rijen en kolommen getoond, zoals in een werkblad
van een spreadsheetprogramma. Met een draaigraek kunnen de
gegevens uit een query of formulier grasch worden weergegeven.
We gaan eerst een draaitabel maken en vervolgens hiervan een
draaigraek.
We zullen een voorbeeld uitwerken. We willen weten hoeveel
volwassenen, kinderen en welk totale aantal personen per dag per
bestemming vertrekken. We willen dit ook nog uitgesplitst hebben
per land. Hiertoe maken we eerst een query waarin de gegevens
staan.
Selecteer uit het databasevenster het overzicht Querys en maak
een nieuwe query via de Ontwerpweergave.
Selecteer de tabellen Bestemming, Reis en Boeking.
Kies de velden Plaats, Land, Vertrekdatum, Bestemmingcode,
Aantal volwassenen en Aantal kinderen.
Maak een rekenveld waarin staat: Totaal: [Aantal volwassenen] +
[Aantal kinderen].
Bekijk de query in de gegevensbladweergave.
Sla de query op onder de naam Draaitabel voorbeeld.
Selecteer het overzicht Formulieren en klik op de knop Nieuw.
Selecteer in het venster Wizard Draaitabellen, kies in het lege
vakje de zojuist gemaakte query Draaitabel voorbeeld en klik
vervolgens op de knop OK. De wizard toont een voorbeeld van een
draaitabel, zie guur 6.35, en in het kort wordt uitgelegd wat het
nut is van een draaitabel.
Selecteer in het volgende venster alle velden. Vervolgens klikken
we op de knop Voltooien. De knop Volgende is niet te selecteren.
Het nieuwe formulier wordt getoond, zie guur 6.36.
De gegevens worden nog niet getoond zoals wij dat willen. Access
weet niet welke gegevens waar moeten staan en de wizard helpt
ons niet verder. Er bestaan vier gebieden, namelijk rij-, kolom-,
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
186
lter- en detailgebied. De velden die we geselecteerd hebben in
de query worden getoond in de Lijst met draaitabelvelden, zie
guur 6.36. Mocht deze lijst niet zichtbaar zijn, dan is deze te
selecteren via het snelmenu (rechtermuisknop). In deze lijst zijn
voor het veld Vertrekdatum twee extra opties toegevoegd, namelijk
Vertrekdatum per week en Vertrekdatum per maand. Voor elk veld
van het type Datum zal dat toegevoegd worden. Hiermee kun je
samengevatte informatie van het veld tonen. Als je bijvoorbeeld
vertrekdatum per week uitvouwt door op het +-teken te klikken,
kun je onder andere kiezen voor Jaren, Weken en Dagen, zie guur
6.37.
Figuur 6.35
Figuur 6.36
Copyright 2007 Academic Service
6 Uitgebreide formulieren
187
Kies je bijvoorbeeld Jaren dan kun je nadat het geplaatst is in de
draaitabel eerst een jaar selecteren, bijvoorbeeld 2004. Indien de
vertrekdatums over verschillende jaren ingevoerd zijn, zal hierna
alleen het jaar 2004 worden weergegeven. Het jaar is vervolgens
verder uit te vouwen door op het +-teken te klikken, naar weken
inclusief een extra totaaltelling. De weken zijn weer uit te vouwen
naar dagen (zondag, maandag, enzovoort). Hetzelfde geldt voor
Vertrekdatum per maand. Je kunt dan onder andere samengevatte
informatie krijgen per jaar, kwartaal en maand inclusief extra
totaaltellingen. De gegevens kunnen vanzelfsprekend ook weer
samengevouwen worden door op het minteken te klikken.
We gaan nu onze draaitabel afmaken.
Sleep het veld Plaats naar het rijgebied en Weken uit Vertrekdatum
per week naar het kolomgebied. We willen immers de gegevens per
week hebben.
Sleep de velden Aantal volwassenen, Aantal kinderen en Totaal
naar het detailgebied.
De kolommen en rijen zijn nu bepaald. De gegevens die we op de
kruispunten van de rijen en kolommen willen zien in een spread-
sheet cellen genaamd zijn in het detailgebied geplaatst. We laten
het ltergebied nog even voor wat het is; we komen hier later op
Figuur 6.37
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
188
terug. Het aantal volwassenen, kinderen en totaal aantal personen
per plaats per week wordt getoond, zie guur 6.38.
Als in een bepaalde week verschillende reizen zijn geboekt naar
een bepaalde plaats, worden alle gegevens in de rij/kolom
getoond. Zie bijvoorbeeld de plaats Gites of Rabat in week 19 in
guur 6.38. Wij zijn niet genteresseerd in de detailgegevens maar
in de totalen daarvan. We willen namelijk per plaats, per week het
totaal aantal volwassenen, kinderen en totaal aantal personen
weten dat op vakantie gaat.
Klik op Aantal volwassenen. Alle rij/kolomcombinaties waarin een
waarde staat, worden lichtblauw gekleurd.
Klik in de draaitabelwerkbalk op de knop () AutoBerekenen en
selecteer Som of selecteer die in het snelmenu (rechtermuisknop).
Er komt per plaats een extra rij bij met hierin het gesommeerde
aantal volwassenen.
Voer hetzelfde uit voor de velden Aantal kinderen en Totaal.
We kunnen nu de detailgegevens verbergen, zodat alleen de tota-
len overblijven. Dit kan per plaats, door op het minknopje van een
plaats te klikken, of voor alle plaatsen tegelijk. Wij kiezen voor de
laatste mogelijkheid.
Selecteer Plaats en klik in de werkbalk van de draaitabel op de
knop Details verbergen of direct in het snelmenu. Het voorlopige
resultaat staat in guur 6.39 afgebeeld.
Figuur 6.38
Copyright 2007 Academic Service
6 Uitgebreide formulieren
189
Merk op dat voor de veldnamen Som van is toegevoegd en dat de
veldenlijst is uitgebreid met Totalen. Hierin zitten onze drie nieuwe
veldnamen, zie guur 6.39. De veldenlijst is zichtbaar te maken
door deze in het snelmenu te selecteren. Verder is te zien dat per
kolom en per rij een Eindtotaal wordt weergegeven.
Als laatste gaan we het ltergebied gebruiken. Indien we gegevens
in de draaitabel willen lteren, kunnen we het veld waarmee we
willen lteren naar het ltergebied slepen.
Sleep uit de veldenlijst het veld Land naar het ltergebied. Er ver-
andert in eerste instantie niets. Na het slepen wordt namelijk nog
niet gelterd, alles wordt getoond.
Klik op het pijltje naast het veld Land, verwijder het vinkje bij
Alles en plaats vervolgens een vinkje bij Spanje. Hierdoor wordt er
gelterd op het land Spanje en worden alleen de reizen naar Spanje
getoond.
Door verschillende vinkjes te zetten kunnen meer landen getoond
worden of juist alle door het vinkje bij Alles te zetten. Merk op
dat indien gelterd wordt op bijvoorbeeld Spanje, alleen de weken
worden getoond waarin er reizen naar Spanje zijn. De draaitabel
wordt hierdoor zo compact mogelijk gehouden. Als je toch alle
rij/kolomcombinaties wilt zien, dan kun je een eigenschap van de
draaitabel aanpassen. Dit wordt later toegelicht. Verder kun je nog
de eigenschappen van een draaitabel veranderen.
Figuur 6.39
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
190
Kies in de draaitabel Som van Aantal volwassenen en activeer het
eigenschappenvenster door op de knop Eigenschappen te klikken
of via het snelmenu.
Verander in het tabblad Bijschriften het bijschrift Som van Aantal
volwassenen in Tot. volwassenen. Klik vervolgens in de draaitabel
op het veld Som van Aantal kinderen en verander het bijschrift
hiervan in Tot. kinderen.
Voer dit ook uit voor Som van Totaal en maak het bijschrift Totaal.
Er zijn nog meer mogelijkheden, zo kun je bijvoorbeeld in het
tabblad Opmaak het geselecteerde veld laten sorteren of vet weer-
geven.
Sluit het eigenschappenvenster. Het eindresultaat wordt getoond,
zie guur 6.40.
Sla het formulier op onder de naam Draaitabel voorbeeld.
Enige opmerkingen over draaitabellen:
Als een draaitabel in ontwerpweergave wordt geplaatst, toont
Access een standaardformulier met hierin alle velden. De basis
van een draaitabel is namelijk een formulier. Om te wisselen van
formulierontwerp naar draaitabel kun je gebruikmaken van het
snelmenu (rechtermuisknop) of van de knop Beeld op de werkbalk.
Het kan voorkomen dat niet alle velden uit de gemaakte query te
selecteren zijn in de veldenlijst van de draaitabel. Hoe komt dat
en hoe kunnen we dit oplossen? De Wizard Draaitabellen maakt
automatisch van de gemaakte query een standaardformulier. Dit
formulier wordt hierna getoond in de draaitabelweergave. Het
Figuur 6.40
Copyright 2007 Academic Service
6 Uitgebreide formulieren
191
probleem zit in het automatisch gemaakte formulier. In dit for-
mulier kan de wizard automatisch enkele subformulieren hebben
gemaakt. Maar in de veldenlijst van de draaitabel worden alleen
velden uit het hoofdformulier getoond en niet de velden uit het sub-
formulier. De wizard van de draaitabellen werkt dus niet optimaal.
Indien dus niet alle velden uit de gemaakte query getoond worden,
kun je geen gebruik maken van de wizard. Ga in dat geval naar
het overzicht Formulieren en klik op de knop Nieuw. Selecteer
Ontwerpweergave, kies in de keuzelijst voor de gemaakte query
en klik op OK. Sleep vervolgens alle velden uit de Lijst met velden
naar de sectie Details van het formulier. Wijzig vervolgens de
eigenschap Standaardweergave van het formulier in Draaitabel.
De gegevens in een draaitabel zijn dynamisch: wijzigingen in de
tabellen worden direct doorgevoerd in de draaitabel. Boekingen
naar Spanje zullen in onze draaitabel dus direct zichtbaar zijn.
De velden die al geselecteerd zijn in de draaitabel worden in de
Lijst met draaitabelvelden vet weergegeven. Uit de veldenlijst kun
je ook velden verwijderen (rechtermuisknop) of toevoegen aan de
draaitabel zonder te slepen. Selecteer een veld en kies onder in het
venster naar welk gebied het veld verplaatst moet worden. Klik
vervolgens op Toevoegen.
Je kunt de geselecteerde velden in de draaitabel eenvoudig versle-
pen om een andere lay-out te krijgen, bijvoorbeeld door de rijen en
kolommen te wisselen. Ook kun je verschillende velden in het rij-
of kolomgebied plaatsen. Zo kun je bijvoorbeeld het veld Land ver-
plaatsen van het ltergebied naar het rijgebied. Indien je het sleept
vr het veld Plaats, worden automatisch de plaatsen bij de landen
geplaatst. Hiermee kunnen ook weer allerlei subtotalen en totalen
worden getoond.
Naast de eigenschappen van het detailgebied kun je ook de eigen-
schappen van de overige gebieden aanpassen. Je kunt bijvoorbeeld
het bijschrift Plaats veranderen in Plaatsnaam. Ook de draaitabel
zelf heeft eigenschappen die aangepast kunnen worden. Klik daar-
toe in een leeg gebied van de draaitabel. Zo kun je bijvoorbeeld de
bijschriften van de gebieden veranderen. Het ltergebied in een
draaitabel is optioneel. Stel je maakt een draaitabel waarin een
ltergebied niet gewenst is, dan blijft in het ltergebied de tekst
Filtervelden hier neerzetten staan. Je kunt die tekst dan verwijde-
ren. Ook kun je ervoor zorgen in het tabblad Rapport dat lege
rijen en kolommen toch getoond worden.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
192
De Wizard Draaitabellen geeft een beperkte ondersteuning. Je
kunt ook direct kiezen in het overzicht Formulieren voor Nieuw,
Autoformulier: draaitabel. Selecteer in de keuzelijst de toe te pas-
sen query, en de draaitabel en lijst met velden worden direct
getoond. Ook hier kan het probleem van het genoemde tweede
punt optreden.
Draaigrafieken
Hiermee kunnen op eenvoudige wijze graeken van de gegevens
uit een query of formulier getoond worden. De verschillende
gegevens uit een formulier kunnen snel verplaatst worden naar
de verschillende gebieden van de draaigraek. Hierdoor is het
niet noodzakelijk om voor verschillende graeken, verschillende
formulieren of rapporten te maken. Je kunt ook snel wisselen tus-
sen een draaitabel en een draaigraek. Hierdoor kunnen gegevens
in tabel- of graekvorm worden weergegeven. We zullen twee
voorbeelden uitwerken, een draaigraek maken op basis van een
query en een bestaande draaitabel als draaigraek tonen. We be-
ginnen met een draaigraek vanuit een query op te bouwen, zodat
de verschillende gebieden van een draaigraek toegelicht kunnen
worden.
We willen per land, per week het aantal boekingen in graekvorm
weergeven. Dit moet ook nog per werelddeel uitgesplitst kunnen
worden.
Maak een nieuwe query zoals in guur 6.41 is weergegeven en sla
deze op onder de naam Draaigraek voorbeeld.
Kies vervolgens in het overzicht Formulieren voor Nieuw,
Autoformulier: draaigraek, selecteer in de keuzelijst de zojuist
gemaakte query Draaigraek voorbeeld en klik op OK. Er wordt
een nieuw draaigraekformulier getoond, zie guur 6.42.
Er zijn vier gebieden waarin de geselecteerde velden geplaatst kun-
nen worden: categorie-, reeks-, gegevens- en ltergebied. Er kun-
nen verschillende graektypen gepresenteerd worden. Standaard
wordt een kolomdiagram getoond.
Sleep het veld Land naar het categoriegebied.
Sleep het veld Boekingnummer naar het gegevensgebied.
Copyright 2007 Academic Service
6 Uitgebreide formulieren
193
Direct wordt daar getoond Som van Boekingnummer. In het ge-
gevensgebied wordt samengevatte informatie getoond. Standaard
wordt op numerieke velden de functie Som toegepast en op tekst-
of datumvelden de functie Aantal. Aangezien Boekingnummer
een numeriek veld is, wordt hiervan de som getoond. Wij moeten
de boekingnummers tellen om het aantal boekingen per land te
bepalen. De nummers moeten dus niet gesommeerd worden, maar
geteld.
Selecteer Som van Boekingnummer en kies uit de draaigraek-
werkbalk Autoberekenen, Aantal of selecteer die optie via het snel-
menu. Het voorlopige resultaat het totaal aantal boekingen per
land wordt getoond in guur 6.43, zonder veldenlijst.
Figuur 6.41
Figuur 6.42
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
194
Merk bovendien op dat niet alle gebieden noodzakelijk zijn. Indien
het aantal boekingen per land gewenst is, is deze graek voldoen-
de. Wij gaan nu de graek verder volmaken. Zorg dat de veldenlijst
zichtbaar is (snelmenu).
Sleep uit de veldenlijst de optie Weken, uit Vertrekdatum per week,
naar het reeksgebied.
Kies in de menubalk voor Draaigraek, Legenda weergeven of
selecteer deze uit de werkbalk van de draaigraek. Zonder legenda
is het heel onduidelijk wat het reeksgebied heeft toegevoegd. In een
kolomdiagram wordt het reeksgebied weergegeven door de kleur
van kolommen en de namen van de weken. Nu is duidelijk te zien
dat per land, per week het totaal aantal boekingen wordt getoond.
Sleep uit de veldenlijst het veld Werelddeel naar het ltergebied.
Vouw het werelddeel open, verwijder het vinkje bij Alles en plaats
een vinkje bij West-Europa. We hebben nu een lter geplaatst op
het werelddeel.
Merk op dat als naar bepaalde landen geen boekingen zijn, deze
ook niet getoond worden. Hetzelfde geldt voor de weken. Indien
er in een bepaalde week geen boekingen zijn, wordt die week ook
niet getoond. In de eigenschappen van de draaigraek kunnen we
dat eventueel ongedaan maken, zoals toegelicht bij draaitabellen.
We gaan de assen van de graek een passend bijschrift geven.
Figuur 6.43
Copyright 2007 Academic Service
6 Uitgebreide formulieren
195
Selecteer de horizontale-astitel en plaats het eigenschappenvenster
via de werkbalk van de draaigraek of het snelmenu.
Verander in het tabblad Opmaak het bijschrift in Landen.
Maak van de verticale-astitel Aantal boekingen.
Klik in het witte gebied van de graek en maak het eigenschap-
penvenster actief. We gaan daar een titel boven de graek plaatsen.
Klik op de knop Titel toevoegen.
Selecteer het titelgebied, verander in het tabblad Opmaak het bij-
schrift in Aantal boekingen per land en maak die tekst vervolgens
vet. Het eindresultaat wordt getoond in guur 6.44.
Sla het formulier op onder de naam Draaigraek voorbeeld.
In het tweede voorbeeld van een draaigraek gaan we de eerder
gemaakte draaitabel weergeven als draaigraek.
Open in het overzicht Formulieren de draaitabel Draaitabel voor-
beeld. Deze moet getoond worden zoals weergegeven in guur
6.40.
Kies in de menubalk Beeld, Weergave Draaigraek of doe dit via
het snelmenu van de draaitabel (eerst de blauwe menubalk van de
draaitabel selecteren). Direct wordt een draaigraek van de draai-
tabel getoond.
Zorg ervoor dat de legenda zichtbaar wordt en verander de astitels
in Plaatsen en Aantal personen, zie guur 6.45.
Figuur 6.44
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
196
De legenda van het reeksgebied is niet duidelijk. Nu hebben we
nog gelterd op Spanje, maar als je alle landen laat zien dan is het
overzicht niet echt overzichtelijk. We kunnen dit verbeteren door
een graek per week te laten zien.
Kies uit de menubalk Draaigraek, Meerdere graeken of selecteer
deze optie uit de werkbalk van de draaigraek. Er komt een extra
gebied bij waarin we per selectie meerdere graeken krijgen.
Verplaats de veldknop Weken naar het nieuwe gebied. We krijgen
nu per week een graek te zien, zie guur 6.46.
Figuur 6.45
Figuur 6.46
Copyright 2007 Academic Service
6 Uitgebreide formulieren
197
De instellingen van de draaigraek worden automatisch opgesla-
gen bij het formulier van de draaitabel. Als je later de draaitabel
opent en je toont vervolgens de draaigraek hiervan, dan worden
de zojuist gemaakte instellingen weergegeven.
Enige opmerkingen over draaigraeken:
Het is mogelijk om direct vanuit een formulier een draaigraek te
creren. Plaats het formulier in de ontwerpweergave. Selecteer het
formulier door de blauwe menubalk te selecteren en kies vervol-
gens in het snelmenu voor Weergave Draaigraek.
Kies bij een nieuw formulier niet voor Wizard graeken. Hiermee
wordt namelijk een graek gemaakt via MS Graph.
Je kunt verschillende typen graeken selecteren. Via de werkbalk
van de draaigraek of via het snelmenu. Hierbij dient opgemerkt
te worden dat per type graek niet alle gebieden voorkomen. Zo is
bijvoorbeeld bij een cirkeldiagram het reeksgebied niet aanwezig.
De reeksgegevens wisselen met de categoriegegevens kan via de
menubalk Draaigraek, Op rij/op kolom of via die knop op de
werkbalk.
Naast het ltergebied kun je ook in het categorie- en reeksgebied
selecties maken. Zo is het mogelijk om bijvoorbeeld een beperkt
aantal landen of weken te selecteren in ons voorbeeld.
Verder geldt dat de eigenschappen van de draaigraek en de diver-
se gebieden aangepast kunnen worden, zoals toegelicht bij draai-
tabellen.
Opgave
6.7 a. Maak de draaitabel zoals weergegeven in guur 6.47. In het
ltergebied is week 20 geselecteerd.
b. Maak de draaigraek zoals weergegeven in guur 6.48
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
198
Databaseontwikkeling 4 Access 2003
198
6.8 Webpaginas
Zoals eerder besproken in paragraaf 5.12 is het in Access mogelijk
paginas te ontwerpen waarmee gegevens uit de database op het
World Wide Web getoond en gemuteerd kunnen worden.
In deze paragraaf zal worden besproken hoe gegevens uit meerdere
tabellen kunnen worden gepresenteerd. We zullen daarbij steeds
gebruikmaken van de wizard. Hoewel het ook mogelijk is om de
Figuur 6.47
Figuur 6.48
Copyright 2007 Academic Service
6 Uitgebreide formulieren
199
door Access gegenereerde HTML-code direct te bewerken, zullen
wij dat niet doen omdat dit buiten het bestek van het boek valt.
We ontwerpen een pagina waarmee via het web van iedere klant
alle reizen kunnen worden weergegeven.
Kies in het databasevenster het overzicht Paginas.
Selecteer de optie Data Access-pagina maken met wizard.
De wizard doorloopt een aantal stappen die we bij eerdere gelegen-
heden ook al zijn tegengekomen. Als eerste wordt gevraagd uit
welke tabellen welke gegevens moeten worden opgenomen.
Selecteer eerst uit de tabel Klant alle velden, vervolgens uit de
tabel Boeking de Boekdatum, uit de tabel Reis de Vertrekdatum en
ten slotte uit de tabel Bestemming de gegevens Plaats en Land, zie
guur 6.49.
In het volgende scherm van de wizard kan worden opgegeven op
welke manier we wensen te groeperen.
We willen per klant de reizen zien; kies voor groeperen op basis
van het klantnummer, zie guur 6.50.
Hierna kunnen we opgeven in welke volgorde de gegevens van een
klant moeten worden getoond. Wij willen per klant de reizen gepre-
senteerd krijgen in volgorde van vertrekdatum.
Figuur 6.49
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
200
Selecteer het veld Vertrekdatum, zie guur 6.51.
Geef in het laatste scherm van de wizard de pagina een naam:
Boekingen per klant.
We kunnen in dit laatste scherm ook opgeven of we de pagina
direct willen activeren of dat we eerst nog de opmaak willen wij-
zigen. In het laatste geval kunnen we ook een thema opgeven.
Hiermee bepalen we in grote lijnen de standaardopmaak van de
pagina.
Kies ervoor om de pagina te voorzien van een thema. We kiezen er
hiermee dus ook voor om de pagina direct te wijzigen, zie guur
6.52.
Figuur 6.50
Figuur 6.51
Copyright 2007 Academic Service
6 Uitgebreide formulieren
201
Hierna wordt direct het scherm getoond waarin het thema kan
worden opgegeven.
Wij hebben gekozen voor het toepasselijke thema Strand, zie
guur 6.53. Mochten de standaardthemas niet voldoende zijn,
dan kun je via internet vast een geschikt thema vinden.
Figuur 6.52
Figuur 6.53
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
202
Sluit na het selecteren van het thema het scherm met behulp van de
knop OK. We komen in het scherm waarin de pagina kan worden
gewijzigd.
Sluit dit scherm af, want we willen eerst eens zien hoe de pagina
getoond gaat worden. Access vraagt de naam waaronder het be-
stand moet worden opgeslagen. Bedenk dat de zojuist ontworpen
pagina gn onderdeel is van de database, maar als een apart htm-
bestand op schijf wordt opgeslagen.
De zojuist ontworpen webpagina kunnen we op twee manieren
bekijken. We kunnen de pagina vanuit Access activeren, maar ook
vanuit een willekeurige webbrowser. In het laatste geval kunnen
we het beste in de Windows Verkenner dubbelklikken op het pic-
togram dat voor de naam van de zojuist ontworpen pagina staat.
Hierdoor wordt automatisch de standaardbrowser opgestart en de
betreffende pagina wordt opgeslagen. Er volgt nog een melding
dat we voor de bestandsnaam geen UNC-code (Universal Naming
Convention) hebben toegepast en dat daardoor bij het publiceren
waarschijnlijk de gegevens niet gevonden kunnen worden. Negeer
die opmerking. Bij het publiceren moeten we wel de naam veran-
deren. Met een UNC kunnen we een bestand onafhankelijk van het
type computer zoeken. In plaats van een stationsaanduiding en pad
geef je de UNC-naam op. De syntax hiervoor is: \\Servernaam\
share\pad\bestand, bijvoorbeeld \\Pegasus\Gedeeld\Access2003\
Reisbureau.mdb. Je kunt deze later wijzigen in het venster Lijst
met velden door op de knop Eigenschappen voor paginaverbinding
te klikken.
In het overzicht Paginas is een snelkoppeling te zien naar onze
webpagina.
Open deze webpagina. We zien dat het resultaat in eerste instantie
nogal tegenvalt, zie guur 6.54.
We zien een nummer met als bijschrift Klantnummer en daaronder
een navigatiebalk. Met de navigatieknoppen kunnen we door de
klantnummers lopen. Door op de uitvouwknop te klikken (de knop
met het plusteken naast Klantnummer) worden er meer gegevens
van de betreffende klant getoond. Als de klant meer dan n reis
heeft geboekt, kunnen we met behulp van de tweede navigatiebalk
door de afzonderlijke reizen van de geselecteerde klant lopen. Echt
fraai is het echter nog niet, zie guur 6.55.
Copyright 2007 Academic Service
6 Uitgebreide formulieren
203
We zullen minimaal twee verfraaiingen aanbrengen. Allereerst
moeten de getoonde teksten worden aangepast. Daarnaast willen
we niet alleen het nummer van de klant steeds op het scherm heb-
ben, maar ook de NAW-gegevens. Plaats daartoe de pagina in ont-
werpweergave, zie guur 6.56.
Allereerst plaatsen we alle klantgegevens bij elkaar in de sectie
Koptekst: Bestemming-Klantnummer, waardoor deze altijd in beeld
blijven. Hierdoor wordt het navigeren door de klanten aanzienlijk
overzichtelijker. Om dit te kunnen doen moet er in de koptekst
meer ruimte worden gemaakt.
Figuur 6.54
Figuur 6.55
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
204
Klik nmaal op de balk van de sectie Koptekst: Bestemming-
Klantnummer. Het gebied dat bij de koptekst behoort wordt nu
gemarkeerd. Met de muis kunnen we dit gebied groter maken door
het naar beneden toe te verlengen.
Verplaats de klantgegevens naar de bovenste koptekst: sleep de
betreffende velden naar het bovenliggende gebied. Tip: door de
witte tekst te verslepen wordt automatisch het begeleidende label
meegenomen. Bovendien kun je de Shift-toets ingedrukt houden
bij het selecteren of een kader om de velden slepen, zodat je in n
keer alle velden kunt verplaatsen.
Na het verslepen verandert wel de tekst in de labels.
Selecteer een label Groep Van Naam: en klik vervolgens opnieuw
in het label. Herstel de tekst in Naam:. Voer hetzelfde uit voor het
andere label, zie guur 6.57.
Je kunt ook het label selecteren en vervolgens het eigenschappen-
venster actief maken. Selecteer het tabblad Overige en wijzig de
eigenschap InnerText in de gewenste waarde. Merk op dat ook in
de Nederlandstalige versie de eigenschapnamen in het Engels zijn.
Figuur 6.56
Copyright 2007 Academic Service
6 Uitgebreide formulieren
205
Hierna ontstaat het overzicht zoals weergegeven in guur 6.57. Let
er daarbij op dat we de postcode en woonplaats direct achter elkaar
hebben geplaatst en het begeleidende label postcode hebben weg-
gelaten.
Om snel het resultaat te zien, kunnen we op de knop Beeld in de
werkbalk klikken. Door nog een keer op de knop te klikken keren
we weer terug in het ontwerpscherm, waar we de overige velden
hergroeperen door ze te verslepen. Verklein de ruimte van de sec-
tie Koptekst: KlantWiz door op de balk van die sectie te klikken
en vervolgens de onderkant van het getoonde gebied naar boven te
verslepen. Ook de lengte van het veld Klantnummer is verkleind,
zie guur 6.58.
Verder passen we de teksten in de beide navigatiebalken aan.
Selecteer in de navigatiesectie KlantWiz in de navigatiebalk alleen
de tekst KlantWiz |0 van |2. Let op, niet de hele navigatiebalk!
Figuur 6.57
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
206
Activeer het eigenschappenvenster en verander de eigenschap
RecordsetLabel in de tab Gegevens in de door ons gewenste tekst
Selecteer een boeking.
Verander op dezelfde manier de tekst Bestemming-Klantnummer |0
van |2 in de tweede navigatiebalk in Selecteer een klant.
Ten slotte plaatsen we nog een duidelijke tekst boven in de pagina,
door nmaal te klikken en vervolgens de gewijzigde tekst in te
voeren: Overzicht boekingen. Hierna bekijken we het resultaat, zie
guur 6.59.
Het ontwerp zoals we dat nu hebben, heeft de vervelende eigen-
schap dat we bij iedere klant opnieuw de gegevens moeten open-
klappen om ook de reisgegevens te zien. Bovendien zien we slechts
n reis tegelijkertijd. Wat we eigenlijk zouden willen, is dat stan-
daard bij iedere klant direct alle reizen worden getoond. Daartoe
passen we het ontwerp op de volgende manier aan.
Groepeer de gegevens door deze te verslepen naar de posities zoals
die in guur 6.60 staan afgebeeld. Daarbij zijn de begeleidende tek-
sten van de reis als kopjes n niveau hoger geplaatst en de gegevens
van een reis horizontaal op n regel. Verplaats hierbij eerst het veld
en daarna het label, anders schuift het label mee met het veld.
Figuur 6.58
Copyright 2007 Academic Service
6 Uitgebreide formulieren
207
Figuur 6.59
Figuur 6.60
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
208
Klik met rechtermuisknop op de sectie Koptekst: Bestemming-
klantnummer en selecteer Eigenschappen van groepeerniveau. Er
verschijnt een venster waarin we de groepeereigenschappen van de
sectie kunnen aanpassen, zie guur 6.61.
Wijzig de eigenschap ExpandedByDefault in Waar. Hierdoor wordt
de detailsectie standaard uitgevouwen.
Activeer op dezelfde manier Eigenschappen van groepeerniveau
van de sectie Koptekst: KlantWiz.
Wijzig de eigenschap DataPageSize in Alles. Hierdoor worden alle
boekingen tegelijk getoond. Zou je daar 5 invoeren, dan worden
vijf boekingen tegelijk getoond.
Hierna bekijken we het resultaat en zien een overzicht dat aanzien-
lijk in waarde gewonnen heeft, zie guur 6.62.
We kunnen nog de laatste verfraaiingen aanbrengen door de knop
waarmee de gegevens kunnen worden uitgevouwen van de pagina
te verwijderen. Deze heeft geen nut meer, alle klantgegevens wor-
den nu
immers getoond. Hetzelfde geldt voor de navigatiebalk in de sectie
Koptekst: KlantWiz. Deze kan verwijderd worden omdat altijd alle
boekingen van de klant worden getoond.
Selecteer de uitvouwknop naast Klantnummer en druk op de
Delete-toets van het toetsenbord.
Figuur 6.61
Copyright 2007 Academic Service
6 Uitgebreide formulieren
209
Klik met de muisaanwijzer op de balk Navigatie: KlantWiz en
druk op de Delete-toets van het toetsenbord. We eindigen met het
volgende overzicht, zie guur 6.63.
Nog een opmerking over Webpaginas: ga niet met Access zwoe-
gen om een webpagina te maken, tenzij gegevens uit een database
Figuur 6.62
Figuur 6.63
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
210
gelinkt moeten worden. Andere toepassingen zoals FrontPage of
DreamWeaver kunnen dat veel beter en eenvoudiger.
Ontwerp de pagina zoals die in guur 6.64 staat weergegeven.
Daarin worden per bestemming de reizen getoond. Let erop dat in
de navigatiebalk de besturingspictogrammen die toch niet gebruikt
kunnen worden achterwege gelaten zijn. Dit is bereikt door de
individuele knoppen te selecteren met de Shift-toets ingedrukt
en vervolgens in het eigenschappenvenster in het tabblad Opmaak
de eigenschap Display de waarde None te geven.
Figuur 6.64
Copyright 2007 Academic Service
7 Uitgebreide rapporten
Bij de bovenstaande opsomming gaan wij ervan uit dat de leer-
lingen een case uitwerken waarbij de docent/begeleider de rol van
opdrachtgever/gebruiker speelt.
Een rapport kunnen we geheel vanaf het begin met de hand ont-
werpen. Verstandiger is het echter om met de Wizard een eerste
opzet te laten genereren en het gegenereerde rapport met de hand
verder aan te passen en te detailleren. In dit hoofdstuk werken we
hiervan een aantal voorbeelden uit. In de voorbeelden zijn de over-
zichten afgedrukt op een HP Laserjet 5000. Als een andere printer
is aangesloten en ingesteld, kan de lay-out van de overzichten iets
afwijken van de getoonde overzichten in dit boek.
7.1 Rapport zonder duplicaten
We gaan een eenvoudig voorbeeld uitwerken waarbij een bestem-
minglijst wordt getoond op volgorde van werelddeel, bij gelijk
werelddeel op land en bij gelijk land op volgorde van plaats, zie
guur 7.1.
Selecteer het overzicht Rapporten van de database Reisbureau,
kies Rapport maken met wizard en selecteer in het eerste venster
de tabel Bestemming.
Selecteer de velden in de volgorde zoals in guur 7.2 is afge-
beeld, dus eerst Werelddeel, dan Land, Plaats en vervolgens
Bestemmingcode.
In het volgende scherm wordt gevraagd of er groepeerniveaus
gewenst zijn. Dat is niet noodzakelijk, ga direct naar het volgende
scherm.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
212
In dit scherm kunnen we de sorteervolgorde opgeven. Kies eerst
een volgorde op Werelddeel, vervolgens op Land en ten slotte op
het veld Plaats, zie guur 7.3. Hierdoor wordt eerst gesorteerd op
Figuur 7.1
Figuur 7.2
Copyright 2007 Academic Service
7 Uitgebreide rapporten
213
werelddeel, bij gelijk werelddeel op volgorde van land en bij gelijk
land op volgorde van plaats.
Geef in het scherm dat hierna verschijnt op hoe het rapport opge-
maakt moet worden. Kies voor de indeling In tabelvorm en Staand.
Geef in het volgende scherm een stijl (proel) van het rapport op.
Van iedere stijl wordt een voorbeeld getoond. Selecteer het
opmaakproel Vet.
Kies in het voorlaatste scherm de titel Bestemming per werelddeel
en voltooi het rapport. Er wordt direct een voorbeeld van het rap-
port op het scherm getoond, zie guur 7.4.
We zien dat het rapport de informatie toont, echter niet in de
vorm zoals weergegeven in guur 7.1. Als er tien bestemmingen
in Afrika zijn, wordt ook tien keer onder elkaar het woord Afrika
afgedrukt. We willen dat de duplicaten (dubbelen) niet worden ge-
toond. Hiervoor zullen we het rapport handmatig gaan aanpassen.
Het rapport moet in de ontwerpweergave worden geplaatst.
Selecteer daartoe Ontwerpweergave in het menu Beeld of klik op
de knop Beeld. Het rapport wordt nu getoond in de ontwerpweer-
gave, zie guur 7.5.
We kunnen een rapport ook vanuit het databasescherm in de ont-
werpweergave plaatsen door het overzicht Rapporten te selecteren.
Markeer het betreffende rapport en klik op de knop Ontwerpen.
Figuur 7.3
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
214
We zien dat het rapport in een aantal secties is onderverdeeld. Een
overzicht van de gebieden:
Rapportkoptekst De hier getoonde gegevens worden eenmalig
aan het begin van het rapport afgedrukt.
Figuur 7.4
Figuur 7.5
Copyright 2007 Academic Service
7 Uitgebreide rapporten
215
Paginakoptekst Deze gegevens worden boven aan iedere blad-
zijde afgedrukt, de zogenoemde koptekst.
Detail Hier worden de echte gegevens afgedrukt.
Paginavoettekst Deze voettekst wordt onder aan iedere pagina
getoond.
Rapportvoettekst De eenmalige afsluiting van het rapport, vaak
gebruikt om eindtotalen op te nemen.
De kop- en voetteksten van de paginas en van het rapport zelf
kunnen we verwijderen of toevoegen door in het menu te kiezen
voor Beeld en vervolgens de betreffende kop-/voetteksten wel of
niet aan te vinken. De kop- en voetteksten in ons rapport zijn goed,
dus verwijderen we ze niet. Merk verder op dat de rapportvoettekst
niet gebruikt is, er wordt dus niets extras afgedrukt nadat het
gehele rapport is afgedrukt.
De aanpassing die in het rapport uitgevoerd moet worden, is het
niet tonen van de duplicaten.
Selecteer in de detailsectie het veld Werelddeel. Kies in het menu
Beeld, Eigenschappen of klik direct op de knop Eigenschappen, zie
guur 7.6.
Hiermee kunnen we de eigenschappen van een geselecteerd object
aanpassen. We kunnen onder andere de opmaak bijvoorbeeld het
Figuur 7.6
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
216
lettertype of de kleur van de tekst, kader of achtergrond aanpas-
sen.
Selecteer het tabblad Opmaak en verander vervolgens Duplicaten
verbergen in Ja. Hierdoor worden duplicaten van het veld
Werelddeel niet meer afgedrukt.
Controleer de werking door in het menu te kiezen voor Beeld,
Afdrukvoorbeeld of door op de knop Beeld te klikken. De duplica-
ten worden bij het veld Werelddeel niet meer getoond.
Om het rapport af te maken moeten we ook de eigenschappen van
het veld Land in het rapport op identieke wijze aanpassen. Plaats
daartoe het rapport in de ontwerpweergave en selecteer vervolgens
het veld Land in de detailsectie.
Plaats de eigenschappen van dit veld op het scherm en verander in
het tabblad Opmaak de eigenschap Duplicaten verbergen in Ja.
Controleer het rapport als afdrukvoorbeeld. Het rapport is voltooid.
In veel rapporten komen duplicaten voor, die meestal niet worden
getoond. We hebben nu geleerd om die duplicaten op eenvoudige
wijze te verwijderen.
7.2 Rapport met groepen
Het komt vaak voor dat we in rapporten groepen willen onder-
scheiden. Een groep is een verzameling gegevens met een gemeen-
schappelijk kenmerk. Veel managementinformatie wordt op die
manier gemaakt. Het is compacte, gegroepeerde informatie die
vaak wordt toegepast in managementinformatiesystemen (MIS).
We zullen dit aan de hand van twee voorbeelden toelichten. In
guur 7.7 worden de klanten per woonplaats getoond.
Bij iedere woonplaats worden de klanten uit die woonplaats afge-
drukt. De plaatsen worden alfabetisch weergegeven. Ook de
namen van de klanten binnen een woonplaats worden alfabetisch
weergegeven. Na een woonplaats wordt het aantal klanten uit die
plaats weergegeven. Uit Abbenbroek, Assen en Dalfsen komt maar
n klant, uit Eindhoven komen twee klanten, enzovoort. Het over-
zicht in guur 7.7 is maar gedeeltelijk weergegeven, maar als uit
een plaats dertig klanten komen, worden die alle dertig binnen die
plaats alfabetisch getoond.
Copyright 2007 Academic Service
7 Uitgebreide rapporten
217
Er wordt per woonplaats een groep klanten afgedrukt. Het ge-
meenschappelijke kenmerk van die groep is dus de woonplaats.
Voor elke nieuwe woonplaats wordt een nieuwe groep gestart.
Hierdoor kunnen we snel door het rapport bladeren om de juiste
woonplaats te zoeken.
Figuur 7.8 toont de reizigers, met hun bestemming, per vertrek-
datum.
Figuur 7.7
Figuur 7.8
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
218
We zien dat per vertrekdatum een groep reizigers wordt weer-
gegeven. Het gemeenschappelijke kenmerk van die groep is dus
de vertrekdatum. Voor elke vertrekdatum wordt een nieuwe groep
gestart, hierdoor kunnen we snel door het rapport bladeren om
een vertrekdatum op te zoeken. De vertrekdatums zijn aopend
gesorteerd. Binnen de groep zijn de reizigers op naam (oplopend)
gesorteerd.
Het grote voordeel van het maken van groepen is dat we voor elke
groep berekeningen kunnen uitvoeren. In het rapport van guur 7.7
wordt het aantal klanten per plaats afgedrukt. In guur 7.8 wordt
het aantal klanten per vertrekdatum weergegeven alsmede het aan-
tal passagiers (aantal volwassenen + aantal kinderen). Ook is het
mogelijk om berekeningen uit te voeren over alle groepen tezamen,
zodat we bijvoorbeeld het totaal aantal klanten kunnen bepalen
van alle woonplaatsen tezamen of het totaal aantal reizigers van
alle getoonde vertrekdatums, zie guur 7.8.
We gaan kijken hoe we de twee getoonde voorbeelden in Access
kunnen maken.
Voorbeeld 1: klanten per woonplaats
We maken een eerste opzet van het rapport met de Wizard, daarna
gaan we handmatige enige cosmetische aanpassingen aanbrengen
om het rapport naar onze persoonlijke smaak aan te passen. Ook
de telling van het aantal klanten per plaats is later toegevoegd.
Kies het overzicht Rapporten en Selecteer Rapport maken met
wizard.
Kies in het eerste venster de tabel Klant en selecteer vervolgens
alle velden door op de knop >> te klikken, zie guur 7.9.
In het volgende venster kunnen we verschillende groepeerniveaus
opgeven. Aangezien we gaan groeperen op woonplaats, markeren
we het veld Woonplaats en klikken we op de knop >, zie guur
7.10.
In het volgende venster van de Wizard kunnen we aangeven hoe de
gegevens gesorteerd moeten worden. We kunnen de detailgegevens
op maximaal vier verschillende velden tegelijkertijd laten sorteren.
Met de knop naast de keuzelijst geven we aan of er oplopend of
aopend gesorteerd moet worden. Selecteer in de keuzelijst het
veld Naam, de sorteervolgorde blijft oplopend.
Copyright 2007 Academic Service
7 Uitgebreide rapporten
219
Geef in het volgende scherm de lay-out van het rapport op: kies
voor Met interval en Staand.
Ken in het voorlaatste scherm een stijl (opmaakproel) aan het
rapport toe. Selecteer de keuze Vet.
Het laatste venster van de Wizard; hierin geven we de titel (naam)
van het rapport op. Kies als naam Klanten per woonplaats en vol-
tooi het rapport. Er wordt direct een voorbeeld van het rapport op
het scherm weergegeven, zie guur 7.11.
Het verkregen rapport lijkt nog niet op het gewenste rapport van
guur 7.7. We moeten het handmatig aanpassen.
Figuur 7.9
Figuur 7.10
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
220
Selecteer in het menu Beeld, Ontwerpweergave of klik direct op de
knop Beeld. Het rapport wordt in de ontwerpweergave getoond, zie
guur 7.12.
Als eerste passen we de sectie Paginakoptekst aan. Zoals te zien is
in het afdrukvoorbeeld of in guur 7.12 wordt de tekst Postcode en
Telefoonnummer niet goed afgedrukt, ze passen niet volledig in de
labelvakjes.
Selecteer in de sectie Paginakoptekst het label Telefoonnummer.
Figuur 7.11
Figuur 7.12
Copyright 2007 Academic Service
7 Uitgebreide rapporten
221
Plaats vervolgens de eigenschappen van het geselecteerde label
op het scherm door te kiezen voor Beeld, Eigenschappen of door
direct op de knop Eigenschappen te klikken. Er verschijnt een ven-
ster met de eigenschappen, zie guur 7.13.
Selecteer het tabblad Opmaak en wijzig de eigenschap Bijschrift in
Telefoonnr. Het Bijschrift is de tekst die getoond wordt in het label.
Hierdoor wordt in de koptekst wat extra ruimte gecreerd.
Maak in de ontwerpweergave de lengte van het label Telefoonnr
aan de rechterkant iets kleiner en verplaats het vervolgens een
stukje naar rechts.
Selecteer het label Postcode en maak het label aan de rechterkant
iets groter, zodat het hele woord postcode leesbaar wordt.
Bekijk het voorlopige resultaat vervolgens als afdrukvoor-
beeld, via de knop Beeld of gebruik het menu door voor Beeld,
Afdrukvoorbeeld te kiezen.
Als het resultaat nog niet volmaakt is, pas dan in de ontwerpweer-
gave de labels opnieuw aan.
Keer terug naar de ontwerpweergave voor de volgende aanpassing.
We zien in de ontwerpweergave een nieuwe sectie Koptekst
(Woonplaats). De gegevens die in die sectie staan, worden aan het
begin van iedere nieuwe groep getoond. In dit voorbeeld dus de
nieuwe woonplaats. Die woonplaats wordt in het rapport van de
Wizard omkaderd afgedrukt. We willen die omkadering verwijde-
ren en ook moet de plaats vet afgedrukt worden.
Figuur 7.13
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
222
Selecteer in de sectie Koptekst (Woonplaats) het veld Woonplaats.
Activeer het venster met de eigenschappen.
Klik op het tabblad Opmaak en verander de eigenschap Randstijl
in Transparant en de eigenschap Tekengewicht in Vet.
Bekijk eventueel het voorlopige resultaat als afdrukvoorbeeld.
Om het geheel wat te verfraaien zijn wat extra lijnen toegevoegd.
In de Paginakoptekst zijn door de Wizard twee lijnen, boven en
onder de kopjes, getrokken. De onderste lijn is niet helemaal zicht-
baar. Door de Koptekst (Woonplaats) iets naar beneden te slepen
wordt die lijn beter weergegeven. Zon zelfde lijn gaan we ook
onder de koptekst afdrukken. Lijnen zijn te trekken door in de
Werkset op de knop Lijn te klikken en vervolgens door klikken en
slepen de lijn te trekken. Aangezien we een zelfde lijn willen trek-
ken als in de paginakoptekst, kunnen we die lijn eenvoudig kopi-
ren en plakken.
Selecteer de lijn uit de Paginakoptekst door erop te klikken.
Kies Bewerken, Kopiren.
Klik met de muis in de sectie Koptekst (Woonplaats) en plak de
lijn erin via Bewerken, Plakken.
Verplaats de gekopieerde lijn vervolgens onder het veld
Woonplaats.
Controleer in het afdrukvoorbeeld het voorlopige resultaat. Het
gaat er al op lijken. Het enige dat we nog moeten toevoegen, is het
tellen van het aantal klanten per woonplaats.
Plaats het ontwerp in de ontwerpweergave.
Kies Beeld, Sorteren en groeperen. Er verschijnt een venster op het
scherm waarmee we het groeperen en sorteren kunnen verjnen,
zie guur 7.14.
Figuur 7.14
Copyright 2007 Academic Service
7 Uitgebreide rapporten
223
Maak in de kolom Veld/expressie kenbaar op welk veld moet
worden gegroepeerd. De Wizard heeft dat al voor ons geregeld, er
wordt gegroepeerd op het veld Woonplaats.
In diezelfde kolom kunnen we ook aangeven waarop we verder
willen sorteren. In de Wizard hebben we al kenbaar gemaakt dat
we per woonplaats willen sorteren op het veld Naam. Ook dat is
in het venster al zichtbaar. Door het bijzondere tekentje voor het
veld Woonplaats wordt onderscheid gemaakt tussen groeperen en
sorteren. In de kolom Sorteervolgorde kunnen we aangeven of er
Oplopend of Aopend gesorteerd moet worden.
Per groep kunnen we vervolgens de volgende eigenschappen
opgeven:
Groepskoptekst bepaalt of de koptekst van de betreffende groep
wel of niet moet worden getoond.
Groepsvoettekst bepaalt of de voettekst van de betreffende groep
wel of niet moet worden getoond.
Groeperen op is bedoeld om op te geven of er op iedere afzonder-
lijke waarde moet worden gegroepeerd of op een andere manier,
bijvoorbeeld op de eerste drie letters van het veld. Bij datumvel-
den kunnen we bijvoorbeeld kiezen voor het groeperen per week,
maand of jaar.
Groepeerinterval is bedoeld om in combinatie met de eigenschap
Groeperen op te bepalen hoe records op een rapport worden
gegroepeerd. De instelling van het groepeerinterval is afhankelijk
van het gegevenstype. Als we groeperen op een datumveld en we
hebben bij Groeperen op gekozen voor de optie Week, zal de
intervalwaarde 2 per twee weken groeperen. Groeperen we op een
tekstveld en we hebben bij Groeperen op geselecteerd Begintekens,
dan wordt er door de intervalwaarde 3 gegroepeerd op de eerste
drie tekens van het veld. De teksten Maleisi, Mali en Malediven
worden dan tot dezelfde groep gerekend, de eerste drie letters zijn
immers gelijk. De standaardwaarde van deze eigenschap is 1.
Bijeenhouden bepaalt welke delen van een groep bijeengehouden
moeten worden op dezelfde pagina. Kiezen we voor Hele groep,
dan wordt de hele groep, inclusief kop- en voetteksten op dezelfde
pagina afgedrukt. Kiezen we voor Met eerste detail, dan wordt de
koptekst alleen afgedrukt als ook het eerste detailrecord op dezelf-
de pagina kan worden afgedrukt. De standaardwaarde is Nee, kop-
en voetteksten worden niet bij elkaar gehouden. Er wordt continu
afgedrukt.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
224
Om het aantal klanten per plaats te tonen moeten we een voettekst
invoeren. De Wizard heeft deze niet voor ons gemaakt. Na iedere
groep worden de gegevens in de voettekst van de groep afgedrukt,
in ons voorbeeld moet daar dus het aantal klanten uit die groep
komen te staan.
Zet de eigenschap Groepsvoettekst op Ja. In het rapport wordt hier-
door een extra sectie gemaakt.
Selecteer bij de eigenschap Bijeenhouden de waarde Met eerste
detail.
Sluit het venster Groeperen en sorteren.
In de nieuwe sectie Voettekst (Woonplaats) moet een tekstvak wor-
den toegevoegd. Kies uit de Werkset het Tekstvak en plaats deze in
de voettekstsectie. Er wordt zowel een label als een tekstvak neer-
gezet.
Selecteer het label en plaats de eigenschappen hiervan op het
scherm.
Verander in het tabblad Opmaak de eigenschap Bijschrift in
Totaal:.
Selecteer vervolgens het tekstvak en kies in het eigenschappen-
venster het tabblad Gegevens.
Voer bij de eigenschap Besturingselementbron de volgende for-
mule in: =Aantal([Klantnummer]). Hierdoor wordt in het rapport
het aantal klanten in de groep geteld.
In dit voorbeeld hebben we gekozen voor het veld Klantnummer
dat wordt geteld, maar ieder ander veld had ook gekozen kunnen
worden. Bijvoorbeeld =Aantal([Adres]) levert hetzelfde resul-
taat op. Hierdoor mogen we ook een joker (wildcard) gebruiken
=Aantal(*).
Veelvoorkomende functies in de kop- en voetteksten zijn:
Som() deze functie sommeert het opgegeven numerieke veld of
expressie, bijvoorbeeld Som([Aantal volwassenen]).
Min() bepaalt de kleinste waarde, bijvoorbeeld
Min([Vertrekdatum]).
Max() doet hetzelfde als Min(), maar dan wordt de grootste
waarde bepaald, bijvoorbeeld Max([Betaald bedrag]).
Gem() bepaalt het gemiddelde van een numeriek veld of expres-
sie, bijvoorbeeld Gem([Aantal volwassenen] + [Aantal kinderen]).
Copyright 2007 Academic Service
7 Uitgebreide rapporten
225
Bekijk het voorlopige resultaat als afdrukvoorbeeld. Wat nog op-
valt, is dat het aantal klanten per plaats een aantal centimeters van
het label Totaal: wordt afgedrukt. Dit is eenvoudig op te lossen.
Keer terug naar de ontwerpweergave en maak het label van Totaal:
zo klein mogelijk.
Sleep het tekstvak met het aantal klanten dicht tegen het label
Totaal: aan.
Selecteer het tekstvak met de telling en activeer het eigenschappen-
venster.
Kies in het tabblad Opmaak de laatste eigenschap Tekstuitlijning
en selecteer hierin de optie Links uitlijnen. Numerieke waarden en
datumvelden worden standaard rechts in het tekstvak uitgelijnd.
Met deze optie kunnen we dat desgewenst aanpassen.
Het rapport is nu bijna af. Selecteer de zojuist gekopieerde lijn uit
de sectie van de koptekst en kopieer deze op de bekende wijze naar
de sectie van de voettekst. Deze wordt nu boven in de voettekst
geplaatst.
Verplaats het label en het tekstvak zodanig dat het links boven in
de sectie van de voettekst komt te staan, net onder de lijn.
Verklein als laatste de sectie van de voettekst door de balk van de
sectie Paginavoettekst omhoog te slepen. Het volledige resultaat is
in guur 7.15 te zien.
Controleer het rapport als afdrukvoorbeeld.
Figuur 7.15
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
226
Voorbeeld 2: Reizigers per vertrekdatum
We gaan opnieuw met de Wizard een eerste opzet maken van het
rapport dat getoond is in guur 7.8. Daarna zijn weer handmatig
enige cosmetische aanpassingen aangebracht. Ook het tellen van
de klanten en het aantal reizigers per groep is later toegevoegd. We
zullen laten zien hoe we het rapport hebben gemaakt.
Als eerste hebben we een query gemaakt waarin alle velden voor-
komen uit het gewenste rapport. In die query zorgen we ervoor dat
voor de vertrekdatum een bereik opgegeven kan worden. Hierdoor
worden alleen de vertrekdatums getoond tussen de opgegeven
datums.
Selecteer het overzicht Querys en kies voor Query maken in ont-
werpweergave.
Selecteer alle tabellen.
Kies vervolgens voor de velden Vertrekdatum uit de tabel Reis,
Naam en Plaats uit de tabel Klant, de velden Plaats en Land uit
de tabel Bestemming en ten slotte uit de tabel Boeking de velden
Aantal volwassenen en Aantal kinderen, zie guur 7.16.
Voer als laatste de voorwaarde in, waarmee we een bereik kunnen
opgeven voor de vertrekdatum. Klik in de rij Criteria van het veld
Vertrekdatum en vul in: >=[Geef startdatum:] And <=[Geef eind-
datum:].
De query is op deze manier exibel gemaakt. Door tussen de vier-
kante haken een vraag te stellen, zal bij het uitvoeren van de query
om een startdatum en een einddatum worden gevraagd. De inge-
voerde datums gelden dan als voorwaarde.
Figuur 7.16
Copyright 2007 Academic Service
7 Uitgebreide rapporten
227
Sla de query op met de naam rptReizigers per vertrekdatum.
Het is handig om een query die voor een rapport wordt gebruikt,
dezelfde naam te geven als het rapport, voorafgegaan door de let-
ters rpt (rapport). We kunnen dan snel zien welke query bij welk
rapport hoort. Nu gaan we het rapport opzetten met de Wizard.
Kies het overzicht Rapporten en selecteer Rapport maken met
wizard.
Kies in het eerste venster van de Wizard de zojuist gemaakte
query rptReizigers per vertrekdatum en selecteer alle velden die
afgedrukt worden in het rapport. Dat zijn alle velden behalve de
velden Aantal volwassenen en Aantal kinderen. Deze velden wor-
den alleen gebruikt om het aantal reizigers per vertrekdatum te
bepalen, zie guur 7.17.
In het volgende scherm van de Wizard wordt gevraagd hoe we het
rapport willen weergeven. Op grond van de relaties en de volgorde
van de opgegeven velden heeft de Wizard zelf al een bepaalde
indeling gemaakt van de verschillende groepeermogelijkheden,
volgens Bestemming, volgens Reis of volgens Klant. We willen
groepen op het veld Vertrekdatum, dat moet dus bovenaan staan.
Kies zodoende voor volgens Reis.
Geef in het volgende scherm extra groepeerniveaus op, zie guur
7.18. Er wordt nu gegroepeerd op Vertrekdatum, Plaats en Land.
Dat heeft de Wizard voor ons bepaald.
Figuur 7.17
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
228
We willen alleen op Vertrekdatum groeperen; selecteer
Vertrekdatum en klik op de knop >. Hierdoor komt het veld
Vertrekdatum bovenaan te staan met als toevoeging volgens
Maand . Standaard wordt namelijk bij datumvelden per maand
gegroepeerd.
We willen echter niet per maand maar per dag groeperen, bij
iedere vertrekdatum willen we de reizigers zien. Klik daartoe op
de knop Opties voor groeperen en verander in de keuzelijst de
groepeeroptie Maand in Normaal, zie guur 7.19. Zie daarbij
tevens alle groepeermogelijkheden voor datumvelden.
Door het selecteren van de vertrekdatum als groepveld is door
de Wizard automatisch een tweede groep gemaakt, namelijk op
Plaats en Land. Dat kunnen we met de Wizard niet corrigeren.
We verbeteren dat nadat de Wizard de opzet van ons rapport heeft
gemaakt.
Figuur 7.18
Figuur 7.19
Copyright 2007 Academic Service
7 Uitgebreide rapporten
229
Ga naar het volgende scherm van de Wizard. Hierin kunnen we
voor de detailsectie opgeven wat de sorteervolgorde moet zijn, zie
guur 7.20.
Selecteer als sorteervolgorde van de detailsectie het veld Naam
(oplopend) en ga naar het volgende scherm.
Kies de gewenste opmaak: selecteer Met interval en Staand.
Geef in het voorlaatste scherm een opmaakproel aan het rapport:
selecteer Vet.
Geef in het laatste venster de titel (naam) Reizigers per vertrek-
datum aan het rapport.
Klik op de knop Voltooien; er wordt om een start- en einddatum
gevraagd. Vervolgens wordt het rapport als afdrukvoorbeeld op het
scherm getoond, zie guur 7.21.
Het rapport voldoet niet geheel aan onze wensen, zie guur 7.8.
We moeten het rapport dat door de Wizard is gemaakt met de hand
wijzigen. We moeten enige cosmetische wijzigingen aanbrengen,
het groeperen op Plaats en Land moet worden verwijderd en er
moet per vertrekdatum geteld worden hoeveel klanten en reizigers
er vertrekken.
Zet het rapport in de ontwerpweergave, zie guur 7.22.
Figuur 7.20
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
230
De Wizard heeft de labels (en de velden) in een andere volgorde
weergegeven dan onze bedoeling is. We willen eerst de naam en
woonplaats van een klant afdrukken en daarachter de plaats van
bestemming en het land. We moeten die labels paarsgewijs ver-
plaatsen.
Selecteer het label Naam en klik op het label Woonplaats van de
klant met de Shift-toets ingedrukt. Hierdoor worden beide labels
geselecteerd.
Figuur 7.21
Figuur 7.22
Copyright 2007 Academic Service
7 Uitgebreide rapporten
231
Versleep ze vervolgens helemaal naar links, over het label
Vertrekdatum heen.
Selecteer op dezelfde manier de labels Plaats van bestemming en
Land en sleep deze naar hun gewenste plaats in de koptekstsectie.
Zet vervolgens de labels Naam en Woonplaats van de klant op hun
gewenste plaats.
Vanzelfsprekend moeten ook de bijbehorende velden op hun
gewenste plaats gezet worden. Maar voor we dat doen, moeten we
iets toelichten over het rapport dat de Wizard heeft gemaakt.
In de ontwerpfase kunnen we zien dat de Wizard twee kopteksten
heeft gecreerd, namelijk: Koptekst (Vertrekdatum) en Koptekst
(Plaats). Dat betekent dat er twee groepeerniveaus zijn. Er wordt
eerst gegroepeerd op het veld Vertrekdatum. Binnen de groep van
een vertrekdatum wordt er doorgegroepeerd op Plaats. Wij willen
alleen groeperen op vertrekdatum en daarbinnen niet nogmaals
op de plaats van bestemming. De Koptekst (Plaats) moet verwij-
derd worden. De velden Plaats en Land mogen echter niet verwij-
derd worden, die moeten immers afgedrukt worden. Ze moeten
verplaatst worden van de sectie Koptekst (Plaats) naar de sectie
Detail. Hierdoor worden ze bij ieder detailrecord afgedrukt, zoals
gewenst.
Selecteer in de sectie Detail, met behulp van Shift+muisklik, tege-
lijkertijd de velden Naam en Woonplaats en sleep deze naar hun
gewenste plaats.
Selecteer in de sectie Koptekst (Plaats) tegelijkertijd de velden
Plaats en Land en sleep deze naar hun gewenste plaats in de sectie
Detail. Het voorlopige resultaat staat in guur 7.23 afgebeeld.
De sectie Koptekst (Plaats) kan nu worden verwijderd. Selecteer
daartoe in het menu Beeld, Sorteren en groeperen of klik direct op
de knop Sorteren en groeperen. Het venster met de verschillende
sorteer- en groepeeropties wordt getoond, zie guur 7.24.
In dit venster is door middel van het symbool voor de eigenschap
Veld/expressie te zien dat er op twee velden wordt gegroepeerd en
dat op het veld Naam in de sectie Detail wordt gesorteerd.
Selecteer door met de muis op het groepeersymbool te klikken, de
rij Plaats.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
232
Druk op de Delete-toets en bevestig de verwijdering.
In het rapport is ook een voettekst per groep noodzakelijk.
Klik daartoe in het venster Groeperen en sorteren op het veld
Vertrekdatum en verander de eigenschap Groepsvoettekst in Ja,
waardoor een nieuwe sectie in het rapport wordt gemaakt.
Wijzig vervolgens in het venster Groeperen en sorteren de sorteer-
volgorde van het veld Vertrekdatum in aopend. Hierdoor worden
de vertrekdatums in het rapport aopend weergegeven en de na-
men van de klanten in de sectie Detail oplopend, zoals gewenst
voor het rapport, zie guur 7.8.
Hiermee zijn alle groepeer- en sorteerwensen vervuld, dus sluit het
venster Groeperen en sorteren.
We moeten nog enige cosmetische wijzigingen doorvoeren. De
landen en de plaatsen van bestemming worden omkaderd weer-
gegeven en de vertrekdatum wordt rechts uitgelijnd.
Figuur 7.24
Figuur 7.23
Copyright 2007 Academic Service
7 Uitgebreide rapporten
233
Zet het rapport in de ontwerpweergave.
Selecteer met Shift+muisklik de velden Plaats en Land.
Zet het eigenschappenvenster op het scherm en verander in het
tabblad Opmaak de eigenschap Randstijl in Transparant, zie guur
7.25.
Selecteer het veld Vertrekdatum, klik op de tab Opmaak en wijzig
de eigenschap Tekstuitlijning in Links. Hierdoor wordt de vertrek-
datum links in het tekstvak weergegeven als het rapport wordt
getoond.
De laatste cosmetische verandering is het plaatsen van extra lijnen
om het rapport overzichtelijk te maken. Aangezien de gewenste
lijnen allemaal hetzelfde zijn, kunnen we door kopiren en plakken
snel de gewenste lijnen in het rapport plaatsen.
Selecteer de bovenste lijn in de Paginakoptekst en kopieer deze op
de bekende manier.
Klik op de balk van de sectie Koptekst (Vertrekdatum) en plak de
lijn erin.
Sleep de gekopieerde lijn naar beneden zodat deze tegen de sectie
Detail komt te liggen.
Selecteer de sectie Voettekst (Vertrekdatum) en plak ook daarin de
zojuist gekopieerde lijn.
Verklein de grootte van de sectie Voettekst (Vertrekdatum) door
de sectie Paginavoettekst tegen de lijn in de sectie Voettekst
(Vertrekdatum) te slepen.
Figuur 7.25
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
234
De onderste lijn in de sectie Paginakoptekst is niet helemaal zicht-
baar.
Versleep de sectie Koptekst (Vertrekdatum) een klein stukje naar
beneden zodat de hele lijn zichtbaar wordt.
Alle cosmetische wijzigingen zijn nu doorgevoerd, zie guur 7.26.
Bekijk als afdrukvoorbeeld het voorlopige resultaat.
Als laatste voegen we de gewenste berekeningen aan het rapport
toe. Er moeten vier berekeningen uitgevoerd worden. Het aantal
klanten per vertrekdatum, het aantal reizigers per vertrekdatum,
het totaal aantal klanten en het totaal aantal reizigers van het
gehele rapport. Hiervoor zijn vier tekstvakken nodig, twee in
de sectie Koptekst (Vertrekdatum) en twee in de sectie Rapport-
voettekst. Die sectie wordt als afsluiting van het rapport afgedrukt
en zodoende vaak gebruikt om eindtotalen op te nemen. Die sectie
staat wel afgedrukt in de ontwerpweergave van het rapport, maar
wordt niet in het afdrukvoorbeeld weergegeven omdat er geen
ruimte voor is vrijgemaakt.
Wijs om deze ruimte te maken met de muis naar de onderkant van
de balk Rapportvoettekst en sleep deze ongeveer n centimeter
naar beneden. De witte achtergrond met het rasterwerk wordt
zichtbaar. Alle benodigde tekstvakken kunnen nu geplaatst wor-
den.
Figuur 7.26
Copyright 2007 Academic Service
7 Uitgebreide rapporten
235
Klik in de Werkset van het rapport op de knop Tekstvak en sleep
en klik het tekstvak in de sectie Koptekst (Vertrekdatum). Hierbij
wordt direct een label gemaakt.
Verplaats het label en het tekstvak zodanig dat het wordt afgedrukt
op de plaats waar het aantal klanten getoond moet worden, zie
guur 7.27.
Klik in het label en plaats het eigenschappenvenster op het scherm.
Verander in het tabblad Opmaak de eigenschap Bijschrift in Aantal
klanten:.
Klik in het bijbehorende tekstvak en verander in het tab-
blad Gegevens de eigenschap Besturingselementbron in:
=Aantal([Land]). Het veld Land wordt geteld, maar ieder veld uit
de sectie Detail had voldaan, aangezien het aantal keren dat een
land (of bestemming) wordt afgedrukt geteld wordt. Hierdoor mag
ook gebruik worden gemaakt van de joker (wildcard) =Aantal(*).
Plaats op identieke wijze nog een label en een tekstvak in deze
sectie. Sleep het naar de gewenste plaats en verander van het
label de eigenschap Bijschrift in Aantal reizigers: en de eigen-
schap Besturingselementbron van het tekstvak in: =Som([Aantal
volwassenen]+[Aantal kinderen]). Hiermee wordt het aantal
reizigers per klant opgeteld. De velden Aantal volwassenen en
Aantal kinderen zijn in de query van het rapport opgenomen, maar
Figuur 7.27
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
236
worden uitsluitend gebruikt om deze optelling mogelijk te ma-
ken. We kunnen ook op de drie puntjes klikken in de eigenschap
Besturingselementbron om de Opbouwfunctie voor expressie te
activeren. Hierin is het wat overzichtelijker om de formule in te
voeren.
Zet nog een tekstvak in de sectie Rapportvoettekst. Sleep het
eventueel naar de gewenste plaats, zie guur 7.27, en verander
de eigenschap Bijschrift van het label in Totaal aantal klan-
ten: en de eigenschap Besturingselementbron van het tekstvak
in: =Aantal([Land]). Aangezien deze telling nu in de sectie
Rapportvoettekst staat, wordt nu niet per groep geteld, maar voor
het hele rapport.
Ten slotte wordt het laatste tekstvak geplaatst, in dezelfde sectie
waar-in het totaal aantal klanten wordt getoond. Verander van het
label de eigenschap Bijschrijft in Totaal aantal reizigers: en in het
tekstvak de eigenschap Besturingselementbron in: =Som([Aantal
volwassenen]+[Aantal kinderen]).
Nog een opmerking over de berekeningen per groep. Zoals we in
het rapport zien, wordt het aantal klanten en het aantal reizigers
per vertrekdatum afgedrukt vrdat de gegevens getoond worden.
Dat is iets bijzonders, want hoe weet Access vraf hoeveel gege-
vens in die groep afgedrukt worden? Access doorloopt hiervoor
twee keer het rapport. De eerste keer worden de expressies in de
detailregels berekend, de groepstotalen en eindtotalen bepaald en
de lengte van het rapport gecontroleerd, zodat het totaal aantal
paginas bekend is. De tweede keer wordt het rapport afgedrukt en
de berekende expressies van de bijbehorende groepen afgedrukt.
Doordat Access het rapport twee keer doorloopt, is het ook moge-
lijk om percentages uit te rekenen ten opzichte van totaaltellingen.
In de volgende paragraaf wordt een voorbeeld toegelicht waarin
zon percentageberekening wordt toegepast.
7.3 Rapport met meerdere groepen
Als laatste voorbeeld in dit hoofdstuk bespreken we een rapport
waarin meerdere groepen zijn opgenomen. Hierin wordt het aan-
tal reizigers geteld per land en binnen een land per bestemming.
Verder wordt het percentage reizigers naar die bestemmingen
afgedrukt ten opzichte van de andere bestemmingen in het reis-
programma van het reisbureau, zie guur 7.28.
Copyright 2007 Academic Service
7 Uitgebreide rapporten
237
We maken eerst een query waarin de betreffende gegevens worden
geselecteerd.
Kies het overzicht Querys en selecteer Query maken in ontwerp-
weergave.
Kies achtereenvolgens de tabellen Bestemming, Reis en Boeking.
Selecteer de velden Land en Plaats uit de tabel Bestemming. Het
derde benodigde veld is een rekenveld.
Klik met de muis in de derde kolom van de rij Veld en vul in:
Aantal reizigers: [Aantal volwassenen] + [Aantal kinderen].
Sla de query op met de naam rptLandtotalen. Merk op dat uit de
tabel Reis geen gegevens nodig zijn, maar deze is wel noodzake-
lijk om de gegevens uit de tabel Boeking (Aantal volwassenen en
Aantal kinderen) te kunnen benaderen.
Kies het overzicht Rapporten en selecteer Rapport maken met
wizard.
Kies in het eerste venster van de Wizard de zojuist gemaakte
query rptLandtotalen.
Selecteer alle velden uit de query en ga naar het volgende scherm
van de Wizard. De gegevens moeten weergegeven worden volgens
Bestemming. Er moet immers gegroepeerd worden op de velden
Land en Plaats, die moeten dus boven in het rapport komen.
In het volgende scherm kunnen we in het groeperen een verdere
verjning aanbrengen. Aangezien we moeten groeperen op het
Figuur 7.28
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
238
veld Land en daarbinnen op het veld Plaats moet een extra groe-
peerniveau worden geselecteerd. Markeer het veld Land en klik op
de knop >. Aan de rechterzijde van het scherm wordt dan een voor-
beeld van de groepeerniveaus aangegeven. Eerst wordt gegroe-
peerd op het veld Land en daarbinnen op het veld Plaats, zie guur
7.29.
In het volgende scherm kan van de detailsectie een sorteervolgorde
worden aangegeven, zie guur 7.30. Dat is voor ons rapport niet
noodzakelijk.
Figuur 7.29
Figuur 7.30
Copyright 2007 Academic Service
7 Uitgebreide rapporten
239
Als in de detailsectie numerieke waarden voorkomen, wordt in dit
scherm tevens een mogelijkheid geboden om totalen weer te geven
met de knop Opties voor totalen In de detailsectie hebben we
een numerieke waarde, namelijk het rekenveld Aantal reizigers.
Klik op de knop Opties voor totalen Er wordt een venster
getoond waarin we opties kunnen selecteren voor totalen, zie
guur 7.31.
In het gewenste overzicht is het totaal aantal reizigers per land
en daarbinnen per plaats noodzakelijk, dus de aantallen reizigers
moeten gesommeerd worden. Zet hiervoor een vinkje bij Som.
Geef in dit scherm verder aan of de afzonderlijke detailgegevens
en totalen getoond moeten worden of alleen de totalen. Wij zijn
voor ons rapport niet genteresseerd in de individuele reizen, maar
alleen in de totalen per land en daarbinnen per plaats. Kies voor
Alleen totalen.
Plaats in dit venster een vinkje bij Percentage van totaal berekenen
voor som. Hierdoor worden de gewenste percentages getoond.
Klik op de knop OK en ga naar het volgende scherm. Kies hierin
voor Met interval en Staand en ga naar het volgende scherm van de
Wizard.
Kies de optie Vet en geef in het laatste scherm de naam
Landtotalen aan het rapport. Er wordt een voorbeeld van het rap-
port op het scherm als afdrukvoorbeeld getoond, zie guur 7.32.
Figuur 7.31
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
240
Het rapport voldoet nog niet geheel aan onze wensen, zie guur
7.28. We gaan opnieuw enige handmatige aanpassingen aanbren-
gen om het gewenste resultaat te krijgen.
Zet het rapport in de ontwerpweergave, zie guur 7.33.
In de sectie Paginakoptekst moet een nieuw label worden geplaatst.
Dit kan via de Werkset of door een willekeurig label uit die sectie
te kopiren.
Selecteer in de sectie Paginakoptekst het label Aantal reizigers en
kopieer via Bewerken, Kopiren en Bewerken, Plakken een nieuw
label.
Sleep het vervolgens naar de gewenste plaats, naast het label
Aantal reizigers.
Activeer het eigenschappenvenster van het nieuwe label en veran-
der in het tabblad Opmaak de eigenschap Bijschrift in Percentage.
Door het kopiren is de sectie groter geworden, verklein deze weer
tot het oorspronkelijke formaat.
Figuur 7.32
Copyright 2007 Academic Service
7 Uitgebreide rapporten
241
In de sectie Voettekst (Plaats) staan de labels Som en Standaard.
Verwijder deze door ze te selecteren en vervolgens op de Delete-
toets te drukken. Het label Standaard lijkt ons een foutje in
Access. Dit moet Percentage zijn.
We moeten de twee bijbehorende tekstvakken verplaatsen. Sleep
het bovenste tekstvak, =Som([Aantal reizigers]), in de sectie
Voettekst (Plaats) naar de sectie Koptekst (Plaats).
Doe precies hetzelfde voor het andere tekstvak, =Som([Aantal
reizigers])/([Aantal reizigers Eindtotaal Som]), uit de sectie
Voettekst (Plaats). Sleep dat tekstvak recht onder het zojuist
gemaakte label Percentage.
Verklein de sectie Voettekst (Plaats) door de balk van de Voettekst
(Land) omhoog te schuiven. Zie het voorlopige resultaat in guur
7.34.
Verwijder in de sectie Voettekst (Land) de labels Som en
Standaard.
Verplaats vervolgens het onderste tekstvak =Som([Aantal
reizigers])/([Aantal reizigers Eindtotaal Som]) in dezelfde sectie
naast het bovenliggende tekstvak =Som([Aantal reizigers]).
Maak in dezelfde sectie het vak =Overzicht voor & aan de
rechterkant voor de helft kleiner, zodat de onderliggende tekstvak-
ken ernaast geplaatst kunnen worden, zie guur 7.35.
Verplaats de beide tekstvakken naast het zojuist verkleinde vak.
Figuur 7.33
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
242
In de sectie Voettekst (Land) plaatsen we nog een lijn onder de
tekstvakken, zodat de landen door een lijn van elkaar gescheiden
worden.
Figuur 7.34
Figuur 7.35
Copyright 2007 Academic Service
7 Uitgebreide rapporten
243
Selecteer in de sectie Paginakoptekst de onderste lijn en kopieer
deze lijn naar de sectie Voettekst (Land). Sleep deze lijn tot net
onder de tekstvakken.
Verklein deze sectie door de balk van de sectie Paginavoettekst
omhoog te schuiven.
Het rapport voldoet nu bijna aan onze eisen. Nog een klein detail
gaan we aanpassen.
Selecteer het vak =Overzicht voor & in de sectie Voettekst
(Plaats).
Activeer het eigenschappenvenster en klik op het tabblad
Gegevens.
Vervang in de eigenschap Besturingselementbron detailrecord
door reis en detailrecords door reizen (zoom eventueel uit met
Shift+F2).
Doe hetzelfde met het gelijkwaardige vak in de sectie Voettekst
(Land).
Het rapport is volledig aangepast aan onze wensen, zie guur 7.35.
Bekijk het resultaat als afdrukvoorbeeld.
Nog enige opmerkingen over het rapport:
Het rekenveld Aantal reizigers in de sectie Detail wordt in het
rapport niet afgedrukt. We tonen immers alleen de totalen. We
kunnen echter het rekenveld Aantal reizigers niet verwijderen aan-
gezien deze gebruikt wordt om de totalen te bepalen. De gegevens
in de detailsectie worden in het rapport niet getoond doordat de
eigenschap Zichtbaar van de sectie Detail op Nee is gezet door de
Wizard.
In de sectie Rapportvoettekst wordt als laatste het totaal aantal
reizigers getoond uit alle landen in het rapport. Het percentage is
door de Wizard niet geplaatst aangezien het altijd 100% is.
Het tekstvak is door de Wizard voorzien van de naam: Aantal rei-
zigers Eindtotaal Som. Dit is te zien in de eigenschap Naam, in het
tabblad Overige van dit tekstveld.
Die naam kan vervolgens gebruikt worden bij berekeningen met
dit tekstveld. Op die manier zijn de percentages uitgerekend van de
totalen per land en per plaats. Dit is mogelijk in Access aangezien
het rapport twee keer wordt doorlopen voordat het wordt afge-
drukt.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
244
Als we in een kop- of voettekst een rekenveld, dat in de detail-
sectie is bepaald, willen sommeren, is het niet toegestaan om te
verwijzen naar het betreffende rekenveld. Een voorbeeld: in de
detailsectie hebben we het rekenveld Regelbedrag met hierin de
berekening =[Aantal] * [Prijs]. In de kop- of voettekst is het niet
toegestaan om =Som([Regelbedrag]) te gebruiken, we moeten de
berekening daarin herhalen =Som([Aantal] * [Prijs]). Als het
rekenveld in een query is gemaakt, zoals in ons voorbeeld, mag
het wel worden toegepast.
Opgaven
7.1 In guur 7.36 wordt per vertrekdatum de bestemmingen getoond
die worden aangedaan inclusief het reisnummer en de prijs per
persoon. In het rapport van guur 7.36 worden de duplicaten niet
getoond. Het gebruikte opmaakproel is Vet. Maak dit rapport.
7.2 Figuur 7.37 toont een rapport dat per vertrekdatum de reizen laat
zien en de vertrekkende klanten. Vervaardig het getoonde rapport
in de opmaak Met interval met het proel Vet.
Figuur 7.36
Copyright 2007 Academic Service
7 Uitgebreide rapporten
245
7 Uitgebreide rapporten
245
7.3 In guur 7.38 wordt een omzetlijst getoond. Hierin is per reis de
omzet berekend. De kinderen betalen voor alle reizen 20% minder
dan de volwassenen. Voor de opmaak is gekozen voor Links uitlij-
nen 1, het proel is Vet. Maak dit rapport.
Figuur 7.37
Figuur 7.38
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
246
Databaseontwikkeling 4 Access 2003
246
7.4 In het overzicht van opdracht 7.3 worden alleen reizen getoond
die een omzet hebben. Maar er zijn ook veel reizen die nog niet
geboekt zijn en zodoende geen omzet hebben. Verander de query
uit opdracht 7.3 zodanig dat alle reizen worden getoond, ook die
nog niet geboekt zijn.
Tip: verander de joineigenschappen van de gemaakte query zoda-
nig dat alle reizen worden getoond, ook de reizen die dus nog niet
geboekt zijn.
Copyright 2007 Academic Service
8 Macros
In Access kunnen we macros maken voor het automatisch laten
uitvoeren van opdrachten die we anders met de muis of het toet-
senbord zouden uitvoeren. In een macro kunnen verschillende
opdrachten zijn opgenomen, die in de opgegeven volgorde worden
uitgevoerd. Een macro kan bijvoorbeeld gestart worden door het
klikken op een opdrachtknop, waarna de opdrachten in de macro
automatisch voor ons worden uitgevoerd. In paragraaf 6.6 heb-
ben we opdrachtknoppen gemaakt die ook een actie uitvoeren,
maar in dat geval gaat het slechts om n actie. Met een macro
kunnen we meerdere opeenvolgende acties laten uitvoeren door
n opdrachtknop. Het starten van een macro kan ook door een
gebeurtenis plaatsvinden. Die gebeurtenis kan het openen van een
formulier zijn, het sluiten van een tabel of het verlaten van een
besturingselement. Binnen een macro kunnen we voorwaarden
opnemen, zodat de waarden in het formulier of rapport bepalen
welke opdrachten uitgevoerd worden. Met behulp van macros
kunnen opdrachten voor bepaalde taken geautomatiseerd worden.
Het is zelfs mogelijk om alle taken die nodig zijn om een database
te onderhouden en te raadplegen door macros uit te laten voeren.
Hierdoor kunnen we zonder enige kennis van Access de database
gebruiken. We spreken dan over een toepassing; een uitwerking
van zon toepassing staat in hoofdstuk 9.
In dit hoofdstuk worden twee voorbeelden van macros gegeven.
Het eerste voorbeeld is een eenvoudige macro, die toont wat een
macro inhoudt. In het tweede voorbeeld worden geavanceerde
macros toegepast om de mogelijkheden van macros aanschou-
welijk te maken. Bedenk dat die geavanceerde macros niet altijd
nodig zijn voor het maken van een applicatie, maar het kan helpen
om een probleem binnen een toepassing op te lossen.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
248
8.1 Een eenvoudige macro
De opdrachten die een macro kan uitvoeren, worden acties
genoemd. Alle opdrachten die we met de muis of het toetsenbord
kunnen uitvoeren, zijn via acties in een macro uit te voeren. Een
macro wordt eerst eenmalig ingevoerd; vervolgens wordt de macro
gestart en worden alle acties van de macro in de aangegeven volg-
orde uitgevoerd. (We spreken wel van het runnen van de macro.)
We gaan een macro maken die uit de database Reisbureau alle
klanten uit Vlaardingen toont.
Open de database Reisbureau en selecteer het overzicht Macros.
Klik op de knop Nieuw, waarna het macrovenster wordt getoond.
In de eerste kolom, Actie, kunnen de acties die de macro gaat uit-
voeren, worden opgegeven. In de tweede kolom, Beschrijving, kan
eventueel een toelichting worden gegeven bij de actie. Die toelich-
ting heeft geen invloed op de macro. Merk op dat het macrovenster
nog twee extra kolommen kan tonen: Macronaam en Voorwaarde.
Deze kolommen worden in paragraaf 8.2 toegelicht; voor dit voor-
beeld zijn ze niet noodzakelijk.
Klikken we in de actiekolom, dan kunnen we uit een keuzelijst een
van de vele acties selecteren. De eerste actie die de macro moet
gaan uitvoeren, is het openen van de tabel Klant. Selecteer de actie
TabelOpenen.
In het onderste gedeelte van het macrovenster worden de argumen-
ten getoond van die actie, alsmede een korte toelichting van de
actie. Druk voor meer informatie over een actie op de F1-toets.
De meeste acties vereisen bepaalde instellingen argumenten
zodat de actie weet welke tabel, welk formulier of welk rapport
geopend moet worden. Met de F6-toets kunnen we wisselen tussen
het bovenste en onderste gedeelte van het macrovenster.
Klik met de muis in het argument Tabelnaam.
Selecteer in de keuzelijst de tabel Klant.
Het argument Beeld bied vijf mogelijkheden, te weten
Gegevensblad, Ontwerp, Afdrukvoorbeeld, Draaitabel en
Draaigraek. Kies de instelling Gegevensblad.
Copyright 2007 Academic Service
8 Macros
249
In het laatste argument, Gegevensmodus, kunnen we opgeven dat
alleen toevoegingen zijn toegestaan: modus Toevoegen. In de
modus Bewerken geven we aan dat alle bewerkingen zijn toe-
gestaan. Of dat de gegevens alleen gelezen mogen worden: modus
Alleen-lezen. Selecteer de instelling Alleen-lezen.
De eerste actie van de macro is opgenomen. Hiermee wordt de
tabel Klant geopend als gegevensblad en de gegevens mogen niet
gemuteerd worden (alleen-lezen). De tweede actie die de macro
voor ons gaat uitvoeren, is het maximaliseren van het venster.
Klik in de tweede regel van de actiekolom en selecteer de actie
Maximaliseren.
Deze actie heeft geen argumenten. Het venster zal vergroot worden
tot het volledige scherm. Is het venster al gemaximaliseerd, dan
gebeurt er niets. Merk op dat het venster niet tijdens het invoeren
van de macro wordt gemaximaliseerd. Het vindt pas plaats nadat
de macro is gestart.
De derde actie die we de macro laten uitvoeren, is een bericht op
het scherm tonen.
Selecteer in de derde regel de actie Berichtvenster.
Hiermee kunnen we een bericht op het scherm plaatsen. De actie
Berichtvenster heeft vier argumenten. In het argument Bericht
kunnen we de boodschap invullen die op het scherm getoond moet
worden. Het tweede argument, Pieptoon, kunnen we gebruiken om
een geluidssignaal te laten klinken. In het derde argument, Type,
kunnen vijf verschillende pictogrammen worden afgebeeld bij het
bericht, zoals een vraagteken of een uitroepteken. In het laatste
argument, Titel, kunnen we bij het bericht een titel plaatsen. Deze
wordt in de bovenste balk van het berichtenvenster getoond.
Selecteer achtereenvolgens de volgende instellingen: We tonen
hierna alleen klanten uit Vlaardingen., Ja, Informatie, Berichtje.
De volgende actie is het lteren van de klantentabel om alleen de
klanten uit Vlaardingen te tonen.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
250
Selecteer de actie FilterToepassen.
Deze actie heeft twee argumenten. Het eerste argument is
Filternaam; hierin kunnen we de naam opgeven van een lter of
query waarmee de records in de tabel beperkt worden. Aangezien
we geen lter gemaakt hebben, kiezen we voor het tweede argu-
ment: WHERE-voorwaarde. Hierin kunnen we een voorwaarde
invoeren die de records beperkt tot de klanten uit Vlaardingen.
Voer bij het argument WHERE-voorwaarde in:
[Woonplaats] = Vlaardingen.
Hierna worden alleen klanten uit Vlaardingen getoond. De vier-
kante haakjes om Woonplaats worden door Access toegevoegd.
Het is niet noodzakelijk deze zelf in te voeren. Als een veldnaam
met spaties is gebruikt, moeten we wel zelf de vierkante haakjes
om de naam van het veld plaatsen.
Nadat de klanten uit Vlaardingen getoond zijn, in de macro, wordt
een melding op het scherm geplaatst dat het klantenbestand wordt
gesloten. Deze actie, Berichtvenster, is eerder toegelicht. De argu-
menten zijn achtereenvolgens: We gaan de tabel Klanten afsluiten.,
Ja, Informatie en Berichtje.
In de voorlaatste actie brengen we het venster terug in zijn oor-
spronkelijke grootte. Een eerdere actie was het venster te maxima-
liseren.
Selecteer de actie VorigFormaat, zodat het vorige vensterformaat
hersteld wordt. Deze actie heeft geen argument.
De laatste actie die we de macro laten uitvoeren, is het sluiten van
de tabel Klant.
Selecteer uit de keuzelijst met alle mogelijke acties Sluiten.
Deze actie heeft drie argumenten. In het argument Objecttype
kunnen we aangeven welk object gesloten moet worden; bijvoor-
beeld een tabel, formulier of query. Bij het tweede argument,
Objectnaam, moeten we de naam van de tabel, het formulier of
de query opgeven. In het derde argument kunnen we aangeven of
Copyright 2007 Academic Service
8 Macros
251
de gegevens tijdens het afsluiten wel of niet opgeslagen moeten
worden. Als geen argumenten worden ingevoerd, wordt het actieve
object afgesloten. Aangezien bij ons alleen het klantenformulier
actief is, vullen we bij de argumenten niets in, de tabel wordt
gesloten. De eerste macro is klaar, in guur 8.1 staat deze volledig
afgebeeld.
Sla de macro op onder de naam Macro voorbeeld en sluit het ven-
ster.
We gaan de macro starten.
Selecteer in het databasevenster het overzicht Macros.
Selecteer de zojuiste gemaakte macro en klik hierna op de knop
Starten. De macro wordt dan uitgevoerd en de acties worden in de
opgegeven volgorde doorlopen.
Een bestaande macro kunnen we aanpassen aan nieuwe wensen
of verbeteren door in het overzicht Macros de te wijzigen macro
te selecteren en vervolgens op de knop Ontwerpen te klikken. De
macro wordt in het macrovenster getoond. Het macrovenster bevat
een macrowerkbalk, waarin we bijvoorbeeld een knop vinden om
rijen te verwijderen of toe te voegen.
Figuur 8.1
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
252
Testen van een macro
Als we veel acties in een macro opnemen, kan het voorkomen dat
we een fout maken waardoor de macro niet functioneert. Het kan
lastig zijn die fout op te sporen. Om ons daarbij te helpen heeft
Access een mogelijkheid om de macro stap voor stap uit te voeren.
Na iedere actie wordt gestopt, zodat we het resultaat van de vorige
actie kunnen bekijken. Is deze foutloos, dan kunnen we een
opdracht geven om de volgende actie uit te voeren. Het opsporen
van fouten gaat hierdoor gemakkelijker. We gaan de zojuist
gemaakte macro (Macro voorbeeld) stap voor stap laten uitvoeren.
Plaats de macro in het macrovenster (selecteer het overzicht
Macros en klik op de knop Ontwerpen).
Klik in de werkbalk op de knop Macrostap of de opdracht
Macrostap in het menu Uitvoeren. Starten we hierna de macro, dan
worden de acties n voor n uitgevoerd in een dialoogvenster,
zie guur 8.2.
Verlaat het macrovenster en klik in het overzicht Macros op de
knop Starten. In het dialoogvenster zien we de actie en de argu-
menten.
Klik op de knop Stap om de volgende actie van de macro uit te
voeren. Op deze manier stappen we door de macro om een fout
op te sporen. Je kunt het stapsgewijs uitvoeren van de macros uit-
schakelen door in de ontwerpfase opnieuw op de knop Macrostap
te klikken.
Figuur 8.2
Copyright 2007 Academic Service
8 Macros
253
Opgave
8.1 Maak een macro die de volgende acties uitvoert:
openen van de tabel Klant in gegevensbladweergave en alleen
lezen;
het venster maximaliseren;
het laatste record uit de tabel (actie NaarRecordGaan) selecte-
ren;
een melding op het scherm plaatsen dat dit het laatste record is;
vervolgens het eerste record selecteren;
ook dit op het scherm melden;
het oorspronkelijke vensterformaat herstellen;
de tabel met klantgegevens sluiten.
8.2 Geavanceerde macros
In de vorige paragraaf hebben we kennisgemaakt met het begrip
macro. Tevens hebben we een eenvoudige macro gemaakt en uitge-
voerd. Daarna hebben we de macro stap voor stap laten uitvoeren
om eventuele fouten op te sporen. Deze macro werd gestart in het
overzicht Macros. Een macro kan ook gestart worden door op een
opdrachtknop te klikken. Een andere veelgebruikte methode om
een macro te starten is een bepaalde gebeurtenis, bijvoorbeeld de
gebeurtenis het openen van een formulier, het verlaten van een
besturingselement of na bijwerken van een besturingselement.
We gaan twee formulieren maken waarin we de mogelijkheden
van macros zullen demonstreren. Tevens tonen we hoe we op
basis van waarden in het formulier verschillende acties kunnen
uitvoeren. Het betreft een demonstratie van de mogelijkheden van
macros en niet echt een praktische toepassing. In hoofdstuk 9,
Het bouwen van een toepassing, worden macros gebruikt die wel
nuttig zijn in een praktijksituatie. In dat hoofdstuk maken we een
professioneel ogende toepassing, die gebruikt kan worden door
mensen die geen kennis van Access hebben. Alle handelingen wor-
den door wizard-opdrachtknoppen en macros uitgevoerd. Maar
voordat we die macros kunnen maken, moeten we eerst de moge-
lijkheden leren kennen vandaar dit demonstratievoorbeeld.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
254
We gaan twee formulieren maken, genaamd Groenformulier en
Roodformulier. In het groene formulier worden boodschappen af-
gedrukt en het rode formulier laat, via opdrachtknoppen, de bood-
schap verdwijnen en terugkomen (zie guur 8.3). We maken eerst
de formulieren en vervolgens de macros.
Omdat dit een demonstratie van macros is, gebruiken we de eer-
dergemaakte database Oefening. Als deze database niet meer aan-
wezig is, creer deze dan (uit het menu Bestand, Nieuwe database)
of maak gebruik van een andere testdatabase.
Selecteer in het databasevenster het overzicht Formulieren en kies
voor de optie Formulier maken in ontwerpweergave.
Zorg dat de werkset op het scherm staat (knop Werkset in de werk-
balk).
Selecteer uit de werkset een Tekstvak en verplaats de muiswijzer
naar het formulier.
Klik en sleep een tekstvak op het formulier.
Zet hierna het eigenschappenvenster op het scherm (knop
Eigenschappen uit de werkbalk).
Selecteer het tekstvak en klik op de tab Overige.
Verander de eigenschap Naam in Boodschap.
Figuur 8.3
Copyright 2007 Academic Service
8 Macros
255
Selecteer het label van het tekstvak en verander de eigenschap
Bijschrift in de tab Opmaak in Boodschap.
We gaan een tweede tekstvak maken. In dit tekstvak kun je zien
hoe vaak een boodschap is getoond. In het tekstvak Teller gaan we
de getallen 1 tot en met 4 plaatsen. Afhankelijk van dat getal wordt
een boodschap in het tekstvak Boodschap geplaatst.
Voeg nog een tekstvak toe aan het formulier en maak de afmetin-
gen daarvan niet te groot.
Verwijder het label van dit tekstvak (selecteren en Delete-toets).
Selecteer het nieuwe tekstvak en verander de eigenschap Naam, in
het tabblad Overige, in Teller.
Selecteer met de muiswijzer het tekstvak Teller.
Verander in het eigenschappenvenster tabblad Opmaak de
eigenschap Notatie in Vast en de eigenschap Aantal decimalen in
0. Hiermee geven we aan dat er gehele getallen in worden opgesla-
gen.
Om dit formulier goed te kunnen onderscheiden van het andere
gaan we een gifgroene kleur aan het formulier geven. Klik met
de muis op de Detailbalk van het formulier en klik hierna in het
eigenschappenvenster op het tabblad Opmaak. Klik op de eigen-
schap Achtergrondkleur en klik vervolgens op de drie puntjes in
deze eigenschap. Er wordt een kleurenpalet getoond. Kies de gif-
groene kleur en klik op de knop OK.
Ten slotte moeten enkele eigenschappen van het formulier worden
gewijzigd. Zet de eigenschappen van het formulier op het scherm;
je kunt Formulier selecteren uit de keuzelijst van het eigenschap-
penvenster. Verander de eigenschappen zoals in guur 8.4 wordt
getoond.
Verander eventueel de lay-out van het formulier, zodat het onge-
veer de lay-out krijgt van het groene formulier uit guur 8.3.
Figuur 8.4
Eigenschap Instelling
Schuifbalken Geen
Recordkiezers Nee
Navigatieknoppen Nee
Recordbegrenzingslijnen Nee
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
256
Sla vervolgens het formulier op en geef het de naam
Groenformulier.
We gaan nu het rode formulier maken.
Klik in het overzicht Formulieren op de optie Formulier maken in
ontwerpweergave. Dit formulier krijgt drie opdrachtknoppen. Deze
worden echter gemaakt zonder de wizard. Schakel de wizard in de
werkset hiervoor uit.
Selecteer Opdrachtknop uit de werkset en verplaats de muiswijzer
naar het formulier.
Klik en sleep de nieuwe opdrachtknop in het formulier.
Verander de eigenschap Bijschrift, tabblad Opmaak, van de
opdrachtknop in &Kom terug en de eigenschap Naam, in tabblad
Overige, in Kom terug. Het &-teken in het bijschrift maakt dat de
opdrachtknop ook met de toetsencombinatie Alt+K te selecteren is.
Plaats op dezelfde manier nog twee opdrachtenknoppen in het
formulier. Verander de eigenschappen Bijschrift en Naam van de
tweede opdrachtknop in respectievelijk &Verdwijn en Verdwijn en
voor de derde opdrachtknop in &Einde en Einde.
De opdrachtknop Kom terug moet in eerste instantie uitgeschakeld
zijn, wat betekent dat de opdrachtknop niet te selecteren is. Kies
daartoe in het eigenschappenvenster, van de opdrachtknop Kom
terug, het tabblad Gegevens en verander de eigenschap
Ingeschakeld in Nee.
Om dit formulier goed te kunnen onderscheiden van het groene
formulier gaan we het een knalrode kleur geven.
Klik met de muis op de Detailbalk van het formulier en klik in het
eigenschappenvenster op het tabblad Opmaak.
Klik op de eigenschap Achtergrondkleur en klik vervolgens op de
drie puntjes in deze eigenschap. Kies uit het kleurenpalet de knal-
rode kleur en klik op de knop OK.
Ten slotte moeten enige eigenschappen van het formulier gewijzigd
worden.
Plaats de eigenschappen van het formulier op het scherm (je kunt
Formulier selecteren uit de keuzelijst van het eigenschappenven-
ster).
Verander de eigenschappen zoals in guur 8.4 wordt getoond.
Copyright 2007 Academic Service
8 Macros
257
Wijzig nog twee extra eigenschappen: de eigenschap
Systeemmenu, in tab Opmaak, in Nee, en de eigenschap Modaal,
in tabblad Overige, in Ja. Een modaalvenster is een venster dat we
alleen kunnen verlaten door het te sluiten, we kunnen geen ander
venster de focus geven.
Bekijk het formulier in de formulierweergave. We kunnen op
de opdrachtknoppen klikken, er gebeurt niets. De acties die uit-
gevoerd moeten worden, de macros, moeten immers nog gemaakt
worden.
Verander eventueel de lay-out van het formulier, zodat het onge-
veer de lay-out krijgt van het rode formulier uit guur 8.3.
Sla vervolgens het formulier op en geef het de naam
Roodformulier.
De formulieren waarvoor we de macros gaan maken zijn klaar,
dus we gaan nu beginnen met de macros. Er zijn in dit voorbeeld
vier macros nodig, die we alle vier apart kunnen opslaan. Dat
doen we echter niet, we plaatsen deze macros in een zogenoemde
Macrogroep. In een macrogroep kunnen we meerdere macros op
een overzichtelijke wijze ordenen. In een toepassing hebben we
dan niet tientallen macros, maar slechts enkele macrogroepen.
Alle macros die bij n formulier horen, slaan wij op in n
macrogroep. Als we wijzigingen in de macros van een formulier
willen doorvoeren, weten we precies welke macrogroep we moeten
bewerken.
Selecteer in het databasevenster het overzicht Macros en klik op
de knop Nieuw. Het macrovenster wordt getoond.
Aangezien we de macros als macrogroep gaan opslaan, moet een
extra kolom zichtbaar gemaakt worden in het macrovenster. Klik
in de werkbalk op de knop Macronamen.
In de kolom Macronaam kunnen we de individuele macros in
deze groep een naam geven. Als eerste gaan we een macro Initieer
maken. Voer in de kolom Macronaam de naam Initieer in, zie
guur 8.5.
Om de acties en hun argumenten te tonen plaatsen we deze in
tabelvorm, daarna worden alle acties toegelicht. Argumenten die
niet nodig zijn, worden in de tabel niet getoond.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
258
Klik met de muis in de kolom met acties en selecteer de actie For-
mulierOpenen.
Vul de argumenten in zoals beschreven in guur 8.6. Via de F6-
toets kunnen we snel wisselen tussen acties en argumenten. Deze
macro-actie opent het groene formulier in formulierweergave.
De tweede actie is WaardeInstellen, een actie die veelvuldig
voorkomt in macros. Hiermee kun we aan een eigenschap een
waarde toekennen. In de tweede actie krijgt het besturings-
element Boodschap, dat zich in het groene formulier bevindt, de
waarde Hallo, hier ben ik voor de eerste keer. Druk op de knop
Verdwijn.. Voordat we uitleggen dat deze instelling op een een-
voudige manier is in te voeren, geven we enige regels met betrek-
king tot het verwijzen naar formulieren.
Figuur 8.5
Figuur 8.6 Macro Initieer
Actie Argument Instelling
FormulierOpenen Formuliernaam Groenformulier
Beeld Formulier
Venstermodus Standaard
WaardeInstellen Item [Formulieren]![Groenformulier]!
[Boodschap]
Expressie Hallo, hier ben ik voor de eerste keer.
Druk op de knop Verdwijn.
WaardeInstellen Item [Formulieren]![Groenformulier]![Teller]
Expressie 1
Copyright 2007 Academic Service
8 Macros
259
Verwijzingen naar formulieren
Om te verwijzen naar het formulier Groenformulier moeten
we het volgende invoeren: [Formulieren]![Groenformulier].
Hiermee maken we aan Access kenbaar dat we naar het formulier
Groenformulier verwijzen. Als we moeten verwijzen naar een
besturingselement op een formulier, wordt de verwijzing nog een
element langer. Willen we bijvoorbeeld verwijzen naar het bestu-
ringselement Einde op het rode formulier, dan moeten we invoe-
ren: [Formulieren]![Roodformulier]![Einde]. Om het nog erger
te maken: stel we willen verwijzen naar de eigenschap Zichtbaar
van het besturingselement Teller in het groene formulier. De ver-
wijzing hiernaar luidt: [Formulieren]![Groenformulier]![Teller].
Zichtbaar. Merk op dat de verwijzing naar een eigenschap niet
wordt gescheiden door een uitroepteken, maar door een punt. De
eigenschap Zichtbaar mag ook tussen vierkante haken ([])
geplaatst worden.
Opmerkingen met betrekking tot verwijzingen
Denk erom dat [Formulieren] getypt wordt en niet [Formulier],
dat heeft namelijk een heel andere betekenis voor Access (binnen
het bestek van dit boek is dit overigens niet van belang).
De eigenschappen worden automatisch omgezet naar het Engels.
Wanneer we in het Nederlands een eigenschap invoeren, bij-
voorbeeld Zichtbaar, wordt dit door Access automatisch naar het
Engels vertaald (Visible). Hiermee heeft men bereikt dat Access
onafhankelijk van de gebruikte taalversie werkt. De toepassing
werkt ook binnen de Spaanstalige versie van Access met een
Engelstalige Windows-versie.
Als een formulier de focus heeft, is het niet noodzakelijk om de
volledige verwijzing in te voeren. Heeft het groene formulier de
focus, dan kunnen we volstaan met de verwijzing: [Teller].
Zichtbaar in plaats van [Formulieren]![Groenformulier]![Teller].
Zichtbaar.
De verwijzingen naar rapporten is hetzelfde; we vervangen alleen
de uitdrukking [Formulieren] door [Rapporten].
Zoals eerder opgemerkt heeft Access een voorziening gemaakt om
het typen van lange verwijzingen te vereenvoudigen. We kunnen
gebruikmaken van het dialoogvenster Opbouwfunctie voor expres-
sies.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
260
Selecteer het argument Item van de tweede actie uit de macro
Initieer.
Klik op de drie puntjes van dit argument, waarna het venster
Opbouwfunctie voor expressies actief wordt, zie guur 8.7.
In de eerste kolom van dit venster kunnen we het object selecteren
waarnaar we een verwijzing moeten maken. We kunnen tabellen,
querys, formulieren of rapporten selecteren. Selecteren we in de
eerste kolom een formulier (eerst dubbelklikken op Formulieren),
dan verschijnen in de middelste kolom alle besturingselementen uit
dat formulier. In de middelste kolom kiezen we het gewenste bestu-
ringselement. In de derde kolom kunnen we voor de <Waarde>
van het besturingselement kiezen of een keuze maken uit de eigen-
schappen ervan.
Naast het verwijzen naar de genoemde objecten kunnen we in dit
venster tevens een van de vele functies van Access selecteren. Kies
in de eerste kolom Functies. In de middelste kolom verschijnen dan
alle functiegroepen van Access, zoals datum/tijd-, statistische en
rekenkundige functies. Selecteren we bijvoorbeeld de statistische
functies, dan verschijnen in de derde kolom alle statistische func-
ties van Access. Nadat we de juiste expressie hebben geselecteerd,
kunnen we op de knop Plakken klikken. De expressie verschijnt
in het bovenste gedeelte van het venster. Als berekeningen of ver-
gelijkingen met de selectie uitgevoerd moeten worden, hebben we
de keuze uit de knoppen onder het venster. Hierna kan eventueel
een functie opgeroepen worden of opnieuw een besturingselement.
Nadat de volledige expressie in het venster is geplaatst, kan op de
knop OK worden geklikt.
Figuur 8.7
Copyright 2007 Academic Service
8 Macros
261
In de eerste kolom van het dialoogvenster Opbouwfunctie voor
expressies zijn nog enkele handige elementen die geselecteerd
kunnen worden, zoals Gangbare expressies. Hiermee kunnen we
bijvoorbeeld een besturingselement selecteren dat het huidige pagi-
nanummer bevat of de huidige datum.
Selecteer in de kolom Formulieren het formulier Groenformulier.
Hierbij hebben we de mogelijkheid om alle formulieren te selecte-
ren of alleen de geladen formulieren.
In de tweede kolom worden alle besturingselementen getoond die
op het formulier staan. Selecteer in de tweede kolom het bestu-
ringselement Boodschap.
In de derde kolom worden alle eigenschappen van dat besturings-
element getoond. Selecteer de standaardwaarde van de derde
kolom <Waarde>. Hiermee kunnen we aan het besturingselement
een waarde toekennen.
Klik op de knop Plakken. Hiermee plakken we de gemaakte keuze
in het bovenste scherm van de Opbouwfunctie voor expressies.
Klik vervolgens op de knop OK. Dit heeft tot gevolg dat het ven-
ster wordt gesloten en de gemaakte verwijzing in het argument
wordt geplaatst.
Verplaats de cursor naar het argument Expressie van de tweede
actie. Typ hier de tekst die in het besturingselement komt te staan;
deze dient tussen aanhalingstekens geplaatst te worden. De tekst
wordt in de formulierweergave van het formulier in het besturings-
element Boodschap getoond.
De derde en laatste actie van de macro Initieer is opnieuw Waarde-
Instellen. Start voor het argument Item de Opbouwfunctie voor
expressies.
Selecteer in de eerste kolom het formulier Groenformulier, ver-
volgens in de tweede kolom het besturingselement Teller en in de
derde kolom <Waarde>.
Plak deze instelling in het bovenste venster van Opbouwfunctie
voor expressies en sluit het venster af. In het argument Expressie
wordt het getal 1 geplaatst.
Deze actie plaatst in het besturingselement (in de formulierweer-
gave) de waarde 1. Via het besturingselement Teller kunnen we
onthouden hoe vaak de boodschap is getoond. In dit voorbeeld
laten we de boodschap verdwijnen en terugkomen. Iedere keer dat
het opnieuw getoond wordt, laten we een andere boodschap zien.
Wordt de boodschap bijvoorbeeld voor de derde keer getoond wat
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
262
we kunnen achterhalen met behulp van het besturingselement
Teller dan tonen we de derde boodschap. De volgende macros
zullen dit verduidelijken.
De macro Initieer moet gestart worden door de gebeurtenis ope-
nen rode formulier. Hierdoor wordt na het openen van het rode
formulier direct het groene formulier geopend; de boodschap
wordt in het besturingselement Boodschap geplaatst en het bestu-
ringselement Teller krijgt de waarde 1 toegekend. Hoe we dit
kunnen realiseren, wordt na het toelichten van de overige macros
uitgelegd.
De tweede macro heeft binnen de macrogroep dezelfde naam
gekregen als de naam van de opdrachtknop die deze macro gaat
starten, namelijk Verdwijn. De volledige macro staat afgebeeld in
guur 8.5.
Tussen de macro Initieer en de macro Verdwijn is in het macro-
venster een regel overgeslagen om de macros van elkaar te schei-
den. Die lege regel is niet noodzakelijk, een macro wordt automa-
tisch beindigd zodra een nieuwe macro begint.
De macro Verdwijn wordt gestart door in het rode formulier op de
opdrachtknop Verdwijn te klikken. Hoe we dit kunnen realiseren,
wordt na het toelichten van de overige macros uitgelegd.
De boodschap in het groene formulier wordt van het scherm
verwijderd en tevens worden enkele instellingen veranderd. Zo
wordt bijvoorbeeld de opdrachtknop Kom terug ingeschakeld, die
Figuur 8.8
Macro Verdwijn
Actie Argument Instelling
WaardeInstellen Item [Formulieren]![Groenformulier]!
[Boodschap].[Visible]
Expressie Nee
WaardeInstellen Item [Kom terug].[Enabled]
Expressie Ja
NaarBesturingselementGaan Kom terug
WaardeInstellen Item [Verdwijn].[Enabled]
Expressie Nee
Copyright 2007 Academic Service
8 Macros
263
aanvankelijk niet geselecteerd kon worden. Tijdens het ontwerpen
van het rode formulier hebben we de eigenschap Ingeschakeld
(Enabled) van de opdrachtknop Kom terug de waarde Nee gege-
ven.
De eerste actie wijzigt de eigenschap Zichtbaar (Visible) van het
besturingselement Boodschap in de waarde Nee. Hierdoor wordt
de boodschap onzichtbaar, hij verdwijnt van het scherm. In het
venster Opbouwfunctie voor expressies kiezen we uit de middelste
kolom het besturingselement Boodschap en in de derde kolom de
eigenschap Visible. De eigenschappen in de derde kolom van dit
venster tonen ook in de Nederlandse versie de Engelse equivalen-
ten.
De volgende actie, opnieuw WaardeInstellen, wijzigt van de
opdrachtknop Kom terug de eigenschap Ingeschakeld (Enabled)
in de waarde Ja. In eerste instantie is de opdrachtknop Kom terug
niet te selecteren. De boodschap wordt ten slotte getoond, er valt
niets terug te keren. Nu de boodschap verdwenen is, kunnen we de
opdrachtknop Kom terug inschakelen, zodat deze geselecteerd kan
worden. Aangezien het rode formulier de focus heeft, is het toe-
gestaan om de formuliernaam weg te laten in de verwijzing naar
het besturingselement. Maken we gebruik van de Opbouwfunctie
voor expressies, dan verschijnt automatisch de volledige syntaxis.
Vervolgens moet de opdrachtknop Verdwijn worden uitgeschakeld,
de boodschap is immers al verdwenen. Dit vindt plaats in de twee
laatste acties. De opdrachtknop Verdwijn willen we uitschakelen,
echter een besturingselement kan alleen uitgeschakeld (of onzicht-
baar) gemaakt worden als het niet de focus heeft. Aangezien op de
opdrachtknop is geklikt, heeft die de focus. Om de opdrachtknop
Verdwijn uit te schakelen moeten we eerst de focus verplaatsen
naar de opdrachtknop Kom terug. De actie NaarBesturingselement
Gaan verplaatst de focus naar een ander besturingselement. Deze
actie heeft maar n argument, Besturingselementnaam, waarbij
het niet mogelijk is om de volledige beschrijving te typen, alleen
de naam is toegestaan.
In de laatste actie vindt het uitschakelen van de opdrachtknop
Verdwijn plaats. Aangezien het rode formulier nog de focus heeft,
is het niet noodzakelijk om ook de naam van het formulier in te
voeren.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
264
De boodschap is verdwenen. De opdrachtknop Verdwijn is niet
meer te selecteren en de opdrachtknop Kom terug kan nu wel gese-
lecteerd worden.
Nu kunnen we de derde macro gaan maken. Deze macro wordt
gestart als op de opdrachtknop Kom terug wordt geklikt. De bood-
schap wordt opnieuw getoond. Vervolgens plaatsen we de tweede
boodschap in het besturingselement Boodschap. Hierna moet het
ingeschakeld zijn van de opdrachtknoppen Kom terug en Verdwijn
opnieuw stuivertje wisselen. Wanneer echter voor de vierde keer
de boodschap is getoond, wordt de macro beindigd.
De macro heeft binnen de macrogroep dezelfde naam gekregen als
de naam van de opdrachtknop die deze macro gaat starten, name-
lijk Kom terug. De volledige macro is afgebeeld in guur 8.9.
In de macro Kom terug komen voorwaarden voor. Iedere keer als
de tekst wordt getoond, wordt een andere boodschap zichtbaar. Na
de vierde keer kan de boodschap niet meer verwijderd worden. Om
voorwaarden in macros mogelijk te maken moet een vierde kolom
in het macrovenster worden geactiveerd. Selecteer in de werkbalk
van het macrovenster de knop Voorwaarden. Hierdoor verschijnt
een extra kolom waarin we voorwaarden kunnen opgeven. Als
gevolg hiervan wordt het mogelijk om een bepaalde actie, op grond
van een voorwaarde, wel of niet uit te voeren.
Figuur 8.9
Copyright 2007 Academic Service
8 Macros
265
De meeste macrogroepen bevatten wel een macro waarin een
voorwaarde zit. Hierdoor is het handig om de twee extra kolom-
men, Macronaam en Voorwaarde, in het macrovenster altijd te
openen. Access kan dat automatisch voor ons doen.
Selecteer daartoe in de menubalk Extra, Opties en vervolgens het
tabblad Weergave.
Figuur 8.10
Macro Kom terug
Voorwaarde Actie Argument Instelling
WaardeInstellen Item [Formulieren]![Groenformulier]!
[Teller]
Expressie [Formulieren]![Groenformulier]!
[Teller] + 1
Waarde instellen Item [Formulieren]![Groenformulier]!
[Boodschap].[Visible]
Expressie Ja
2=[Formulieren]! WaardeInstellen Item [Formulieren]![Groenformulier]!
[Groenformulier]. [Boodschap]
[Teller]
Expressie Hallo, dit is de tweede keer.
3=[Formulieren]! WaardeInstellen Item [Formulieren]![Groenformulier]!
[Groenformulier]. [Boodschap]
[Teller]
Expressie Hallo, dit is al de derde keer.
4=[Formulieren]! WaardeInstellen Item [Formulieren]![Groenformulier]!
[Groenformulier]. [Boodschap]
[Teller]
Expressie Sorry, ik laat me niet meer weg-
sturen.
NaarBesturings- Einde
elementGaan
WaardeInstellen Item [Kom terug].[Enabled]
Expressie Nee
MacroStoppen
WaardeInstellen Item [Verdwijn].[Enabled]
Expressie Ja
NaarBesturings- Verdwijn
elementGaan
WaardeInstellen Item [Kom terug].[Enabled]
Expressie Nee
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
266
Vink hierin de vakjes Kolom met namen en Kolom met voorwaar-
den af.
In bijlage B worden enkele andere mogelijkheden van het menu-
item Opties toegelicht.
De eerste actie verhoogt de waarde van het besturingselement
Teller met 1; de waarde wordt nu 2. De volgende keer dat deze
macro wordt gestart, gaat de waarde naar 3, enzovoort.
De tweede actie van de macro Kom terug is het zichtbaar maken
van de boodschap. De eigenschap Zichtbaar (Visible) van de bood-
schap krijgt de waarde Ja. De boodschap wordt weer getoond.
Iedere keer dat de boodschap op het scherm komt, willen we een
andere boodschap in het besturingselement Boodschap plaatsen.
Om dit te realiseren hebben we een voorwaarde nodig. Als het
besturingselement Teller de waarde 2 heeft, wordt de derde actie
uitgevoerd. Als de waarde van het besturingselement Teller de
waarde 3 of 4 heeft, wordt respectievelijk de vierde of vijfde actie
uitgevoerd. De actie die uitgevoerd moet worden, is het plaatsen
van een boodschap in het besturingelement Boodschap van het
groene formulier. Afhankelijk van de waarde van besturings-
element Teller wordt een andere boodschap getoond.
Als voor de vierde keer een boodschap is getoond, wordt de
macro gestopt. De boodschap laten we niet meer verwijderen.
Hiervoor moet de opdrachtknop Kom terug uitgeschakeld worden.
Aangezien de opdrachtknop Verdwijn nog uitgeschakeld is, kan
dan alleen de opdrachtknop Einde nog gekozen worden.
Als het besturingselement Teller de waarde 4 heeft, worden ver-
schillende acties uitgevoerd. We moeten voor iedere actie aan-
geven dat die alleen uitgevoerd mag worden als het besturings-
element Teller de waarde 4 heeft. Om typewerk of kopieer- en
plakwerk te besparen kunnen we volstaan door in de voorwaarde
drie puntjes te typen. Hiermee geven we aan dat de voorwaarde
herhaald wordt. In de macro Kom terug wordt de vijfde tot en met
de achtste actie alleen uitgevoerd als het besturingselement Teller
de waarde 4 heeft.
Copyright 2007 Academic Service
8 Macros
267
De focus wordt verplaatst naar de opdrachtknop Einde. De eigen-
schap Ingeschakeld van de opdrachtknop wordt op Nee gezet.
Hiermee is die opdrachtknop niet meer te selecteren. Als laatste
wordt de macro beindigd door de actie MacroStoppen.
Als de teller ongelijk is aan de waarde 4, worden na het tonen van
de boodschap in het besturingselement Boodschap, de acties negen
tot en met elf uitgevoerd. De opdrachtknop Verdwijn wordt inge-
schakeld. Deze krijgt vervolgens de focus. Als laatste actie wordt
de opdrachtknop Kom terug uitgeschakeld.
Terzijde
Opmerkingen over voorwaarden
Het is niet mogelijk om zogeheten if...then...else-constructies
te maken. Wel kunnen we gebruikmaken van de operatoren
And, Or en Not.
Het nesten van voorwaarden (voorwaarden in voorwaarden) is
niet mogelijk.
Een voorwaarde in het macrovenster kan uitvergroot worden
door de voorwaarde te selecteren en vervolgens op de toetsen-
combinatie Shift+F2 te drukken (zoomen).
Het is efcinter om bij het herhalen van een voorwaarde de
drie puntjes (...) te gebruiken, dan de volledige voorwaarde
te herhalen. Als gebruik wordt gemaakt van de drie puntjes,
wordt de voorwaarde maar n keer gevalueerd.
De vierde en laatste macro kan gemaakt worden. Deze macro
wordt gestart na een klik op de opdrachtknop Einde. Het groene en
rode formulier worden gesloten. De macro heeft binnen de macro-
groep dezelfde naam gekregen als de naam van de opdrachtknop
die deze macro gaat starten, namelijk Einde. De volledige macro is
afgebeeld in guur 8.9.
Actie Argument Instelling
Sluiten Objecttype Formulier
Objectnaam Groenformulier
Opslaan n.v.t
Sluiten Objecttype Formulier
Objectnaam Roodformulier
Opslaan n.v.t

Figuur 8.11
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
268
De eerste actie sluit het groene formulier en de tweede actie het
rode formulier. Aangezien er geen tabellen aan de formulieren zijn
gekoppeld, is het derde argument van de actie Sluiten overbodig.
Hiermee zijn alle macros gemaakt. Sla de macrogroep op onder
de naam frmRoodformulier. Hiermee geven we aan dat deze groep
alle macros van het rode formulier bevat. De volledige naam van
een macro binnen een macrogroep wordt overigens voorafgegaan
door de naam van de macro-groep. De naam van de macrogroep
en de macros in de groep worden gescheiden door een punt. Zo
luidt de volledige macronaam van de macro Initieer bijvoorbeeld:
frmRoodformulier.Initieer.
Macros koppelen aan gebeurtenissen
De macros zijn klaar, nu gaan we ze koppelen aan de opdracht-
knoppen en de gebeurtenis openen van het rode formulier. Als
eerste gaan we de macros van de opdrachtknoppen koppelen.
Selecteer in het databasevenster het overzicht Formulieren.
Kies het formulier Roodformulier en klik op de knop Ontwerpen.
Het rode formulier wordt in ontwerpweergave getoond.
Selecteer de opdrachtknop Kom terug en plaats vervolgens het
eigenschappenvenster op het scherm (via de knop Eigenschappen
in de werkbalk).
Selecteer in het tabblad Gebeurtenis, uit het eigenschappenvenster,
de gebeurtenis Bij klikken, zie guur 8.12.
Selecteer in de keuzelijst frmRoodformulier.Kom terug. De macro
wordt nu gestart als op de opdrachtknop wordt geklikt.
Figuur 8.12
Copyright 2007 Academic Service
8 Macros
269
Selecteer vervolgens de opdrachtknop Verdwijn en selecteer op
identieke wijze in het tabblad Gebeurtenis de gebeurtenis Bij klik-
ken.
Kies de macro frmRoodformulier.Verdwijn.
Koppel op dezelfde wijze de macro frmRoodformulier.Einde aan
de opdrachtknop Einde.
Er moet nog een macro gekoppeld worden aan de gebeurtenis ope-
nen van het rode formulier. Selecteer de eigenschappen van het
rode formulier (via de Formulierkiezer, links van de liniaal of uit
de keuzelijst van het eigenschappenvenster).
Kies in het tabblad Gebeurtenis de gebeurtenis Bij openen en kies
in de keuzelijst de macro frmRoodformulier.Initieer.
Als het rode formulier wordt geopend, wordt de macro frmRood-
formulier .Initieer gestart. Deze opent onder andere het groene
formulier, zodat beide formulieren op het scherm worden getoond.
Opmerkingen
In paragraaf 6.6 hebben we opdrachtknoppen met de Wizard
gemaakt. Deze voeren n actie uit, bijvoorbeeld het afdrukken
van een rapport of het openen van een formulier. Die actie wordt
niet uitgevoerd door een macro, maar door een zogeheten gebeur-
tenisprocedure: een programma in VBA-code (Visual Basic for
Applications). Door het klikken op een opdrachtknop die door de
wizard is gemaakt, wordt een stukje VBA-code uitgevoerd. Als
meerdere acties noodzakelijk zijn, en meestal is dat zo, moeten we
van macros gebruikmaken. Die voeren dan de acties voor ons uit.
Het beveiligingsniveau in Access 2003 is aanzienlijk aangescherpt.
Een groot aantal macroacties mag niet meer uitgevoerd worden.
Bijvoorbeeld het onzichtbaar maken van een formulier of acties
die bestanden kunnen verwijderen. U kunt die opdrachten wel
uit laten voeren op een lager beveiligingsniveau. Het beveiligings-
niveau kunt u wijzigen via de menubalk Extra, Macro, Beveiliging.
Alle macros zijn gekoppeld; nu kunnen we ze testen.
Open het rode formulier. Het groene formulier wordt tevens auto-
matisch geopend.
Controleer de werking van de opdrachtknoppen.
Als een macro niet naar wens functioneert, controleer dan de
macro die niet goed werkt.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
270
Eventueel kunnen we de stap-functie van de macros inschakelen.
Hiermee worden de acties stap voor stap doorlopen. Deze functie
is in paragraaf 8.1 toegelicht. Ook als de macro wel goed functio-
neert, kunnen we deze
mogelijkheid benutten, want hiermee kunnen we goed waarnemen
wat het effect is van iedere actie.
In het volgende hoofdstuk gaan we een toepassingsprogramma
maken dat volledig door macros wordt gestuurd. Hiermee kunnen
we professioneel ogende applicaties maken.
Opgave
8.2 a. Maak de formulieren en macros zoals beschreven in deze para-
graaf.
b. Wijzig de macro zo dat er nog twee extra meldingen worden
getoond, voordat de boodschap niet meer te verwijderen is.
Copyright 2007 Academic Service
9 Het bouwen van een
toepassing
In de vorige hoofdstukken hebben we geleerd hoe we tabellen ont-
werpen en bouwen, hoe we querys, formulieren en rapporten ont-
wikkelen en hoe we macros maken. In dit hoofdstuk zullen we een
toepassing (programma/applicatie) maken die gebruikmaakt van
alle opgedane kennis. We maken een professionele lay-out en
laten alle ingewikkelde gebeurtenissen door opdrachtknoppen en
macros uitvoeren. Hierdoor ontstaat een toepassing die zonder
kennis van Access gebruikt kan worden.
De toepassing die we gaan toelichten, heeft betrekking op onze
database Reisbureau. We gaan voor het reisbureau t Zonnetje een
toepassing ontwikkelen, die in stappen zal worden uitgelegd. De
database t Zonnetje staat op de cd-rom. Hiermee kunnen we
theorie en toepassing direct controleren. Naast database t Zonnetje
staat op de cd-rom de database Basis zonnetje, waarin alleen de
gebruikte tabellen uit database t Zonnetje zijn opgenomen. In die
database kunnen we tijdens het lezen de instructies uitvoeren die
tot database t Zonnetje hebben geleid.
Voor het ontwikkelen van een toepassing moeten we altijd een
aantal stappen doorlopen.
1. De informatiebehoefte moet volledig bekend zijn. We moeten pre-
cies weten wat de toepassing moet gaan doen; dit uiteraard in goed
overleg met de opdrachtgever.
2. De overzichten, rapporten en formulieren die gewenst zijn, moeten
genormaliseerd worden. Hierdoor ontstaat een logisch datamodel.
3. Aan de hand van het logische datamodel worden de tabellen en
relaties gedenieerd.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
272
4. De menustructuur moet ontworpen worden. Hiermee bedoelen
we: hoe ziet het openingsscherm eruit (hoofdmenu) en de vervolg-
schermen (submenus). Deze kunnen we in Access maken met
schakelborden. Deze worden in paragraaf 9.5 toegelicht.
5. Vervolgens moeten de benodigde querys, formulieren, rapporten
en macros ontworpen worden. Doe dit per formulier of rapport;
als een versie naar behoren werkt, kan aan het volgende formulier
of rapport begonnen worden.
6. Maak de ontworpen menustructuur uit de vierde stap met behulp
van schakelborden.
Deze stappen worden in de volgende paragrafen besproken, waar-
bij de eerste twee punten in ons voorbeeld als bekend worden ver-
ondersteld. We gaan van ons bestaande datamodel uit.
9.1 Tabellen en relaties
We maken gebruik van de tabellen die in de vorige hoofdstukken
zijn gebruikt:
Tabel Klant: hierin liggen de klantgegevens opgeslagen.
Klantnummer is de sleutel. Als een nieuwe klant wordt toegevoegd,
krijgt die het klantnummer dat n hoger is dan het laatste klant-
nummer dat is toegevoegd. De klanten zijn zo doorlopend
genummerd met behulp van het gegevenstype Autonummering.
Standaard begint het type Autonummering bij de waarde 1 en
wordt bij ieder volgend record opgehoogd. Het is mogelijk om de
eerstvolgende waarde te veranderen. Dit staat beschreven in bijlage
A, onder Veldlengte.
Tabel Boeking: hierin worden de boekingen van reizen opgeslagen,
zie guur 9.1.
Het veld Boekingnummer is de sleutel. Ook hiervoor geldt dat de
nummers worden doorgenummerd. Een nieuwe boeking krijgt een
nummer dat n hoger is dan het hoogste boekingnummer tot dan
toe. Het veld Klantnummer is een vreemde sleutel. Hierop hebben
we standaard een keuzelijst met invoervak gemaakt; zie in guur
9.1 de eigenschap Rijbron van het veld Klantnummer. In paragraaf
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
273
6.3 is uitgelegd hoe dat in zijn werk gaat. Hetzelfde geldt voor het
veld Rfeisnummer, dit is ook een vreemde sleutel. Hierop is even-
eens een keuzelijst met invoervak gemaakt.
Verder zijn in paragraaf 6.1 de velden Annuleringsverzekering en
Betaalwijze toegevoegd. Ten slotte zijn op de vreemde sleutels, dus
Klantnummer en Reisnummer, indexen (met duplicaten!) geplaatst.
Het zoekproces wordt hierdoor aanzienlijk versneld. In het alge-
meen geldt: zet indexen op sleutelvelden (automatisch in Access)
en vreemde-sleutelvelden.
Tabel Reis: alle mogelijke reizen worden hierin opgeslagen. Het
veld Reisnummer is de sleutel. Op het veld Bestemmingcode,
vreemde sleutel, is een index geplaatst (duplicaten toegestaan!) en
een keuzelijst met invoervak.
Tabel Bestemming: alle mogelijke bestemmingen worden in deze
tabel opgeslagen. Het veld Bestemmingcode is de sleutel. De sleutel
is van het type tekst en kan daardoor niet doorgenummerd worden.
Immers, bestemmingcodes zijn willekeurig.
Tabel Constant: deze tabel wordt hier voor het eerst gentrodu-
ceerd; in voorgaande hoofdstukken is die tabel niet eerder
gebruikt. Waar komt die vandaan? Een constantentabel is bij de
Figuur 9.1
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
274
meeste databases aanwezig. Hierin worden namelijk de constanten
opgeslagen. Bij het normaliseren worden de constanten verwijderd,
zoals de bedrijfsgegevens op een overzicht, de omrekeningsfactor
van de euro naar de dollar, het BTW-percentage laag, het BTW-
percentage hoog en het percentage van de annuleringsverzekering.
We houden dan de tabellen over die onderling gerelateerd zijn. Die
constanten moeten echter wel ergens opgeslagen liggen, we hebben
ze immers nodig. We hebben bijvoorbeeld het BTW-percentage
verwijderd tijdens het normaliseren. Maar tijdens het afdrukken
van de facturen moet wel het BTW-percentage gebruikt worden
om het BTW-bedrag uit te rekenen. Het is natuurlijk niet handig
om dat percentage in een rekenveld van een formulier- of rapport-
ontwerp op te nemen. Verandert het BTW-percentage, dan zullen
we alle formulieren en rapporten moeten nalopen om te contro-
leren of die het BTW-percentage bevatten. Vervolgens moet het
gewijzigd worden.
We noemen het in de informatiekunde wel constanten, maar het
zijn geen wiskundige constanten. Ze zijn dus alleen maar gedu-
rende een beperkte periode constant. Na een bepaalde periode
moeten ze makkelijk aan te passen zijn. Die constanten gaan we
opslaan in de tabel Constant. Die tabel heeft maar n record en is
aan geen enkele andere tabel gerelateerd! In dit ene record staan de
gegevens van de constanten, bijvoorbeeld 19% voor het BTW-per-
centage. Aangezien de tabel Constant maar n record heeft, is het
niet noodzakelijk om een sleutelveld te deniren. We kunnen nu
de waarden eenvoudig aanpassen. We hoeven dan immers alleen
maar het betreffende record op het scherm te plaatsen en de nieuwe
waarden in te toetsen.
Welke velden hebben we opgeslagen in de tabel Constant? Het veld
AnnuleerPerc, hierin staat het percentage waarmee gerekend wordt
als we een annuleringsverzekering hebben afgesloten. Verder het
veld KinderKortingPerc, hierin staat het kortingspercentage dat
aan kinderen wordt gegeven. Voor alle reizen geldt dit tarief. In
hoofdstuk 7 hebben we in opdracht 7.3 een omzetlijst gemaakt
waarin gerekend werd met een kortingspercentage van 20% voor
de kinderen. Als dit percentage wijzigt, moet de bijbehorende
query aangepast worden. Voor een gebruiker van de applicatie,
die geen kennis heeft van Access, is dat lastig. Door het gebruik
van de tabel Constant is geen kennis van Access meer nodig. De
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
275
gebruiker van de toepassing kan dan zelf eenvoudig het percentage
veranderen. In alle berekeningen wordt vanaf dat moment met dit
gewijzigde percentage gerekend. Voor het wijzigen van de constan-
ten wordt een formulier ontworpen.
Aangezien we de tabel Constant nog niet eerder hebben gebruikt,
tonen we de structuur. Merk op dat in de tabel geen sleutelveld is
gedenieerd.
De percentages moeten als fractie ingevoerd worden. Kies voor het
annuleringspercentage de waarde 0,04 en voor het percentage van
de kinderkorting de waarde 0,20. Door bij de notatie op te geven
dat het percentages zijn, zorgen we ervoor dat de getallen als per-
centages worden getoond. In onze berekeningen met de percenta-
ges is het dan niet noodzakelijk steeds door 100 te delen. De veld-
lengte is Enkele precisie. Met dat type kunnen decimale getallen
ingevoerd worden, zie eventueel de extra informatie in bijlage A.
Terzijde
Tabel Switchboard Items: deze tabel wordt automatisch aan-
gemaakt nadat we de schakelborden hebben gemaakt. Access
houdt hierin bij welke schakelborden bij deze toepassing in
gebruik zijn. Deze tabel wordt door Access gebruikt en is voor
ons niet van belang.
9.2 Menustructuur
Zodra we de database t Zonnetje starten, wordt direct een hoofd-
menu getoond, waaruit we een keuze kunnen maken. Na het
kiezen van sommige opties krijgen we vervolgens een submenu.
Voordat we de toepassing gaan maken, moeten we die gewenste
menustructuren gaan ontwerpen. Hoe moeten het hoofdmenu en
de submenus eruit zien? Technisch worden die menus in Access
Veldnaam Gegevenstype Veldlengte Notatie Vereist
AnnuleerPerc Numeriek Enkele precisie Percentage Ja
KinderKortingPerc Numeriek Enkele precisie Percentage Ja
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
276
gemaakt met schakelborden; dit wordt in paragraaf 9.5 toegelicht.
Die schakelborden (menus) maken we dus als laatste, wanneer alle
formulieren en rapporten af zijn. Verwar deze menus niet met de
menubalk van Access. Deze menus zijn aparte formulieren die we
door de toepassing navigeren. Om verwarring over de naamgeving
te voorkomen worden ze binnen Access schakelborden genoemd.
Hoofdmenu
Boekingen
Overzichten
Onderhoud
Het hoofdmenu is zeer kort: het bevat drie items. Na de keuze
Boekingen kunnen reizen worden geboekt en gemuteerd. Na de
keuze Overzichten krijgen we, via een submenu, de keuze uit ver-
schillende overzichten. En na de keuze Onderhoud komen we in
een submenu waarin de basisgegevens gemuteerd kunnen worden.
Voor twee keuzemogelijkheden, Overzichten en Onderhoud heb-
ben we submenus gemaakt.
Submenu Overzichten
Klantenlijst
Vertreklijst
Omzetlijst
Dit submenu is gemaakt met een schakelbord. De Klantenlijst
drukt een alfabetisch klantenoverzicht af op de printer.
Op de Vertreklijst komen de gegevens te staan van klanten die op
reis gaan. De gebruiker kan een datumbereik opgeven. Vervolgens
worden van alle klanten die binnen dat datumbereik op reis gaan
de relevante gegevens naar de printer gestuurd.
De Omzetlijst toont per te boeken reis de omzet, alsmede de bij-
drage, als percentage, van die reis aan de totale omzet.
Submenu Onderhoud
Klanten
Reizen
Bestemmingen
Constant
Ook dit submenu is gemaakt met een schakelbord. Na het klikken
op een van de items wordt een formulier zichtbaar waarop we
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
277
mutaties in de basisgegevens kunnen doorvoeren. Het is niet nood-
zakelijk de formulieren en rapporten in de volgorde van de menus
te maken. Ieder formulier of rapport kan onafhankelijk van de
andere gemaakt worden vooropgesteld dat als twee of meer for-
mulieren met elkaar samenwerken, deze ook gelijktijdig gemaakt
worden. Als laatste kunnen we dan de gemaakte formulieren en
rapporten aan de menus toekennen.
Alvorens verder te lezen is het aan te raden om de bijbehorende
database t Zonnetje te verkennen om een indruk van de toepassing
te krijgen. Tijdens de uitleg zal worden gevraagd om het een en
ander uit te proberen en te wijzigen.
Let op!
Als we de database t Zonnetje starten, verschijnt niet het data-
basevenster. Er wordt direct een menu getoond waaruit een keuze
gemaakt kan worden. Als we de formulieren, rapporten of macros
willen bestuderen (of kopiren), moeten we de toepassing starten
met de Shift-toets ingedrukt!
Om dit hoofdstuk te volgen moeten we de formulieren, rapporten,
enzovoort kunnen bestuderen, dus moeten we met de Shift-toets
ingedrukt starten.
9.3 De formulieren
Zorg bij het ontwerpen van de formulieren voor een toepassing
voor een consequente lay-out, zodat op ieder formulier dezelfde
knoppen voorkomen (indien nodig), in dezelfde volgorde, op
dezelfde plaats. Hierdoor kunnen de gebruikers van de toepassing
de opdrachtknoppen en overige besturingselementen in de ver-
schillende formulieren blindelings vinden.
We gaan eerst het formulier maken waarmee klantgegevens
gemuteerd kunnen worden. Dit formulier zal gekoppeld worden
aan het submenu Onderhoud bij het item Klanten. Het venster
Klant mutaties, guur 9.2, wordt na de keuze getoond. We hebben
als eerste voor dit formulier gekozen omdat het duidelijk is en veel
verwantschap vertoont met de overige formulieren uit het menu-
item Onderhoud. Immers, wat is technisch het verschil tussen een
reis muteren of een klant muteren?
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
278
Open het formulier Klant en onderzoek de functionaliteit. Hoe is
zon formulier ontworpen? Er volgt hier een beschrijving van het
ontwerp. Om een goed inzicht in het ontwerp te krijgen kunnen
we het beste gebruikmaken van de database Basis Zonnetje. Hierin
zijn alleen de tabellen van reisbureau t Zonnetje opgenomen. In
die database kunnen we tijdens het lezen de instructies uitvoeren
die tot het denitieve ontwerp hebben geleid. Probeer zelf alles uit.
9.3.1 Formulier Klant
Selecteer in het databasevenster het overzicht Formulieren en klik
op de knop Nieuw.
Kies voor AutoFormulier: in kolomvorm en plaats in de keuzelijst
de tabel Klant. Hierna wordt in formulieropmaak de eerste klant
getoond. Dit is ons uitgangspunt om het formulier handmatig aan
te passen aan onze wensen.
Sla dit formulier op onder de naam Klant.
Als eerste gaan we een aantal eigenschappen van het formulier
aanpassen.
Toon daartoe het formulier in de ontwerpweergave.
Zet vervolgens het eigenschappenvenster van het formulier op het
scherm, zie guur 9.3.
Figuur 9.2
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
279
Wijzig hierin de eigenschappen zoals in guur 9.4 wordt getoond.
Toelichting eigenschappen
Bijschrift: dit wordt weergegeven in de bovenste regel van het for-
muliervenster.
Schuifbalken: in ons formulier hebben we geen schuifbalken
nodig.
Recordkiezers: een recordkiezer is het pijltje dat aan de linkerkant
van het record getoond wordt. Handig indien rijen worden weer-
gegeven, maar bij een enkelvoudig formulier overbodig.
Navigatieknoppen: de standaard navigatieknoppen verwijderen we
uit ons formulier. We zetten zelf nieuwe grote navigatieknoppen
op ons formulier. Die zien er professioneler uit dan die kleine stan-
daardknopjes.
Figuur 9.3
Eigenschap Instelling
Bijschrift Klant mutaties
Schuifbalken Geen
Recordkiezers Nee
Navigatieknoppen Nee
Recordbegrenzingslijnen Nee
Min.- en max.-knop Geen
Figuur 9.4
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
280
Recordbegrenzingslijnen: dit zijn de lijnen die bij een doorlopend
formulier tussen de verschillende records scheidingslijnen trekken.
Er wordt in ons formulier maar n klant (record) tegelijk getoond,
dus zijn deze lijnen overbodig.
Min.- en max.-knop: hiermee geven we aan of de knoppen
Minimaliseren en Maximaliseren in de bovenste regel van het for-
mulier worden getoond. Aangezien we niet willen dat het formulier
verkleind of vergroot wordt, hebben we deze knoppen uitgescha-
keld.
Tip: klik om meer over de eigenschappen te weten te komen met
de muis in een eigenschap en druk op functietoets F1. Er verschijnt
een scherm met informatie over die eigenschap.
We gaan een vrolijk kleurtje aan ons formulier geven, in plaats van
dat saaie grijs.
Klik met de muis op de balk Detail in de ontwerpweergave. Maak
het eigenschappenvenster actief, de eigenschappen van de detail-
sectie worden getoond. Eventueel kun je de sectie Details uit de
getoonde keuzelijst in het eigenschappenvenster selecteren.
Hierin staan alle objecten uit het formulier.
Selecteer vervolgens in het tabblad Opmaak de eigenschap Achter-
grondkleur. We hoeven ons geen zorgen te maken over het num-
mer dat daar staat, het zou erg lastig zijn als we al die nummers
uit ons hoofd moeten leren om een leuk kleurtje te selecteren. Klik
op de drie puntjes achter de eigenschap Achtergrondkleur. Er ver-
schijnt een venster waaruit we een kleur kunnen kiezen, zie guur
9.5.
Kies hierin de lichtgele kleur en klik op de knop OK. Bekijk het
voorlopige resultaat in de formulierweergave.
Vervolgens gaan we enige cosmetische wijzigen aanbrengen om de
lay-out te verfraaien. Via de Werkset gaan we lijnen trekken en een
label (tekst) boven het formulier plaatsen.
Plaats het formulier weer in de ontwerpweergave.
Sleep de balk Detail ongeveer anderhalve centimeter naar beneden,
zodat er in de Formulierkoptekst ruimte onstaat.
Selecteer in de Werkset het Label, plaats deze met behulp van klik-
en-sleep in de Formulierkoptekst.
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
281
Druk op de Enter-toets, zodat het label wordt geselecteerd. Plaats
het eigenschappenvenster op het scherm en verander in de tab
Opmaak de eigenschap Bijschrift in Klant gegevens.
Verander tevens in hetzelfde tabblad de eigenschap Tekengrootte
in 24. Hierdoor wordt de tekst in puntgrootte 24 (groot) weer-
gegeven, zie guur 9.6.
Trek een lijn, via de knop Lijn uit de Werkset, onder het label
Klantgegevens in de Formulierkoptekst. De dikte van de lijn kun-
nen we veranderen door de eigenschap Randbreedte, in het tabblad
Opmaak, te wijzigen in 2 pt.
Figuur 9.5
Figuur 9.6
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
282
De achtergrondkleur van de koptekst is nog grijs, deze moet
dezelfde kleur krijgen als de detailsectie. Dubbelklik daartoe op de
balk Formulierkoptekst of selecteer deze uit de keuzelijst van het
eigenschappenvenster en verander in het eigenschappenvenster de
eigenschap Achtergrondkleur in lichtgeel.
Het telefoonnummer en de postcode zijn niet bij alle klanten vol-
ledig zichtbaar, vergroot daarom die tekstvakken een paar milli-
meter. Het klantnummer wordt in een te groot tekstvak weer-
gegeven, verklein daarom dit tekstvak.
Gebruik ook de Formuliervoettekst om daarin de gewenste naviga-
tieknoppen te plaatsen en een lijn te tonen. Sleep de onderste rand
van de balk Formuliervoettekst ongeveer anderhalve centimeter
naar beneden. Hierdoor worden de grijze rasterlijnen van de voet-
tekst zichtbaar.
Trek ook in de voettekst een lijn, via de knop Lijn uit de Werkset.
Plaats deze boven in de Formuliervoettekst. Verander de kleur
van de voettekst in lichtgeel door op de balk Formuliervoettekst te
klikken en vervolgens de eigenschap Achtergrondkleur te verande-
ren.
Sleep vervolgens de rechterkant van het formulier een aantal centi-
meters naar rechts om ruimte te maken voor de opdrachtknoppen,
zie het voorlopige resultaat in guur 9.6.
We gaan het formulier compleet maken door de gewenste opdracht-
knoppen toe te voegen. Het toevoegen van opdrachtknoppen is in
paragraaf 6.6 toegelicht. In totaal zijn er acht opdrachtknoppen
nodig, zie guur 9.2. Vijf opdrachtknoppen voor de recordnaviga-
tie (eerste record, vorige record, volgende record, laatste record en
het zoeken naar een
record) en drie opdrachtknoppen voor de recordbewerkingen
(nieuw record creren, record verwijderen en het herstellen van
een bewerking). We gaan de eerste opdrachtknop, eerste record
selecteren, op het formulier plaatsen.
Selecteer in de Werkset de Opdrachtknop en plaats deze links
onder de lijn in de Formuliervoettekst van het formulier.
We hoeven nog geen rekening te houden met de afmetingen en de
exacte plaats op het formulier, dat corrigeren we later. Er wordt
vervolgens een wizard gestart die ons vraagt wat er moet gebeu-
ren als op die knop wordt geklikt, zie guur 9.7. Als de Wizard
niet wordt gestart, klik dan op de knop Wizards voor besturings-
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
283
elementen in de Werkset en plaats opnieuw een opdrachtknop in
het formulier.
Kies uit de Categorien voor Recordnavigatie en hierin de actie
Naar eerste record gaan.
Selecteer in het volgende venster Afbeelding en Naar eerste 2.
Geef in het volgende scherm de opdrachtknop de naam Eerste en
voltooi de wizard.
Zet op dezelfde manier de overige zeven opdrachtknoppen, nog
drie in de Formuliervoettekst en vier in de sectie Detail, op het
scherm, zie guur 9.8. Zet ze ongeveer op de gewenste plaats, zie
guur 9.2.
Geef als laatste de opdrachtenknoppen de juiste afmetingen en
sleep ze naar de gewenste plaatsen.
Selecteer om alle opdrachtknoppen dezelfde afmetingen te geven
de opdrachtknoppen met behulp van Shift+muisklik; hierdoor
kunnen we meerdere elementen tegelijkertijd selecteren.
Figuur 9.7
Categorie Actie Type (Figuur/Picture) Naam
Recordnavigatie Naar vorige record gaan Naar vorige 2 Vorige
Recordnavigatie Naar volgende record gaan Naar volgende 2 Volgende
Recordnavigatie Naar laatste record gaan Naar laatste 2 Laatste
Recordbewerkingen Nieuw record toevoegen Ga naar nieuwe 2 Nieuw
Recordnavigatie Record zoeken Verrekijker 2 Zoek
Recordbewerkingen Record ongedaan maken Ongedaan maken Herstel
Recordbewerkingen Record verwijderen Prullenbak 2 Verwijder
Figuur 9.8
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
284
Activeer het eigenschappenvenster en wijzig de eigenschappen
Breedte en Hoogte in respectievelijk 1,5 cm en 0,6 cm, zie guur
9.9. Access kan de afmetingen automatisch wijzigen in een iets
afwijkend formaat, zie de waarde 1,501 in guur 9.9.
De opdrachtknoppen hebben standaard een Tabstop. Dat wil zeg-
gen: als we met de Tab-toets door de velden van het formulier
stappen, wordt ook gestopt op de opdrachtknoppen. Dat kunnen
we voorkomen door aan te geven dat de opdrachtknoppen geen
Tabstop moeten bezitten.
Selecteer alle opdrachtknoppen met behulp van Shift+muisklik.
Maak vervolgens het eigenschappenvenster actief en zet de eigen-
schap Tabstop, in het tabblad Overige, op Nee.
Sleep de opdrachtknoppen naar hun gewenste plek en onderzoek
het eindresultaat in de formulierweergave. Controleer de werking
van de opdrachtknoppen.
De Zoekknop toont een venster waarin we kunnen opgeven wat
we willen zoeken. Er wordt gezocht in het tekstvak dat actief is,
voordat geklikt wordt op de Zoekknop. Een volledige beschrijving
van dit venster is in paragraaf 5.5.6 toegelicht. Met de herstelknop
kunnen we typefouten herstellen. Stel we wissen per ongeluk de
Figuur 9.9
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
285
postcode van een klant. Door op de herstelknop te klikken komt de
oorspronkelijke postcode weer tevoorschijn.
9.3.2 Formulier Bestemming
Het formulier Bestemming is op precies dezelfde manier gemaakt
als het formulier Klant, zie guur 9.10.
Het enige verschil is dat het Bijschrift Bestemming mutaties
is geworden en dat het formulier is opgeslagen onder de naam
Bestemming.
9.3.3 Formulier Reis
Het formulier Reis is op precies dezelfde manier gemaakt als het
formulier Klant, zie guur 9.11.
Het enige verschil is dat het Bijschrift Reis mutaties is geworden
en dat het formulier is opgeslagen onder de naam Reis.
Figuur 9.10
Figuur 9.11
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
286
9.3.4 Formulier Constant
Het formulier Constant is het eenvoudigste formulier, zie guur
9.12.
In dit formulier kunnen we onze constante gegevens muteren. Aan-
gezien er maar n record in dit formulier zit met de waarden van
onze constanten, zijn alle opdrachtknoppen niet nodig. Navigeren
door de records is niet nodig. Nieuwe records toevoegen of verwij-
deren is niet toegestaan. Het formulier is op dezelfde wijze
gemaakt als het formulier Klant, maar dan zonder de opdracht-
knoppen. Hierbij zijn de labels langer gemaakt en is de naam voluit
geschreven. De tekstvakken moeten hierdoor ook verplaatst wor-
den.
Het Bijschrift is Constant mutaties geworden en is opgeslagen
onder de naam Constant. Als we met de Tab-toets door de velden
van een formulier stappen, wordt automatisch na het laatste veld
het volgende record voorgezet. Dat mag in dit formulier niet ge-
beuren, aangezien er maar n record is. Een nieuw record zou dan
getoond worden. We kunnen voorkomen dat na het laatste veld, via
de Tab-toets, een nieuw record wordt geselecteerd.
Plaats het eigenschappenvenster van het formulier op het scherm.
Selecteer hierin het tabblad Overige en verander de eigenschap
Werking tabtoets in Huidige record.
Tip: Tijdens het werken met een database zul je merken dat de data-
base erg groot kan worden. Access slaat namelijk achter de scher-
men alles op. Ook als je bijvoorbeeld een record, formulier of rap-
port verwijdert, blijft dit in de database onzichtbaar aanwezig.
Om dit fysiek te verwijderen moet je de database comprimeren:
Extra, Database hulpprogrammas, Database comprimeren en her-
Figuur 9.12
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
287
stellen. Soms heeft dit een verbazingwekkende vermindering van
wel 90% tot gevolg. Daarnaast kun je deze optie toepassen als er
een beschadiging aan de gegevens in de database is opgetreden.
9.3.5 Formulier Boeking
De belangrijkste activiteit van het reisbureau, het boeken van rei-
zen, vindt plaats in het formulier Boeking (zie guur 9.13).
Dit formulier wijkt iets af van de vier voorgaande formulieren. Er
is onder andere een extra opdrachtknop in het formulier geplaatst,
waarmee een rapport kan worden afgedrukt. Het rapport is de
getoonde boeking in factuurvorm. Verder zijn er drie rekenvelden
gemaakt. Die rekenvelden maken gebruik van constanten, name-
lijk het percentage korting dat aan kinderen wordt gegeven en het
percentage van de annuleringsverzekering. Hierdoor dienen ook
de gegevens uit de tabel Constant gebruikt te worden. Tevens zijn
er enige macros gemaakt om de juiste werking van dit formulier
mogelijk te maken.
Het ontwerp van het boekingformulier is in overleg met reisbureau
t Zonnetje totstandgekomen. We moeten dus eerst bepalen wat
Figuur 9.13
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
288
op het scherm getoond moet worden. Nadat is vastgelegd wat de
gewenste gegevens zijn, kan het formulier ontworpen worden. We
kunnen de Wizard Formulier gebruiken om alle gegevens op het
scherm te krijgen, door de afzonderlijke tabellen te selecteren en
hieruit de gewenste velden. Bij formulieren waarin n tabel
gebruikt wordt, is dat een handige methode. Gebruiken we meer
tabellen op n formulier, dan is het verstandiger om eerst een
query te maken die alle velden bevat die op het formulier moeten
komen. We kunnen dan tevens een sorteervolgorde aangeven of
gegevens groeperen. In dit voorbeeld hebben we voorafgaand aan
het formulierontwerp een query gemaakt. Die is opgeslagen onder
de naam frmBoeking in het overzicht Querys van het databaseven-
ster. Aan de naam van de query kunnen we zien bij welk formulier
deze gebruikt wordt. De stappen om het formulier te maken wor-
den nu toegelicht. Gebruik de database Basis Zonnetje om de han-
delingen na te spelen.
Selecteer in het overzicht Querys in het databasevenster de optie
Query maken in ontwerpweergave.
Voor de query hebben we vier databasetabellen nodig, namelijk
Boeking, Klant, Reis en Bestemming.
Klik op alle velden die we nodig hebben. Van de tabel Boeking
hebben we alle velden nodig, selecteer daartoe eenvoudig de * in
de tabel Boeking. Er wordt getoond Boeking.*. Selecteer uit de
tabel Klant de velden Naam, Adres, Woonplaats en
Telefoonnummer; uit de tabel Reis de velden Vertrekdatum, Aantal
dagen en Prijs per persoon, en ten slotte uit de tabel Bestemming
de velden Plaats en Land.
Sla vervolgens de query op onder de naam frmBoeking. Hierdoor
kunnen we later in dit overzicht eenvoudig terugzoeken bij welk
formulier ( frm) deze query hoort. Het is verstandig om de query te
controleren in de gegevensbladweergave.
De query is gemaakt, nu gaan we het formulier ontwikkelen.
Selecteer in het databasevenster het overzicht Formulieren en klik
op de knop Nieuw.
Kies Autoformulier: in kolomvorm, selecteer in de keuzelijst de
zojuist gemaakte query frmBoeking en klik op de knop OK.
Sla dit basisontwerp op onder de naam Boeking.
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
289
De lay-out moet aangepast worden aan de wensen van het reis-
bureau. Op dezelfde manier als in het formulier Klant zijn een
aantal wijzigingen aangebracht. Als eerste zijn de eigenschappen
van het formulier gewijzigd, zie guur 9.4. Alleen de eigenschap
Bijschrift is veranderd in Boeking mutaties.
In de Formulierkoptekst is een label en een lijn getrokken. Tevens
is de achtergrondkleur van die sectie veranderd in lichtgeel.
Sleep de onderste rand van de balk Formuliervoettekst anderhalve
centimeter naar beneden en plaats in die sectie bovenin een lijn.
Verander ook in de sectie Formuliervoettekst de achtergrondkleur
in lichtgeel.
Klik hierna op de balk Detail en verander de achtergrondkleur in
lichtgeel.
Verplaats vervolgens alle velden zodanig dat dezelfde lay-out ont-
staat als in guur 9.13.
Vervolgens zijn de tekstvakken waarin geldbedragen worden
getoond verkleind. Enkele andere tekstvakken zijn juist vergroot
aangezien niet alle gegevens volledig werden weergegeven.
De volgende stap is het plaatsen van de opdrachtknoppen. Op
dezelfde wijze als in het formulier Klant kunnen de opdrachtknop-
pen op het formulier worden geplaatst. De vier opdrachtknoppen
voor de navigatie worden onder de lijn in de Formuliervoettekst
geplaatst. De vier opdrachtknoppen die gelijk zijn aan de knoppen
in het formulier Klant kunnen aan de rechterkant van het formu-
lier, in de sectie Detail, worden geplaatst. Hiervoor moet het for-
mulier aan de rechterkant vergroot worden.
De opdrachtknop die een factuur (rapport) van de boeking afdrukt
op de printer is een bijzondere opdrachtknop. Die is pas op het for-
mulier geplaatst nadat het rapport van de factuur is gemaakt. Het
maken van dit rapport wordt in de volgende paragraaf toegelicht.
Deze opdrachtknop is niet met de Wizard gemaakt. De beschik-
bare opdrachtknoppen van de Wizard voldoen niet. We hebben
hiervoor een macro gemaakt. Na het klikken op de knop wordt die
macro gestart, deze drukt het rapport af.
Om die opdrachtknop op het formulier te plaatsen voeren we de
volgende acties uit.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
290
Plaats het formulier in de ontwerpweergave.
Klik in de Werkset op de knop Wizards voor besturingselementen.
Let op, de Wizard wordt nu uitgeschakeld!
Plaats een opdrachtknop op het formulier, ongeveer op de gewens-
te plaats. Er wordt nu geen Wizard gestart. Als toch de Wizard
wordt gestart, annuleer deze dan. Herstel de oorspronkelijke
instelling van de Wizards voor besturingselementen, zodat in de
Werkset de Wizard weer actief is voor de besturingselementen.
Plaats het eigenschappenvenster van de zojuist gemaakte opdracht-
knop op het scherm. Verander in het tabblad Overige, de eigen-
schappen Naam in Drukaf en Knopinfo in Factuur afdrukken. De
tekst van de eigenschap Knopinfo wordt getoond zodra we met de
muiswijzer boven de opdrachtknop komen.
Selecteer het tabblad Opmaak en klik in de eigenschap Afbeelding
op de drie puntjes. Hierdoor wordt een venster getoond met
alle mogelijke guren voor op de opdrachtknop, zie guur 9.14.
Selecteer hieruit de Printer en klik op de knop OK.
Wijzig in ditzelfde tabblad de afmetingen van de opdrachtknop
(1,5 cm 0,6 cm) en sleep de opdrachtknop naar zijn gewenste
plaats.
Als we nu op de opdrachtknop klikken, gebeurt er helemaal niets.
Er wordt geen actie uitgevoerd. Die actie gaan we middels een
macro maken. Die macro zullen we later in deze paragraaf toelich-
ten.
Eerst maken we de sectie Detail af. Er zijn drie rekenvelden op
het formulier, te weten Subtotaal, Annuleringskosten en Totaal
bedrag. Voor Subtotaal en Annuleringskosten zijn onze constanten
nodig. Het Subtotaal is het bedrag van de volwassenen tezamen
met het bedrag dat voor de kinderen betaald moet worden. Voor
kinderen wordt een kortingspercentage gehanteerd, dat in de tabel
Constant is opgeslagen. De Annuleringskosten worden bepaald
Figuur 9.14
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
291
door een percentage van het subtotaal. Het percentage van de annu-
leringsverzekering ligt ook opgeslagen in de tabel Constant. Zoals
eerder opgemerkt heeft de tabel Constant geen enkele relatie met
de overige tabellen uit de database. Deze wordt alleen gebruikt
als de constante gegevens nodig zijn. De constante gegevens staan
ook in het formulier Constant. We kunnen dus gebruikmaken van
de tabel Constant of van het formulier Constant. Wij maken in al
onze voorbeelden gebruik van het formulier Constant. De tabel
Constant werkt niet in alle gevallen correct, vandaar onze keuze.
Om de gegevens uit het formulier Constant te kunnen benaderen
moet het formulier geopend zijn. Dat betekent: als we het formu-
lier Boeking openen, moet ook het formulier Constant geopend
worden. We kunnen dat met behulp van een macro automatisch
laten uitvoeren. Bij het sluiten van het formulier Boeking moet dan
uiteraard het formulier Constant ook gesloten worden. Ook hier-
voor gaan we een macro maken. Het maken van de macros wordt
later in deze paragraaf toegelicht. In de ontwerpfase hebben we die
macros nog niet gemaakt en openen we zelf (handmatig) het for-
mulier Constant.
Activeer het databasevenster, terwijl het formulier Boeking in de
ontwerpfase actief blijft.
Klik op het overzicht Formulieren en open het formulier Constant.
Selecteer weer het venster van het formulier Boeking, in de ont-
werpfase. Beide formulieren zijn nu geopend! Nu kunnen we de
tekstvakken maken en controleren of de berekeningen goed zijn
ingevoerd.
We plaatsen eerst het tekstvak Subtotaal op het scherm. Klik met
de muis op de knop Tekstvak in de Werkset en plaats het tekstvak
in de Detailsectie.
Plaats het eigenschappenvenster van het bijbehorende label op het
scherm en wijzig de eigenschap Bijschrift, in het tabblad Opmaak,
in Subtotaal.
Klik op het zojuist gemaakte tekstvak en verander de eigenschap
Naam, in het tabblad Overige, in Subtotaal.
Klik op de tab Gegevens en verander de eigenschap
Besturingselementbron in: =[Aantal volwassenen]*[Prijs per
persoon]+[Aantal kinderen] *[Prijs per persoon]*
(1-[Formulieren]![Constant]![KinderKortingPerc]).
Gebruik eventueel de drie puntjes in de eigenschap
Besturingselementbron om de Opbouwfunctie voor expressies te
starten, zodat deze lange formule wat eenvoudiger is in te voeren.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
292
In deze formule wordt het subtotaal uitgerekend. Het bedrag dat
voor de kinderen betaald moet worden, is gelijk aan het aantal
kinderen de prijs per persoon (1 minus het kortingspercentage
voor de kinderen). Het kortingspercentage voor de kinderen wordt
uit het formulier Constant gehaald. Hierdoor wordt er exibel ge-
werkt, we kunnen immers middels het formulier Constant eenvou-
dig een wijziging in het kortingspercentage aanbrengen.
Wijzig de laatste eigenschap Notatie van het tekstvak, in het tab-
blad Opmaak, in Valuta. We kunnen ook als notatie Euro kiezen.
Onafhankelijk van de valuta-instelling in Windows wordt dan al-
tijd het euro-symbool getoond.
Controleer de formule in de formulierweergave.
Let op: als het formulier Constant niet geopend is, kan deze bere-
kening niet uitgevoerd worden en wordt in het tekstvak, in de for-
mulierweergave, de volgende foutmelding afgedrukt: #Naam?.
Plaats vervolgens het tweede rekenveld op het formulier met de
volgende eigenschappen:
Bijschrift: Annuleringskosten
Naam: Annuleringskosten
Besturingselementbron: =IIf([Annuleringsverzekering];
[Formulieren]![Constant]![AnnuleerPerc] *[Subtotaal];0)
Notatie: Valuta (of Euro).
In de berekening wordt het subtotaal vermenigvuldigd met het per-
centage dat betaald moet worden voor de annuleringsverzekering.
Dat percentage ligt ook opgeslagen als een constante. Echter, als
geen annuleringsverzekering is afgesloten, hoeft er ook niet voor
betaald te worden. Dat wordt gerealiseerd met de IIf()-functie.
Deze is in paragraaf 5.9.3 toegelicht.
Het laatste rekenveld dat toegevoegd moet worden, heeft de vol-
gende eigenschappen:
Bijschrift: Totaal bedrag
Naam: Totaal bedrag
Besturingselementbron: =[Subtotaal]+[Annuleringskosten]
Notatie: Valuta (of Euro).
Sleep vervolgens de drie rekenvelden naar de gewenste plaats op
het formulier en pas hun afmetingen aan.
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
293
In het formulier zien we bij het veld Betaalwijze, in formulierweer-
gave, de getallen 1, 2 of 3 staan. In paragraaf 6.1 hebben we voor
de betaalwijze een groepsvak gemaakt, waarbij er drie mogelijk-
heden waren: Contant, Pinnen of Acceptgiro. We gaan hier
opnieuw een groepsvak van maken.
Verwijder als eerste het besturingselement Betaalwijze, hiervoor in
de plaats komt een groepsvak.
Klik met de muis op de knop Groepsvak van de Werkset. De
Wizard moet in de werkset actief zijn.
Verplaats hierna de muis naar het formulier en plaats het groeps-
vak op ongeveer de gewenste plaats. De Wizard wordt actief.
Typ de labelnamen Contant, Pinnen en Acceptgiro.
Kies in het volgende venster voor Ja, de standaardoptie is:
Acceptgiro.
Accepteer in het scherm dat hierna verschijnt de standaardwaarden
1, 2 en 3 die met de labelnamen overeenkomen. Achter de scher-
men worden niet de labelnamen opgeslagen, maar de bijbehorende
getallen.
Geef in het volgende venster aan dat de geselecteerde optie opge-
slagen moet worden in het veld Betaalwijze. Kies de tweede optie,
Opslaan in dit veld, en selecteer het veld Betaalwijze.
Selecteer in het voorlaatste venster Selectievakjes en Normaal.
Kies als laatste de naam Betaalwijze voor het groepsvak.
Het groepsvak staat in het formulier, de keuzemogelijkheden wor-
den onder elkaar afgebeeld, maar we zien ze liever naast elkaar.
Ook wordt het kader in het uiteindelijke formulier niet getoond, zie
guur 9.13. De verschillende elementen van het groepsvak moeten
verplaatst worden.
Selecteer in de ontwerpweergave het groepsvak.
Verplaats alleen het label Betaalwijze naar de gewenste plaats,
onder het label Annuleringsverzekering. Let op: als we met de
muiswijzer boven het groepsvak komen, verschijnt een handje met
vijf vingers of met de wijsvinger. Het handje met de vijf vingers
verplaatst alle elementen die geselecteerd zijn en het handje met
de wijsvinger alleen het aangewezen element. Om alleen het label
Betaalwijze te selecteren moet dus de wijsvinger zichtbaar zijn,
anders verplaatsen alle elementen zich.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
294
Selecteer het label Contant en sleep het naar de gewenste plaats
(nu wel het handje van de muiswijzer gebruiken, zodat het keuze-
vakje n het label tegelijkertijd verplaatst worden). Verplaats ook
de overige twee labels.
Maak het kader van het groepsvak zo klein mogelijk, zodat de
Formuliervoettekst tegen het groepsvak geplaatst kan worden.
De laatste verandering die met het groepsvak uitgevoerd moet wor-
den, is het onzichtbaar maken van het kader. Denk erom dat het
kader niet verwijderd kan worden, anders wordt het gehele groeps-
vak verwijderd. Selecteer het kader en activeer het eigenschappen-
venster. Klik op de tab Opmaak en wijzig de eigenschap Randstijl
in Transparant.
Het formulier nadert zijn eindstadium. Er zijn nog enige wijzigin-
gen die aangebracht moeten worden. Met de Tab-toets kunnen
alle elementen van het formulier benaderd worden, dat is niet
wenselijk. Alleen de velden die ingevoerd moeten worden bij het
boeken van een reis moeten een tabstop hebben, dus klantnummer,
reisnummer en de boekinggegevens. De andere elementen op het
formulier mogen geen tabstop hebben.
Selecteer in de ontwerpweergave van het formulier met behulp
van Shift+muisklik de volgende elementen: alle opdrachtknop-
pen, de drie rekenvelden, de velden Naam, Adres, Woonplaats,
Telefoonnummer, Vertrekdatum, Aantal dagen, Prijs per persoon,
Plaats en Land.
Activeer het eigenschappenvenster, klik op de tab Overige en ver-
ander de eigenschap Tabstop in Nee.
De velden die geen tabstop hebben, kunnen wel benaderd worden
met de muis, we kunnen gewoon in het veld klikken. Voor de drie
rekenvelden willen we dat voorkomen, er valt immers niets in die
velden te veranderen of te zoeken.
Selecteer de drie rekenvelden in de ontwerpweergave (Shift+
muisklik) en activeer het eigenschappenvenster.
Klik op de tab Gegevens en wijzig de eigenschap Ingeschakeld in
Nee. De drie rekenvelden krijgen automatisch een andere achter-
grondkleur en zijn niet meer met de muis te benaderen.
De adresgegevens en de reisgegevens zijn ook met de muis te bena-
deren. Hierdoor kunnen we per ongeluk gegevens wijzigen. Stel
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
295
dat we per ongeluk het veld Prijs per persoon wijzigen, dan geldt
dat direct ook voor alle andere boekingen die naar die reis zijn
geboekt. Of we wijzigen per ongeluk de vertrekdatum. Alle reizen
naar die bestemming hebben dan direct die nieuwe vertrekdatum,
met alle gevolgen van dien. Als de vertrekdatum van een reis wel
moet worden gewijzigd, moet dat in het formulier Reis veranderd
worden. We kunnen die velden niet uitschakelen zoals met de
rekenvelden is gebeurd. We zouden dan niet meer kunnen zoeken
op onze gegevens. Om te kunnen zoeken op een bepaald waarde,
moeten we met de muis in het veld klikken, waarin gezocht moet
worden. Vervolgens klikken we op de knop Zoek. Uitschakelen
kan om die reden dus niet. Maar Access biedt uitkomst, we kunnen
een eigenschap veranderen, waardoor we met de muis wel het veld
kunnen selecteren, maar niet kunnen wijzigen.
Selecteer tegelijkertijd, met Shift+muisklik, de velden: Naam,
Adres, Woonplaats, Telefoonnummer, Aantal dagen, Prijs per per-
soon, Bestemming.Plaats, Land en Vertrekdatum.
Activeer het eigenschappenvenster en klik op de tab Gegevens.
Wijzig de eigenschap Vergrendeld in Ja.
Er is nog n wijziging nodig in het formulierontwerp. Als we
in de formulierweergave met de Tab-toets door de velden lopen,
wordt er geen logische volgorde aangehouden. Door het ver-
plaatsen van onze velden hebben we geen logische tabvolgorde
meer. De tabvolgorde kunnen we veranderen door, in de ontwerp-
weergave van het formulier, in het menu te kiezen voor Beeld,
Tabvolgorde: dit kan ook met een rechtermuisklik (snelmenu). Er
wordt een venster getoond met de tabvolgorde, zie guur 9.15
Figuur 9.15
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
296
Hierin kunnen we door te selecteren en te slepen de tabvolgorde
wijzigen. Het klantnummer moet bovenaan komen te staan, dan
het reisnummer en vervolgens de boekinggegevens, zie guur 9.15.
De tabvolgorde n het veld betaalwijze doet niet ter zake. Van die
elementen hebben we de tabstop immers uitgeschakeld.
Het ontwerp van het formulier is klaar. Ten slotte gaan we de
macros die nodig zijn voor de juiste werking van dit formulier
maken.
Macros van het formulier Boeking
Het werken met macros is in hoofdstuk 8 toegelicht. De macros
van onze toepassing zijn ondergebracht in macrogroepen, zie even-
tueel hoofdstuk 8. De groepen zijn zo verdeeld dat alle macros van
n formulier of rapport onder n macrogroep vallen. Willen we
een macro van een bepaald formulier of rapport bestuderen, open
dan in het databasevenster het overzicht Macros. De groepsnaam
van de macro heeft dezelfde naam als het formulier of rapport,
voorafgegaan door respectievelijk de letters frm of rpt. In ons voor-
beeld zijn de macros van het formulier Boeking te vinden onder de
naam frmBoeking in het overzicht Macros van het databaseven-
ster.
We gaan de macros maken die nodig zijn voor het formulier
Boeking.
Klik op het overzicht Macros van het databasevenster. Klik op de
knop Nieuw. Het macrovenster wordt getoond, zie guur 9.16.
Mocht er in het macrovenster de kolommen Macronaam en
Voorwaarde niet voorkomen, klik dan in de werkbalk op de knop-
pen Macronamen en Voorwaarden. De kolom Voorwaarde is voor
de macros van het formulier Boeking niet noodzakelijk.
Er zijn voor het formulier Boeking drie macros nodig. Een macro
die automatisch het formulier Constant opent als het formulier
Boeking wordt geopend. Een macro die uitgevoerd wordt als op de
opdrachtknop Printer wordt geklikt. Deze macro moet een rap-
port op de printer afdrukken. De laatste macro sluit het formulier
Constant als het formulier Boeking wordt gesloten.
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
297
Voer de eerste macro in zoals weergegeven in guur 9.17, en sla de
macrogroep op onder de naam frmBoeking.
De macro frmBoeking.Open opent met de actie FormulierOpenen
het formulier Constant. Met het argument Venstermodus kunnen
we de weergave van het formulier opgeven. Wij hebben geselec-
teerd Verborgen, waardoor het formulier wel geopend wordt, maar
niet getoond. We zijn immers alleen genteresseerd in het formulier
Boeking en niet in het formulier Constant.
De tweede macro moet een rapport afdrukken. Er wordt een fac-
tuur in rapportvorm naar de printer gestuurd, zie guur 9.18.
Figuur 9.16
Figuur 9.17
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
298
De macro frmBoeking.Afdrukken opent met de actie Rapport-
Openen het rapport Boeking. Dit rapport moet al gemaakt zijn.
In de volgende paragraaf, De rapporten, wordt het maken van
dit rapport toegelicht. Wanneer we echter een rapport van de
boeking afdrukken, worden alle boekingen afgedrukt, in dit
voorbeeld dus alle facturen. Wij willen alleen de factuur van de
actieve boeking, die op het scherm staat, afdrukken. We moeten
dus een voorwaarde kunnen invoeren. Met de opdrachtknop-
wizard kunnen we dit niet realiseren. We kunnen met de Wizard
wel een opdrachtknop maken die een rapport afdrukt, maar dan
zonder voorwaarde, dus alle facturen zouden dan afgedrukt wor-
den. Bij de actie RapportOpenen kunnen we in het argument
WHERE-voorwaarde een criteria opgeven. De voorwaarde luidt:
[Boekingnummer]=[Formulieren]![Boeking]![Boekingnummer].
Het boekingnummer uit het rapport moet gelijk zijn aan het (zicht-
bare) boekingnummer van het formulier Boeking. Hierdoor wordt
alleen het rapport van de boeking die op het scherm staat geselec-
teerd en afgedrukt.
Zoals te zien is in guur 9.18, zijn er twee extra macro-acties
toegevoegd. Indien een nieuw gemaakte boeking direct wordt af-
gedrukt, treedt zonder deze extra macro-acties een foutmelding
op. Een nieuwe boeking wordt pas opgeslagen in de database
nadat de recordwijzer verplaatst is. Drukt men direct op de knop
Afdrukken, dan kan het record nog niet gevonden worden in de
database en volgt een foutmelding. We hebben dit via een trucje
Figuur 9.18
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
299
voorkomen. We verplaatsen tijdelijk de recordwijzer naar het
volgende record. De zojuist toegevoegde gegevens worden nu
opgeslagen in de database. Vervolgens herstellen we de oorspron-
kelijke recordwijzer door naar het vorige record te gaan. Hiervoor
dienen twee extra macro- acties toegevoegd te worden voordat
de actie RapportOpenen wordt uitgevoerd. De eerste actie is
NaarRecordGaan met het argument Volgende en de tweede actie is
NaarRecordGaan met het argument Vorige.
De derde macro moet het formulier Constant sluiten, zie guur
9.19.
De macro frmBoeking.Sluit sluit met de actie Sluiten het formu-
lier Constant. Bij het argument Opslaan kunnen we aangeven of
tijdens het opslaan de gegevens bewaard moeten worden of niet,
eventueel na het vragen van een bevestiging. Aangezien het formu-
lier Constant alleen maar gebruikt is om gegevens te lezen, maakt
het niet uit wat we hier kiezen, alle drie opties zijn goed.
De macros zijn gemaakt, maar nu moeten ze nog gestart worden
bij een bepaalde gebeurtenis. Zo moet de macro frmBoeking.Open
gestart worden als het formulier Boeking wordt geopend. De macro
frmBoeking.Afdrukken moet gestart worden na het klikken op de
opdrachtknop met printerpictogram. De laatste macro frmBoeking.
Sluit moet geactiveerd worden als het formulier Boeking wordt
gesloten.
Figuur 9.19
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
300
Selecteer het overzicht Formulieren in het databasevenster en open
het formulier Boeking in de ontwerpweergave.
Plaats het eigenschappenvenster van het formulier op het scherm.
Klik hierin op de tab Gebeurtenis. Selecteer hierin de eigenschap
Bij openen. Kies uit de keuzelijst de macro frmBoeking.Open, zie
guur 9.20.
Hierdoor wordt bij het openen van het formulier Boeking de
macrogroep frmBoeking geopend en de macro frmBoeking.Open
gestart. Die opent vervolgens automatisch het formulier Constant,
die noodzakelijk is voor het formulier Boeking.
Op identieke wijze hebben we in hetzelfde venster in de eigenschap
Bij sluiten de macro frmBoeking.Sluit geselecteerd, zie guur 9.20.
Klik op de opdrachtknop met het printerpictogram en kies in het
tabblad Gebeurtenis de eigenschap Bij klikken. Selecteer uit de
keuzelijst de macro frmBoeking.Afdrukken. Na het klikken op die
knop zal de gewenste macro gestart worden.
Het formulier is klaar. Test de macros, pas eventueel de afmeting
van het formulier aan en sla het formulier op.
9.3.6 Formulier Datumbereik vertreklijst
Dit formulier wordt voor de volledigheid hier toegelicht, zie guur
9.21.
Figuur 9.20
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
301
Het formulier wordt alleen gebruikt voor het afdrukken van de
vertreklijst. We kunnen een datumbereik opgeven, waarna het
rapport van de Vertreklijst van alle reizen die voldoen aan het inge-
voerde bereik wordt afgedrukt. Zon voorwaarde hebben we eerder
gemaakt met een exibele query, maar de voorwaarde opvragen in
een formulier toont veel professioneler.
Selecteer in het overzicht Formulieren de optie Formulier maken in
ontwerpweergave.
We moeten een aantal eigenschappen van het formulier wijzigen.
Plaats het eigenschappenvenster van het formulier op het scherm
en verander de instellingen zoals toegepast in al onze voorgaan-
de formulieren, zie eventueel guur 9.4. Alleen de eigenschap
Bijschrift is Datumbereik voor vertreklijst geworden.
Plaats vervolgens twee tekstvakken in het venster. De labels krij-
gen de teksten Begindatum: en Einddatum:. Selecteer het eerste
tekstvak en activeer het eigenschappenvenster. Verander de eigen-
schap Naam, tabblad Overige, in Begindatum. Voer dezelfde op-
drachten uit voor het tweede tekstvak en kies als naam Einddatum.
Om ervoor te zorgen dat datums ingevoerd kunnen worden, veran-
deren we de eigenschap Notatie, in het tabblad Opmaak, in Korte
datumnotatie voor beide tekstvakken. Er mogen geen ongeldige
datums voor het bereik ingevoerd worden. Plaats de volgende
eigenschappen in de tab Gegevens van de tekstvakken.
Figuur 9.21
Tekstvak Eigenschap Instelling
Begindatum Standaardwaarde Date()+1
Validatieregel <=[Einddatum]
Validatietekst Datumbereik is niet correct.
Einddatum Standaardwaarde Date()+8
Validatieregel >=[Begindatum]
Validatietekst Datumbereik is niet correct.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
302
Versleep de tekstvakken vervolgens naar een geschikte plaats in
het venster.
Zet twee opdrachtknoppen, zonder de Wizard, in het venster.
Klik daartoe op de knop Wizards voor besturingselementen in de
Werkset. De Wizard wordt dan (tijdelijk) niet meer automatisch
gestart.
Activeer na het plaatsen van de twee opdrachtknopen de Wizards
voor besturingselementen weer, zodat standaard in de Werkset de
Wizard weer wel actief is voor de besturingselementen.
Selecteer de eerste opdrachtknop en activeer het eigenschappen-
venster. Verander de eigenschap Bijschrift in &OK en verander de
eigenschap Naam in OK. Het &-teken (ampersand) dient in
de formulierweergave om een streepje onder de O te plaatsen.
Hierdoor kan die opdrachtknop ook geselecteerd worden door mid-
del van de toetsencombinatie Alt+O, zoals gebruikelijk binnen
Windows-toepassingen.
Voer dezelfde opdrachten uit voor de tweede opdrachtknop en
verander het bijschrift in &Annuleer en de naam in Annuleer. De
beide opdrachtknoppen mogen geen tabstop hebben (eigenschap
Tabstop). Sleep de opdrachtknoppen vervolgens naar een geschikte
plaats.
Ten slotte moet de detailsectie van het formulier dezelfde achter-
grondkleur krijgen als de overige formulieren. Kies de lichtgele
kleur voor de eigenschap Achtergrondkleur, tabblad Opmaak. Pas
de afmetingen van het formulier aan in de formulierweergave en
sla het formulier op
onder de naam Datumbereik vertreklijst.
Macros van het formulier Datumbereik vertreklijst
Onder de opdrachtknoppen OK en Annuleer worden macros
gestart. De macros van het formulier Datumbereik vertreklijst
krijgen als naam voor de macrogroep frmDatumbereik vertreklijst,
zie guur 9.22.
Klik op de knop Nieuw, in het overzicht Macros van het database-
venster. Voer de macros vervolgens in.
De volledige macro is zichtbaar in guur 9.22.
De macro laat het rapport Vertreklijst afdrukken. Alleen gegevens
die aan de voorwaarden voldoen, worden afgedrukt. Om de
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
303
records in dit rapport te beperken tot die welke voldoen aan de
waarden van de datums op het formulier Datumbereik vertrek-
lijst, moet een voorwaarde ingevoerd worden bij het argument
WHERE-voorwaarde. Het besturingselement Vertrekdatum komt
uit het rapport Vertreklijst. Vervolgens wordt aangegeven dat de
vertrekdatum tussen de twee datums uit de tekstvakken van het
formulier Datumbereik vertreklijst moet liggen. We moeten de
volledige beschrijving gebruiken voor de verwijzing naar de beide
tekstvakken. Deze kunnen eventueel met de opbouwfunctie voor
expressies ingevoerd worden.
Terzijde
Merk op dat Between en And ook in de Nederlandse versie van
Access in het Engels ingevoerd moeten worden.
Figuur 9.22
Macro frmDatumbereik vertreklijst.OK
Actie Argument Instelling
RapportOpenen Rapportnaam Vertreklijst
Beeld Afdrukken
WHERE-voorwaarde [Vertrekdatum] Between
[Formulieren]![Datumbereik
vertreklijst]![BeginDatum] And
[Formulieren]![Datumbereik
vertreklijst]![Einddatum]
Sluiten Opslaan Nee
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
304
De tweede actie sluit direct na het printen automatisch het formu-
lier Datumbereik vertreklijst.
De macro is klaar. Hierna moet hij gestart kunnen worden na de
gebeurtenis klikken op de opdrachtknop OK van het formulier
Datumbereik vertreklijst.
Selecteer de opdrachtknop OK in de ontwerpweergave en activeer
vervolgens het eigenschappenvenster.
Kies tab Gebeurtenisen en selecteer in de eigenschap Bij klikkende
macro frmDatumbereik vertreklijst.OK.
Nu gaan we de opdrachtknop Annuleer instellen. Hiervoor is n
macroactie gemaakt.
De volledige macro is zichtbaar in guur 9.22. De enige actie van
deze macro is het sluiten van het actieve formulier. Deze opdracht-
knop had eventueel ook met de Wizard gemaakt kunnen worden.
De macro is klaar, vervolgens moet hij gestart kunnen worden na
de gebeurtenis klikken op de opdrachtknop Annuleer van het for-
mulier Datumbereik vertreklijst.
Doe dit op dezelfde wijze zoals besproken bij de opdrachtknop
OK, selecteer nu de macro frmDatumbereik vertreklijst.Annuleer.
Het formulier kan nog niet getest worden omdat het aangeroepen
rapport nog niet bestaat! Dit gaan we in de volgende paragraaf
doen.
9.4 De rapporten
In deze paragraaf gaan we de rapporten toelichten die bij de toe-
passing van reisbureau t Zonnetje behoren. Er zijn vier rapporten
nodig. In de eerste plaats een rapport voor het afdrukken van de
boekinggegevens in factuurvorm. Dit rapport kan worden opge-
Macro frmDatumbereik vertreklijst.Annuleer
Actie Argument Instelling
Sluiten Opslaan Nee
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
305
roepen vanuit het formulier Boeking. Klikken we in het formulier
Boeking op de opdrachtknop met het printericoontje, dan wordt de
macro frmBoeking.Afdrukken gestart. Die macro is besproken in
de paragraaf van het formulier Boeking. Het ligt voor de hand om
eerst het rapport te maken. Is het rapport naar wens, dan kan de
macro gemaakt worden.
Het tweede rapport is een alfabetische klantenlijst; het derde een
overzicht van vertrekkende reizigers, de Vertreklijst. Als laatste
maken we een rapport waaruit we kunnen aezen wat de omzet
per reis is en de totale omzet van het reisbureau. Deze drie rappor-
ten kunnen afgedrukt worden vanuit het submenu Overzichten. Dit
bevat drie opdrachtknoppen waarmee we de overzichten kunnen
afdrukken.
9.4.1 Rapport Boeking
Met dit rapport tonen we het boekingsformulier in factuurvorm op
de printer, zie guur 9.23.
Figuur 9.23
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
306
Zoals guur 9.23 laat zien, staan in het rapport meer gegevens
dan in het formulier Boeking. We vinden hier ook de gegevens
Postcode, Prijs per kind, Totaal volwassenen, Totaal kinderen
en Nog te betalen. Behalve de postcode zijn de andere gegevens
zogenoemde procesgegevens: gegevens die op eenvoudige wijze
uit andere gegevens berekend kunnen worden. Hierbij dient opge-
merkt te worden dat de Prijs per kind gelijk is aan de Prijs per per-
soon minus een korting. Het kortingspercentage is voor alle reizen
gelijk. Dit percentage is vastgelegd in de tabel Constant, in het veld
KinderKortingPerc.
De procesgegevens liggen niet in de database opgeslagen. We kun-
nen ze laten berekenen in zogeheten rekenvelden. We gaan in het
rapport die berekeningen uitvoeren.
We gaan het rapport ontwerpen. We maken een query voor het rap-
port, met de naam rptBoeking, met de gegevens die in het rapport
komen, exclusief de procesgegevens. De benodigde velden worden
in guur 9.24 getoond.
Kies in het databasevenster het overzicht Querys en kies de optie
Query maken in ontwerpweergave.
Kies de tabellen Boeking, Klant, Reis en Bestemming.
Selecteer de benodigde velden, zoals die in guur 9.24 zijn aan-
gegeven. In de tabel Boeking kunnen we het sterretje selecteren,
hierdoor worden alle velden uit de tabel Boeking geselecteerd.
Tabel Veld
Boeking * (alle velden)
Klant Naam
Adres
Postcode
Woonplaats
Telefoonnummer
Reis Vertrekdatum
Aantal dagen
Prijs per persoon
Bestemming Plaats
Land
Werelddeel
Figuur 9.24
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
307
Sla nadat alle velden zijn opgegeven de query op met de naam
rptBoeking. Hieraan kunnen we zien dat deze query bij het rapport
boeking hoort.
Het rapport is niet een standaardrapport dat snel met de Wizard
te maken is. We moeten een eigen lay-out ontwerpen. Wel kun-
nen we de Wizard gebruiken om snel alle velden op het rapport te
plaatsen. Door die te verplaatsen kunnen we de gewenste lay-out
maken.
Kies in het databasevenster het overzicht Rapporten en selecteer de
optie Rapport maken met wizard.
Selecteer in het eerste scherm van de Wizard de zojuist gemaakte
query rptBoeking en selecteer hieruit alle velden.
Geef in het volgende scherm op vanuit welke tabel we de gegevens
wensen te zien; kies volgens Boeking.
In het volgende scherm kunnen we opgeven hoe de gegevens
gegroepeerd moeten worden. Dat is niet nodig, ga naar het volgen-
de scherm van de Wizard.
Hierin kunnen we een sorteervolgorde aangeven. Aangezien maar
n afdruk wordt gemaakt, is een volgorde niet van belang.
Geef in het volgende scherm aan hoe het rapport opgemaakt moet
worden. Kies voor In kolomvorm en Staand.
Het scherm hierna dient om het opmaakproel te selecteren.
Selecteer het opmaakproel Vet.
Accepteer in het laatste scherm de voorgestelde titel (naam)
Boeking. Van het rapport wordt een afdrukvoorbeeld getoond.
Plaats het rapport in de ontwerpweergave. Het dient aangepast te
worden aan onze wensen. We gaan eerst de detailsectie, het
gedeelte waarin de gegevens worden afgedrukt, aanpassen aan
onze wensen.
Verplaats alle besturingselementen, behalve Boekingnummer,
ongeveer tien centimeter naar beneden. Het selecteren van alle
besturingselementen, behalve Boekingnummer, kunnen we een-
voudig realiseren door met de muis een rechthoek over die velden
te trekken. Hierdoor worden alle besturingselementen geselecteerd
en kunnen we deze in n keer verslepen. In het bovenste gedeelte
van de detailsectie is nu ruimte gecreerd.
Zet alle besturingselementen op hun plaats. Let op: hierbij moe-
ten we niet voorbij het raster komen dat wordt getoond in de
ontwerpweergave. De gegevens passen anders niet, of niet vol-
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
308
ledig, binnen de breedte van het papier. De labels van de bestu-
ringselementen Postcode en Klantnummer moeten we verwijderen.
De labels van Aantal volwassenen en Aantal kinderen moeten we
wijzigen in respectievelijk: Volwassenen en Kinderen.
De Wizard heeft automatisch een randstijl gekozen voor de bestu-
ringselementen van de velden. Tijdens het afdrukken wordt om
de waarden van de besturingselementen een kader geplaatst. Die
randstijl vinden wij in dit voorbeeld niet geschikt. Selecteer alle
besturingselementen van de velden (Shift+muisklik) en plaats
vervolgens het eigenschappenvenster op het scherm en kies uit
de tab Opmaak de eigenschap Randstijl. Verander de randstijl in
Transparant.
Hierna gaan we de rekenvelden maken. Als eerste maken we het
rekenveld Prijs per kind. Kies in de Werkset voor Tekstvak en
verplaats de muis naar de positie op het scherm waar het rekenveld
moet komen.
Een tekstvak maakt automatisch een label. Verander het bijschrift
van het label in Prijs per kind. Selecteer het tekstvak en verander
de eigenschap Naam, tabblad Overige, in Prijs per kind.
Klik op het tabblad Gegevens en zet de formule =[Prijs per per-
soon] * (1 [Formulieren]![Constant]![KinderKortingPerc]) in
de eigenschap Besturingselementbron, zie guur 9.25. Merk op dat
in de tabel Constant het veld KinderKortingPerc als fractie staat
(0,20) en dat de notatie van het veld Percentage is.
Deze formule kan ook via de Opbouwfunctie voor expressies
opgebouwd worden, zoals in hoofdstuk 8 is toegelicht. Het kortings-
percentage voor kinderen komt uit de tabel Constant. Aangezien
Figuur 9.25
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
309
het formulier Constant al geopend is, bij het boeken van de reis,
kunnen we dat formulier nu ook gebruiken. Ontwerpen we dit
rapport onafhankelijk van het formulier Boeking, dan moet het
formulier Constant eerst nog geopend worden om deze berekening
te kunnen maken! We kunnen controleren of het rekenveld goed
werkt door een afdrukvoorbeeld van het rapport te laten tonen.
Kies uit de menubalk Beeld, Afdrukvoorbeeld of doe dit via de
knop Beeld op de werkbalk. Krijgen we een foutmelding zoals
#Naam? of #Fout, open dan eerst het formulier Constant. Het
rekenveld voor het totale bedrag van de volwassenen wordt op
soortgelijke wijze gemaakt.
Selecteer opnieuw een tekstvak in de Werkset en verplaats de muis
naar de positie waar het besturingselement moet komen. Het label
dat automatisch wordt gecreerd bij het tekstvak kunnen we ver-
wijderen (eerst selecteren en vervolgens op de Delete-toets druk-
ken). Verander de eigenschappen Naam en Besturingselementbron
van het nieuwe tekstvak in respectievelijk Totaal volwassenen en
=[Aantal volwassenen] *[Prijs per persoon]. Controleer de wer-
king van het besturingselement in het afdrukvoorbeeld.
Het maken van de overige rekenvelden gaat op dezelfde manier.
Maak de overige vijf rekenvelden en verander de eigenschappen
volgens het schema van guur 9.26.
Voor het berekenen van de annuleringskosten is gebruikgemaakt
van de functie IIf(). Als een annuleringsverzekering is afgesloten,
worden de annuleringskosten berekend met behulp van het per-
centage uit het formulier Constant. Heeft men geen annulerings-
verzekering afgesloten, dan zijn er geen kosten. Merk op dat het
annuleringspercentage als fractie (0,04) ligt opgeslagen in de tabel
Constant en dat het scheidingsteken is ingesteld op puntkomma (;).
Eigenschap: Naam Eigenschap: Besturingselementbron
Totaal kinderen =[Aantal kinderen]*[Prijs per kind]
Subtotaal =[Totaal volwassenen]+[Totaal kinderen]
Annuleerkosten =IIf([Annuleringsverzekering];[Formulieren]
![Constant]![AnnuleerPerc]*[Subtotaal];0)
Totaal =[Subtotaal]+[Annuleerkosten]
Nog te betalen =[Totaal]-[Betaald bedrag]
Figuur 9.26
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
310
Het veld Annuleringsverzekering is een selectievakje. We willen
echter de tekst Ja of Nee zien in plaats van een vinkje.
Verwijder het besturingselement Annuleringsverzekering.
Plaats vervolgens via de werkset een tekstvak op de vrijgevallen
plaats.
Verander de labeltekst van het tekstvak in Annuleringsverzekering.
Plaats het eigenschappenvenster van het nieuwe tekstveld op het
scherm.
Wijzig van het tekstvak de eigenschap Notatie tabblad Opmaak
in Ja/Nee. Besturingselementbron tabblad Gegevens
in Annuleringsverzekering en Naam tabblad Overige in
Annuleringsverzekering.
Alle rekenvelden zijn gemaakt. Echter, het besturingselement
Betaalwijze toont de getallen 1, 2 of 3. Het besturingselement
Betaalwijze is een groepsvak, waarin we kunnen kiezen voor
Constant, Pinnen of Acceptgiro. Het groepsvak slaat niet die tek-
sten op, maar de overeenkomstige getallen, hier 1, 2 of 3. Bij het
tonen van het veld Betaalwijze worden die getallen afgedrukt en
niet de bijbehorende teksten. Als we de bijbehorende tekst wensen
te tonen, moeten we een tekstvak maken dat op basis van de
waarde van het veld Betaalwijze de juiste tekst toont. Hiervoor
heeft Access de functie Choose(), die een waarde uit een lijst met
argumenten selecteert en deze waarde als resultaat geeft. De volle-
dige syntaxis van de functie is: Choose(index; optie-1[; optie-2; ...
[; optie-n]]). Het eerste argument Index is een getal. Op basis van
dat getal wordt de eerste, tweede, of n-de optie geselecteerd: in ons
voorbeeld Choose([Betaalwijze]; Contant; Pinnen; Accept
giro). Is de waarde van Betaalwijze 1, dan wordt het woord
Contant afgedrukt; is de waarde van Betaalwijze 2, dan wordt de
tekst Pinnen afgedrukt, enzovoort.
Wijzig van het besturingselement Betaalwijze de eigenschap Naam
in TekstBetaalwijze.
Verander de eigenschap Besturingselementbron in
=Choose([Betaalwijze]; Contant; Pinnen; Acceptgiro).
Access beschikt ook over de functie Switch(). De volledige syn-
taxis van de functie luidt: Switch(expr-1; waarde-1[; expr-2; waar-
de-2 ... [; expr-n,waarde-n]]). Hiermee kunnen we paren
expressies en waarden opgeven.
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
311
Bijvoorbeeld: Switch([SoortRelatie]= D; Debiteur;[SoortRela-
tie]=C; Crediteur) of Switch([Betaalwijze] =1; Contant;
[Betaalwijze]=2; Pinnen; [Betaalwijze]=3; Acceptgiro).
De rekenvelden moeten nog van een juiste opmaak worden voor-
zien. Selecteer daartoe alle rekenvelden (Shift+muisklik) en plaats
vervolgens het eigenschappenvenster op het scherm. Kies de tab
Opmaak en selecteer de eigenschap Notatie. Kies in de keuzelijst
de notatie Valuta of Euro.
Verfraai ten slotte de detailsectie met enige lijnen. De Wizard heeft
n lijn al in de detailsectie geplaatst. Verwijder deze lijn en voeg
vier lijnen toe, zie guur 9.23, waarvan twee over de volledige
breedte van de detailsectie. Na het plaatsen van de lijnen kunnen
deze iets dikker gemaakt worden door de eigenschap Randbreedte,
in de tab Opmaak, de waarde 2 te geven. Voeg ten slotte nog twee
lijnen toe die dienen om het subtotaal en totaal te scheiden.
De detailsectie is nu af. We gaan de Paginakoptekst maken.
Door de Wizard is geen paginakoptekst gemaakt, wel een rapport-
koptekst.
Maak ruimte voor de paginakoptekst door de balk van de detail-
sectie omlaag te slepen. In de paginakoptekst worden de gegevens
van het reisbureau getoond, zie guur 9.23. De teksten zijn alle-
maal labels. Het label met het bijschrift Boeking kan uit de Rap-
portkoptekst naar de Paginakoptekst worden gesleept. Het speciale
effect van het label linksboven Reisbureau t Zonnetje is gemaakt
door de eigenschappen Voorgrondkleur en Achtergrondkleur van
het label te veranderen in respectievelijk wit en zwart. Van dat
label is ook de grootte van het lettertype veranderd in puntgrootte
20. De paginakoptekst is klaar. De rapportkoptekst kan verwijderd
worden. Sleep daartoe de balk van paginakoptekst omhoog.
Als laatste veranderen we de Paginavoettekst van het rapport. De
Wizard heeft aan de rechterkant in de paginavoettekst een tekstvak
geplaatst waarin het actieve paginanummer getoond wordt en het
totale aantal paginas. Hierin is gebruikgemaakt van de eigen-
schappen Pagina en Paginas. Aangezien in dit rapport maar n
pagina wordt afgedrukt, verwijderen we dat tekstvak.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
312
Willen we op een ander rapport wel die informatie afdrukken, ga
dan als volgt te werk. Plaats een tekstvak in de voettekst. Start
in de eigenschap Besturingselementbron de Opbouwfunctie voor
expressies. Kies in de linkerkolom van het opbouwfunctievenster
voor Gangbare expressies. Maak vervolgens uit de middelste
kolom een keuze.
Het rapport is nu bijna klaar en het toont alle gewenste gegevens,
hoewel dat er iets te veel kunnen zijn. Als er namelijk geen kinde-
ren mee op reis gaan, wordt bij Aantal kinderen de waarde 0 af-
gedrukt, de Prijs per kind wordt getoond en Totaal kinderen heeft
ook als waarde 0. We willen die regel in het rapport dan niet tonen.
Hiervoor moet een macro gemaakt worden; deze maken we onder
de groepsnaam rptBoeking, zodat we direct kunnen zien dat die
macro bij het rapport Boeking hoort.
Macro van het rapport Boeking
We moeten een macro maken die controleert of in de gemaakte
boeking ook kinderen op reis gaan. Als er geen kinderen op de
boeking staan vermeld, wordt in het rapport geen informatie over
kinderen vermeld. Binnen de macrogroep krijgt die macro de
naam ToonKinderen (zie guur 9.27).
De volledige macro wordt getoond in guur 9.27.
Figuur 9.27
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
313
Gaan er geen kinderen op reis, dan worden de besturingselementen
die de kindergegevens tonen onzichtbaar gemaakt. Let op de drie
puntjes in de voorwaarde! Hierdoor wordt de voorwaarde voor de
volgende actie herhaald. Alle gegevens die op het rapport staan
die met kinderen te maken hebben, worden hierdoor onzichtbaar
gemaakt. Deze macro zou nu klaar zijn, er wordt namelijk maar
n bladzijde door het rapport afgedrukt. Voor ieder nieuw rapport
wordt namelijk de standaardinstelling, alle gegevens op het rapport
tonen, hersteld.
We hebben de macro uitgebreid door de gegevens van de kinderen
opnieuw zichtbaar te maken als er wel kinderen in de boeking
staan vermeld. Hierdoor kunnen we het rapport desgewenst ook
gebruiken om over een bepaalde periode de boekingen af te druk-
ken. Het is dan niet nodig een heel nieuw rapport te maken. Als we
bijvoorbeeld in n keer tien boekingen zouden laten afdrukken
en op de eerste boeking staan geen kinderen, worden de gegevens
Macro rptBoeking.ToonKinderen
Voorwaarde Actie Argument Instelling
[Aantal kinderen]=0 WaardeInstellen Item [Aantal kinderen].[Visible]
Expressie Nee
WaardeInstellen Item [Aantal kinderen Bijschrift].[Visible]
Expressie Nee
WaardeInstellen Item [Prijs per kind].[Visible]
Expressie Nee
WaardeInstellen Item [Label prijs per kind].[Visible]
Expressie Nee
WaardeInstellen Item [Totaal kinderen].[Visible]
Expressie Nee
MacroStoppen
WaardeInstellen Item [Aantal kinderen].[Visible]
Expressie Ja
WaardeInstellen Item [Aantal kinderen Bijschrift].[Visible]
Expressie Ja
WaardeInstellen Item [Prijs per kind].[Visible]
Expressie Ja
WaardeInstellen Item [Label prijs per kind].[Visible]
Expressie Ja
WaardeInstellen Item [Totaal kinderen].[Visible]
Expressie Ja
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
314
van de kinderen op de boeking onzichtbaar gemaakt. Die instelling
blijft echter voor de volgende negen afdrukken ingesteld, zodat op
geen enkel volgend overzicht de kindergegevens worden getoond,
ook al gaan er wel kinderen mee op reis. Door onze uitbreiding
wordt de standaardinstelling na iedere afgedrukte boeking her-
steld, zodat weer alle gegevens worden getoond. Het formulier
Constant is hierbij wel noodzakelijk, we kunnen dit dan openen op
het moment dat het rapport wordt geopend. Via de eigenschap Bij
openen van het rapport kan dat gerealiseerd worden. De macro-
groep rptBoeking dient in dat geval ook uitgebreid te worden met
een macro die het formulier Constant opent.
De macro rptBoeking.ToonKinderen moet uitgevoerd worden op
het moment dat de gegevens uit de detailsectie opgemaakt worden,
de gebeurtenis Bij opmaken.
Selecteer het overzicht Rapporten in het databasevenster en open
het rapport Boeking in de ontwerpweergave.
Klik met de muis op de balk van de detailsectie en plaats het eigen-
schappenvenster op het scherm. Kies daarin de tab Gebeurtenis.
Selecteer uit de eigenschappen van de detailsectie Bij opmaken.
Selecteer uit de keuzelijst rptBoeking.ToonKinderen. Hierdoor
wordt bij het opmaken van de detailsectie uit het rapport de macro-
groep rptBoeking geopend en de macro rptBoeking.ToonKinderen
gestart.
Open ter controle het formulier Boeking en laat een boeking in
factuurvorm op de printer afdrukken.
9.4.2 Rapport Klantenlijst
Nu volgt het eenvoudigste rapport van de toepassing: een alfabeti-
sche klantenlijst, zie guur 9.28.
Dit rapport kunnen we met de Wizard Rapport snel maken. We
zullen voor de uniformiteit gebruikmaken van een query.
Klik in het overzicht Querys van het databasevenster en selecteer
de optie Query maken in ontwerpweergave.
Selecteer in het venster de tabel Klant.
Selecteer alle velden uit de tabel Klant (het sterretje is voldoende).
Sla de query op onder de naam rptKlantenlijst.
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
315
Activeer in het overzicht Rapporten op de optie Rapport maken
met wizard.
Selecteer de zojuist gemaakte query rptKlantenlijst en vervolgens
alle velden uit die query.
In het daaropvolgende venster kunnen we groepeerniveaus aan-
geven. In het klantenoverzicht komen die niet voor.
In het volgende venster wordt de sorteervolgorde aangegeven, kies
voor Naam. Kies hierna de optie In tabelvorm en Staand.
In het voorlaatste venster kan een stijl opgegeven worden, kies de
stijl Vet.
Geef het rapport de titel (naam) Klantenlijst.
Een voorbeeld van de klantenlijst wordt vervolgens op het beeld-
scherm getoond. Het kan zijn dat niet alle kopteksten volledig
worden weergegeven. Dat heeft te maken met de printer die is aan-
gesloten en ingesteld in Windows. Onze lijsten worden afgedrukt
met een HP Laserjet 5000 en daarmee zijn de kopteksten Postcode
en Telefoonnummer niet volledig te zien. Mocht dit bij de gebruikte
printer ook het geval zijn, dan is dat op de volgende wijze eenvou-
dig te verhelpen.
Plaats het rapport in de ontwerpweergave. Maak het label Adres
in de Paginakoptekst iets korter. Verplaats hierna het
label Postcode iets naar links en maak het iets langer. Het label
Figuur 9.28
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
316
Postcode is nu zichtbaar. Doe hetzelfde met de labels Woonplaats
en Telefoonnummer. Eventueel kunnen we de kopteksten ook
inkorten, bijvoorbeeld Telefoonnummer wijzigen in Telefoonnr.
Controleer vervolgens de wijzigingen in het afdrukvoorbeeld.
Macro van het rapport Klantenlijst
Het rapport Klantenlijst is klaar. Als we het rapport openen, wordt
het als afdrukvoorbeeld getoond. In de uiteindelijke toepassing
moet de klantenlijst direct afgedrukt kunnen worden. Hiervoor
hebben we een macro nodig. Die macro wordt gestart vanuit een
menu-item dat met schakelborden wordt gemaakt. Meer hierover is
te vinden in paragraaf 9.5, Schakelborden. We kunnen hierdoor de
macro nog niet testen. Voor de macro is de macrogroep rptKlan-
tenlijst gemaakt.
Hiermee wordt het rapport geopend en wordt het direct naar de
printer gestuurd, door in het argument Beeld voor de instelling
Afdrukken te kiezen.
9.4.3 Rapport Vertreklijst
Het rapport toont per vertrekdatum per reisnummer de klanten die
vertrekken, zie guur 9.29.
Het rapport is gemaakt met de Wizard Rapport. Het afdrukken van
het rapport vindt plaats vanuit het formulier Datumbereik vertrek-
lijst. In dat formulier worden een begindatum en een einddatum
gevraagd. Alle reizen binnen die grenzen worden getoond in het
rapport Vertreklijst. Het formulier Datumbereik vertreklijst is bij
de formulieren van de toepassing al toegelicht, zie guur 9.21. Het
rapport Vertreklijst is als eerste gemaakt en daarna het formulier
Datumbereik vertreklijst.
Maak een query genaamd rptVertreklijst.
Kies uit de tabel Reis de velden Vertrekdatum en Reisnummer.
Kies uit de tabel Bestemming de velden Plaats en Land, en uit de
Macro rptKlantenlijst.Afdrukken
Actie Argument Instelling
RapportOpenen Rapportnaam Klantenlijst
Beeld Afdrukken
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
317
tabel Klant de velden Naam en Woonplaats. Als laatste nemen we
uit de tabel Boeking de velden Aantal volwassenen en Aantal kin-
deren.
Hierna gaan we het nieuwe rapport maken. Selecteer in het over-
zicht Rapporten de optie Rapport maken met wizard. Kies de
zojuist gemaakte query rptVertreklijst en selecteer hiervan alle
velden.
In het volgende scherm van de Wizard wordt gevraagd hoe we de
gegevens willen weergeven, we kiezen volgens Reis.
Voeg in het volgende scherm groepeerniveaus toe, zie guur 9.30.
We hebben voor het rapport twee groepeerniveaus nodig, name-
lijk op vertrekdatum en daarbinnen op reisnummer. Kies eerst het
groepeerniveau Vertrekdatum.
Standaard wordt in Access op datumvelden per maand gegroe-
peerd. Dat is in ons voorbeeld niet wenselijk en we gaan dat aan-
passen.
Klik op Opties voor groeperen.... Kies bij Groepeerintervallen
voor Normaal en klik op OK.
Figuur 9.29
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
318
Kies nog een groepeerniveau Reisnummer en ga naar het volgende
scherm.
Hierin kunnen we een sortering aanbrengen in de detailsectie.
Kies voor Naam.
Kies de gewenste opmaak: Met interval en Staand.
In het voorlaatste scherm kunnen we een proel aan het rapport
geven, selecteer Vet.
Geef in het laatste venster de titel (naam) Vertreklijst aan het rap-
port. Het resultaat wordt getoond als afdrukvoorbeeld.
De koptekst van het rapport is niet helemaal naar wens. We kun-
nen die eenvoudig aanpassen.
Plaats het rapport in de ontwerpweergave. Selecteer in de
Paginakoptekst het label Aantal volwassenen.
Zet het eigenschappenvenster op het scherm en verander in de tab
Opmaak de eigenschap Bijschrift in Volw.. Verander zo ook het
bijschrijft van het label Aantal kinderen in Kind..
Afhankelijk van de aangesloten en ingestelde printer dienen de
labels van de kopteksten aangepast te worden. Onze lijsten worden
afgedrukt met
een HP Laserjet 5000 en hiermee wordt het label Woonplaats niet
volledig afgedrukt. Dit is eenvoudig te verhelpen.
Figuur 9.30
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
319
Maak in dezelfde sectie, Paginakoptekst, het label Volw. aan de
linkerkant iets kleiner en maak het label Woonplaats aan de rech-
terkant iets groter, zodat het volledig wordt getoond.
Het rapport is bijna gereed, we kunnen nog een verjning aanbren-
gen. Het rapport wordt gestart door het formulier Datumbereik
vertreklijst. In dat formulier kunnen we een begin- en een eind-
datum opgeven. Hierna wordt het rapport Vertrekdatum afgedrukt
met alle reizen die in het opgegeven bereik vallen. Stel echter dat
we een bereik opgeven dat geen gegevens oplevert. Er wordt dan
een leeg formulier afgedrukt. Dat kunnen we
ondervangen met een macro, gemaakt in de macrogroep rptVer-
treklijst.
Macro van het rapport Vertreklijst
We moeten een macro maken die controleert of er paginas getoond
worden. Zo niet, dan mag het rapport niet worden afgedrukt.
Binnen de macrogroep rptVertreklijst heeft die macro de naam
GeenGegevens, zie guur 9.31.
De volledige macro wordt getoond in guur 9.31.
Figuur 9.31
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
320
Deze macro wordt geactiveerd als er geen gegevens zijn om af te
drukken. In de eerste actie van de macro wordt het afdrukken van
het rapport geannuleerd, middels de actie GebeurtenisAnnuleren.
De tweede actie stelt de gebruiker via een bericht daarvan op te
hoogte. De laatste actie, die misschien minder makkelijk te
begrijpen is, stopt lle macros. Er is immers nog een macro actief,
namelijk de macro die het afdrukken heeft gestart, frmDatum-
bereik vertreklijst.Ok. Die macro heeft maar twee acties: de eer-
ste actie is het openen van het rapport Vertreklijst en de tweede
het sluiten van het formulier Datumbereik vertreklijst. Door de
actie AlleMacrosStoppen wordt die tweede actie net uitgevoerd.
Hierdoor blijft, na de melding dat er niets valt af te drukken, het
formulier Datumbereik vertreklijst op het scherm. Desgewenst kan
dan een nieuw bereik ingevoerd worden. De gemaakte macro rpt-
Vertreklijst.GeenGegevens wordt gestart via de gebeurtenis geen
gegevens van het rapport.
Open het rapport Vertreklijst in de ontwerpweergave en plaats het
eigenschappenvenster van het rapport op het scherm.
Kies het tabblad Gebeurtenis en selecteer uit de keuzelijst
van de eigenschap Bij geen gegevens de macro rptVertreklijst.
GeenGegevens.
Controleer de werking van het rapport Vertreklijst in combinatie
met het formulier Datumbereik vertreklijst. Open daartoe het for-
mulier Datumbereik vertreklijst.
9.4.4 Rapport Omzetlijst
De omzetlijst laat per reisnummer de behaalde omzet zien. Tevens
wordt het totale bedrag dat tot nu toe betaald is voor dat reisnum-
mer afgedrukt. Ook het percentage dat het reisnummer heeft bij-
gedragen aan de totale omzet wordt weergegeven. Als een reis in
het geheel niet is geboekt, wordt die reis getoond zonder omzet, zie
guur 9.32.
Macro rptVertreklijst.GeenGegevens
Actie Argument Instelling
GebeurtenisAnnuleren
Berichtvenster Bericht Bereik levert geen gegevens op.
Pieptoon Nee
Type Informatie
Titel Bericht
AlleMacrosStoppen
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
321
De omzetlijst is gemaakt met de Wizard Rapport. Hierna zijn
enkele kleine cosmetische veranderingen aangebracht. De
omzetlijst is als volgt gemaakt. Om de omzet te bepalen is de tabel
Constant noodzakelijk. De prijs per kind is namelijk afhankelijk
van de korting die wordt gegeven voor een kind. Kinderen krijgen
een kortingspercentage op de Prijs per persoon. Dat percentage is
vastgelegd in de tabel Constant in het veld KinderKortingPerc. In
onze voorbeelden hebben we geen gebruik gemaakt van de tabel
Constant, maar van het formulier Constant, dat uiteraard dezelfde
gegevens bevat. In onze voorbeelden hebben we hiervoor gekozen
omdat de tabel Constant niet in alle situaties is toegestaan. Het
formulier Constant kan wel altijd gebruikt worden.
Voor het ontwerpen van het rapport moet het formulier Constant
geopend worden, we hebben immers gegevens uit dat formulier
nodig. Als het rapport gereed is, zorgen we er met behulp van
macros voor dat het formulier Constant automatisch verborgen
wordt geopend en gesloten.
Figuur 9.32
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
322
Kies in het databasevenster het overzicht Formulieren en open het
formulier Constant. Minimaliseer het formulier eventueel.
Ga vervolgens naar het overzicht Querys en kies de optie Query
maken in ontwerpweergave. Kies in het venster de tabellen Reis,
Bestemming en Boeking. Let op, selecteer eerst de tabel Reis, dan
Bestemming en als laatste Boeking.
Als er in de tabel Reis een reis voorkomt waarvoor geen boekingen
bestaan, dient die reis, zonder omzet, ook in het overzicht voor te
komen. In een standaard-relatie (inner join) tussen de tabel Reis
en een andere tabel worden reisnummers die niet geboekt zijn niet
getoond. Hiervoor moeten we een speciale relatie leggen, een
zogeheten left of right outer join.
Dubbelklik op de relatie die getoond wordt op het scherm tussen
de tabel Reis en de tabel Boeking. Hierdoor wordt een venster
getoond met de Joineigenschappen, zie guur 9.33.
Selecteer de tweede optie. Hierin staat: alle records uit de tabel
Reis opnemen en alleen die records uit de tabel Boeking waarvoor
de gekoppelde velden identiek zijn. Nu worden alle reizen getoond,
ook als er geen enkele boeking voor bestaat.
Dit noemen we een left outer join, vandaar dat de tabel Reis
als eerste geopend moet worden. Hierdoor staat de tabel aan de
linkerkant ten opzichte van de overige tabellen. We hadden de
tabel Reis ook als laatste kunnen selecteren. De tabel staat dan
aan de rechterkant van de andere tabellen. Optie 3 uit het venster
Joineigenschappen moet dan geselecteerd worden, een zogenaam-
de right outer join.
Figuur 9.33
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
323
Hierna selecteren we de velden voor de omzetlijst. Kies uit de
tabel Reis de velden Reisnummer en Vertrekdatum. Kies uit de
tabel Bestemming de velden Plaats en Land. Kies ten slotte uit de
tabel Boeking het veld Betaald bedrag.
Maak vervolgens een rekenveld Omzet. Klik met de muis in het
eerstvolgende lege vakje van de rij Veld. Plaats daar de volgende
formule, eventueel gebruikmakend van Shift-F2 (zoomen):
Omzet: [Aantal volwassenen]*[Prijs per persoon] +[Aantal
kinderen]*[Prijs per persoon]*(1-[Formulieren]![Constant]!
[KinderKortingPerc]). We zien dat in deze berekening het formu-
lier Constant is gebruikt. Controleer de query in de gegevensblad-
weergave.
Hierbij plaatsen we vier kanttekeningen:
Bij bepaalde reisnummers wordt geen betaald bedrag en omzet
getoond. Dat zijn de reizen die nog geen enkele boeking hebben.
De gegevens worden (nog) niet gegroepeerd. Het groeperen voeren
we uit in de Wizard Rapport. Die Wizard biedt bij het groeperen
een aantal extra opties waarvan we gebruik kunnen maken.
De volgorde waarin we de velden in de query plaatsen, is van
belang. De Wizard Rapport rangschikt de gegevens zoals ze wor-
den aangeboden: in ons voorbeeld eerst het veld Betaald bedrag en
dan Omzet.
Om niet-gerelateerde records te tonen kan ook gebruikgemaakt
worden van een wizard. Kies hiervoor in het overzicht Querys de
optie Nieuw, Wizard Niet-gerelateerde records.
Sluit het venster en sla de query op onder de naam rptOmzetlijst.
Kies het overzicht Rapporten en selecteer de optie Rapport maken
met wizard.
Selecteer de zojuist gemaakte query rptOmzetlijst waarvan alle
velden in het rapport dienen te komen.
In het volgende scherm van de Wizard kunnen we groepeerniveaus
aangeven. Klik op Reisnummer, we moeten namelijk groeperen op
reisnummer; we wensen tenslotte per reisnummer de totale omzet.
Geef in het volgende scherm een sorteervolgorde op en selecteer
opties voor totalen. Aangezien we groeperen op reisnummer, is
de standaard sorteervolgorde op reisnummer. Dat hoeven we niet
te veranderen. Wel gaan we opties voor totalen opgeven: klik op
Opties voor totalen..., zie guur 9.34.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
324
We willen de som van de velden Betaald bedrag en Omzet.
Selecteer in het vak Weergeven de optie Details en totalen en zet
een vinkje bij Percentage van totaal berekenen voor som. Hierdoor
worden de gewenste percentages getoond. Klik vervolgens op OK.
In het volgende scherm kunnen we een indeling van het rapport
opgeven. Selecteer Links uitlijnen 1 en Staand.
Geef in het voorlaatste scherm een opmaakproel op, kies het
opmaakproel Vet.
Geef als laatste een titel (naam) aan het rapport: Omzetlijst. De
omzetlijst wordt vervolgens als afdrukvoorbeeld op het scherm
getoond. Eventueel kunnen we ter controle een afdruk maken van
de omzetlijst.
De omzetlijst is nog niet helemaal naar wens. We zijn alleen gen-
teresseerd in de totalen en niet in de detailgegevens. Als een reis
tien keer is geboekt, worden tien keer vertrekdatum, plaats en land
getoond. En keer lijkt ons voldoende. In het venster Opties voor
totalen (zie guur 9.34) hebben we Details en totalen geselecteerd.
Als we in dat venster Alleen totalen hadden geselecteerd, zouden
de velden Vertrekdatum, Plaats en Land niet meer getoond wor-
den. Beide opties voldoen niet voor het overzicht dat we wensen,
maar we kunnen met een kleine aanpassing het overzicht wel naar
wens maken.
Plaats de omzetlijst in de ontwerpweergave.
Sleep met de muis de balk Detail ongeveer n centimeter naar
beneden, zodat het koptekstgebied iets groter wordt.
Figuur 9.34
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
325
Verwijder uit de sectie Detail de besturingselementen Betaald
bedrag en Omzet.
Selecteer in de sectie Detail tegelijkertijd de besturingselementen
Vertrekdatum, Plaats en Land (Shift+muisklik). Sleep ze onder de
bijbehorende labels in de sectie Koptekst (Reisnummer).
Verwijder de detailsectie door de Voettekst (Reisnummer) omhoog
te slepen (voettekstbalk vastzetten tegen detailbalk). Als we de
detailbalk, in de eerste actie, te veel naar beneden hebben gesleept,
kunnen we deze nu omhoog slepen.
Het label behorende bij het percentage heeft als tekst Standaard
(foutje in Access). We gaan die tekst veranderen in Percentage.
Selecteer het label Standaard in de sectie Voettekst (Reisnummer)
en wijzig de eigenschap Bijschrift, in het tabblad Opmaak, in
Percentage. Door de langere tekst dient tevens de grootte van het
label vergroot te worden.
De som van Betaald bedrag en die van Omzet worden niet in de
opmaak Valuta getoond. Selecteer het tekstveld Som Van Betaald
bedrag en wijzig in de tab Opmaak de eigenschap Notatie in
Valuta of Euro. Voer dit tevens uit voor het tekstveld Som Van
Omzet.
Het totaal betaalde bedrag en de totale omzet, die op de laatste
pagina worden getoond, zijn ook niet voorzien van de opmaak
Valuta. Die twee tekstvelden staan in het rapport in de sectie
Rapportvoettekst. Verander ook voor die twee tekstvelden de
eigenschap Notatie in Valuta of Euro.
Bekijk het resultaat als afdrukvoorbeeld. Let in het bijzonder op de
reizen die meermalen geboekt zijn.
De labels vertrekdatum en Betaald bedrag worden niet volledig
getoond (afgedrukt op een HP Laserjet 5000). Ook het euro-sym-
bool wordt bij het totale omzetbedrag niet getoond. We kunnen dit
eenvoudig veranderen door de labels iets groter te maken.
Plaats het rapport in de ontwerpweergave. Selecteer het label
Vertrekdatum en maak het aan de rechterkant iets groter. Selecteer
het label Betaald bedrag en maak het aan de linkerkant iets groter.
Kies in sectie Rapportvoettekst het tekstvak Omzet Eindtotaal
Som en maak het aan de rechterkant iets langer.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
326
Het rapport is, op de macros na, klaar. Nog enige opmerkingen
over het rapport:
De lijst is afgedrukt op een HP Laserjet 5000. Als een andere prin-
ter is aangesloten en ingesteld, kan de lay-out van het overzicht iets
afwijken.
Zijn er bij een bepaalde reis geen boekingen, dan wordt wel een
record getoond, het record van de reis, maar totalen worden niet
getoond (ook geen nullen).
De besturingselementen Betaald bedrag en Omzet hebben we van
het rapport verwijderd. We hadden ze, met behulp van hun eigen-
schappen (Zichtbaar), ook onzichtbaar kunnen maken.
Voor de berekening van de percentages wordt gebruikgemaakt
van de eindtotalen Betaald bedrag Eindtotaal Som en Omzet
Eindtotaal Som. Deze worden in de voettekst van het rapport
getoond. Access doorloopt namelijk twee keer het rapport. De
eerste keer worden de expressies in de detailregels berekend, de
groepstotalen en eindtotalen bepaald en de lengte van het rapport
gecontroleerd, zodat het aantal paginas bekend is. De tweede keer
worden de expressies opgelost die verwijzen naar groepstotalen
en eindtotalen. Hierdoor is het mogelijk in de detailsectie of lagere
niveaus verwijzingen te plaatsen naar hogere niveaus. Dit is een
zeer krachtige mogelijkheid van rapporten binnen Access.
Als we in een groepssectie een rekenveld uit de detailsectie wen-
sen te sommeren, is het niet toegestaan om te verwijzen naar het
betreffende rekenveld. De gemaakte berekening moet dan herhaald
worden. Een voorbeeld: in de detailsectie hebben we een rekenveld
Regelbedrag met hierin de berekening =[Aantal] * [Prijs]. In de
groepssectie is het niet toegestaan om =Som([Regelbedrag]) te
gebruiken, we moeten de berekening herhalen =Som([Aantal] *
[Prijs]).
Als het wenselijk is om kopteksten en bijbehorende gegevens op
n pagina weer te geven, kan een eigenschap van die sectie aan-
gepast worden. Verander in het tabblad Opmaak de eigenschap
Nieuwe rij of kolom in Voor en Na sectie.
In dit rapport wordt gebruikgemaakt van het formulier Constant
en niet van de tabel Constant. Het zou in dit rapport een foutmel-
ding opleveren. Voor diegene die genteresseerd is in het waarom:
de tabel Constant heeft geen relaties met de andere tabellen uit de
database. Bij inner joins tussen de databasetabellen en de tabel
Constant levert dat geen probleem op. Alle geselecteerde records
worden verbonden met de tabel Constant. Maken we een left of
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
327
right outer join in combinatie met de tabel Constant, dan krijgen
we een melding op het scherm dat die relatie niet is toegestaan.
Zonder de tabel Constant werkt de left of right outer join goed en
kunnen we probleemloos gebruikmaken van de
informatie uit het formulier Constant.
Macros van het rapport Omzetlijst
Bij dit rapport hebben we drie macros nodig: n om het formulier
Constant te openen zodra het rapport wordt opgeroepen; n om
het formulier Constant te sluiten nadat het rapport is afgedrukt,
en ten slotte een macro om het rapport te openen en direct naar de
printer te sturen. Die macro wordt gestart vanuit een menu dat met
schakelborden wordt gemaakt. Meer hierover vinden we in para-
graaf 9.5, Schakelborden. De macros zijn opgeslagen in
macrogroep rptOmzetlijst, zie guur 9.35.
De volledige macro wordt getoond in guur 9.35. Hiermee wordt
het formulier Constant verborgen geopend.
Figuur 9.35
Macro rptOmzetlijst.Open
Actie Argument Instelling
FormulierOpenen Formuliernaam Constant
Beeld Formulier
Venstermodus Verborgen
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
328
De volledige macro wordt getoond in guur 9.35. Het formulier
Constant wordt gesloten. Opslaan is niet noodzakelijk, er is im-
mers niets veranderd.
De volledige macro wordt getoond in guur 9.35. Hiermee wordt
het rapport geopend en direct naar de printer gestuurd, door in het
argument Beeld voor de instelling Afdrukken te kiezen.
De eerste macro moet geactiveerd worden tijdens het openen van
de omzetlijst en de tweede macro wordt in werking gezet zodra het
rapport van de omzetlijst wordt gesloten.
Plaats daartoe de omzetlijst in de ontwerpweergave op het scherm
en activeer vervolgens het eigenschappenvenster van het rapport.
Klik op het tabblad Gebeurtenis en selecteer in de keuzelijst Bij
openen de macro rptOmzetlijst.Open en in de eigenschap Kies bij
sluiten voor rptOmzetlijst.Sluiten.
De derde macro zal gestart worden door een optie uit het schakel-
bord te selecteren. Meer hierover in de volgende paragraaf.
9.5 Schakelborden
De toepassing is bijna klaar: alle querys, formulieren en rapporten
zijn gemaakt, alleen de menus en submenus moeten nog gemaakt
worden. In paragraaf 9.2 is al toegelicht dat deze menus niet ver-
ward mogen worden met menubalken. Deze menus worden
Macro rptOmzetlijst.Sluiten
Actie Argument Instelling
Sluiten Objecttype Formulier
Objectnaam Constant
Opslaan Nee
Macro rptOmzetlijst.Afdrukken
Actie Argument Instelling
RapportOpenen Rapportnaam Omzetlijst
Beeld Afdrukken
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
329
gemaakt met vensters. Om naamsverwarring te voorkomen wor-
den ze binnen Access schakelborden genoemd. Het hoofdmenu van
de toepassing wordt door het schakelbord getoond in guur 9.36.
Menus en submenus zijn in Access eenvoudig te maken met scha-
kelborden. In paragraaf 9.2 zijn deze al vastgelegd.
In onze toepassing hebben we drie menus (schakelborden)
nodig: een hoofdmenu en twee submenus. In het hoofdmenu
komen drie items, te weten Boekingen, Overzichten en Onderhoud.
Selecteren we het item Boekingen, dan komen we direct in het
formulier Boeking. Dit formulier wordt het meest toegepast bin-
nen reisbureau t Zonnetje, vandaar dat het direct te selecteren is in
het hoofdmenu. Kiezen we n van de twee overige items uit het
hoofdmenu, dan komen we in de submenus. Verder komt in ieder
menu een keuzemogelijkheid Sluiten om n menuniveau terug te
selecteren. In het hoofdmenu wordt dan de toepassing afgesloten.
Hoofdmenu
Boekingen
Overzichten
Onderhoud
Sluiten
Figuur 9.36
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
330
Kiezen we in het hoofdmenu het item Overzichten, dan komen we
in het submenu Overzichten. Hierin wordt een overzicht getoond
van alle mogelijke overzichten (rapporten/lijsten) binnen de toe-
passing. Na het selecteren worden de rapporten op de printer
afgedrukt.
Submenu Overzichten
Klantenlijst
Vertreklijst
Omzetlijst
Sluiten
Na de keuze Onderhoud uit het hoofdmenu komen we in het sub-
menu Onderhoud. Hierin kunnen we een keuze maken uit het
onderhouden van de basisgegevens. Zo kunnen we toevoegen, ver-
wijderen en wijzigingen doorvoeren in de basisgegevens.
Submenu Onderhoud
Klanten
Reizen
Bestemmingen
Constanten
Sluiten
Nu we precies weten hoe de verschillende menus eruit moeten
zien, gaan we de menus maken met de optie Schakelbordbeheer
van Access.
Kies in de menubalk Extra de optie Databasehulpprogrammas,
Schakelbordbeheer. Als nog geen schakelbord is gemaakt voor de
toepassing, volgt een melding hierover en wordt gevraagd of we
een schakelbord willen maken. We beantwoorden dit bevestigend.
Er worden nu automatisch twee acties ondernomen. Er wordt een
tabel Switchboard Items gemaakt en het formulier Schakelbord.
Merk op dat ook in de Nederlandstalige versie de tabel in het
Engels wordt weergegeven. Het formulier Schakelbord toont de
verschillende menus. Met de tabel Switch-board Items hebben we
verder niets te maken. Access maakt gebruik van die tabel om de
verschillende menu-onderdelen (schakelborden) te registreren. In
het schakelbordformulier dat gemaakt wordt kunnen we, zoals zal
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
331
blijken uit de toelichting, enige persoonlijke aanpassingen aanbren-
gen. Het onderdeel schakelbordbeheer opent het dialoogvenster
Schakelbordbeheer, zie guur 9.37.
In dit venster kunnen we menus en schakelbordpaginas opge-
ven. Standaard wordt al n hoofdmenu aangemaakt, namelijk
Hoofdschakelbord. We gaan twee nieuwe (sub)menus (schakel-
borden) maken.
Klik op de knop Nieuw. In het venster kunnen we de naam van het
nieuwe schakelbord opgeven.
Wijzig de naam in Overzichten en klik op OK.
Klik nogmaals op de knop Nieuw, wijzig de naam in Onderhoud
en klik op OK. De drie menus (schakelborden) zijn nu gemaakt.
Vervolgens moeten de menus van items worden voorzien.
Selecteer Hoofdschakelbord en klik op Bewerken. In dit dialoog-
venster kunnen we de items (onderdelen) van het hoofdmenu
opgeven, zie guur 9.38.
Figuur 9.37
Figuur 9.38
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
332
Voordat we de menu-items gaan speciceren, veranderen we eerst
de naam van het hoofdschakelbord.
Verander de naam Hoofdschakelbord in Hoofdmenu. Klik hierna
op de knop Nieuw. Er volgt een venster waarin we het eerste
menu-item kunnen invoeren, zie guur 9.39.
Typ in het eerste item Tekst de tekst van het eerst menu-item,
Boekingen.
Geef daarna op wat er moet gebeuren als deze optie wordt gese-
lecteerd. De verschillende mogelijkheden worden in de keuzelijst
getoond. Aangezien het formulier Boeking moet worden geopend,
selecteren we Formulier openen in bewerkingsmodus.
Selecteer in de derde keuzelijst het formulier dat geopend moet
worden, Boeking. Merk op dat het derde vakje afhankelijk is van
het tweede. In dit voorbeeld worden alle formulieren uit de toepas-
sing getoond.
Klik vervolgens op OK, we komen terug in het vorige venster.
We deniren meteen het tweede item uit het hoofdmenu,
namelijk Overzichten. Klik opnieuw op knop Nieuw in het venster
Schakelbordpagina bewerken.
Typ bij Tekst: Overzichten.
Kies in de tweede keuzelijst, Opdracht, voor Naar schakelbord
gaan. We moeten immers een submenu (schakelbord) openen.
Selecteer in de derde keuzelijst Overzichten en klik op de knop
OK. Schakelbordbeheer weet nu dat voor dit item het schakelbord
(submenu) Overzichten getoond moet worden.
Het laatste item van het hoofdmenu moet nog gedenieerd worden.
Klik opnieuw op de knop Nieuw in het venster Schakelbordpagina
bewerken. Voer achtereenvolgens in: Onderhoud, Naar
Schakelbord gaan en Onderhoud. Klik vervolgens op de knop OK.
Ten slotte is het de bedoeling dat een menu afgesloten kan worden.
Het hoofdmenu wordt afgesloten terwijl de submenus terugkeren
naar het hoofdmenu.
Figuur 9.39
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
333
Klik voor de laatste keer voor het hoofdmenu op de knop Nieuw.
Voer achtereenvolgens in: Sluiten en Toepassing afsluiten. Merk op
dat er maar twee items zijn. Klik hierna op de knop OK.
Het hoofdmenu is klaar. Klik op de knop Sluiten in het venster
Schakelbordpagina bewerken.
Er dient nog opgemerkt te worden dat in dit menu ook items gewij-
zigd of verwijderd kunnen worden, of op een andere plaats in het
menu gezet kunnen worden met de knoppen Omhoog en Omlaag.
Verder is het belangrijk te weten dat er maximaal acht items in n
menu passen.
Nu moeten de submenus Overzichten en Onderhoud nog gemaakt
worden. Dit gaat op dezelfde wijze.
Selecteer in het venster Schakelbordbeheer het item Overzichten
en klik hierna op de knop Bewerken.
In het volgende venster, Schakelbordpagina bewerken, kunnen we
de items van dit menu (schakelbord) opgeven. Klik op de knop
Nieuw en kies achtereenvolgens Klantenlijst, Macro uitvoeren en
rptKlantenlijst .Afdrukken.
Om de klantenlijst af te drukken hebben we immers voor het rap-
port Klantenlijst een macro gemaakt, genaamd rptKlantenlijst.
Afdrukken, die de klantenlijst direct naar de printer stuurt. We
kunnen in de tweede keuzelijst ook Rapport openen selecteren,
maar dan wordt het rapport als afdrukvoorbeeld getoond. We wil-
len het rapport echter direct naar de printer sturen, vandaar dat de
macro voor het rapport Klantenlijst noodzakelijk is.
Klik na de selecties op de knop OK.
Voer de vorige acties nog drie maal uit. Hieronder volgt een
beschrijving van de gegevens die moeten worden ingevoerd.
Argument Instelling
Tekst Vertreklijst
Opdracht Formulier openen in bewerkingsmodus
Formulier Datumbereik vertreklijst
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
334
De Vertreklijst wordt afgedrukt nadat eerst een formulier,
Datumbereik vertreklijst, op het scherm is getoond waarin we een
begin- en einddatum kunnen opgeven. Voor de Vertreklijst is het
niet noodzakelijk om een macro te maken die het overzicht af-
drukt, aangezien dat door de macro van het formulier Datumbereik
vertreklijst wordt uitgevoerd.
De omzetlijst dient met een macro gestart te worden, zodat deze
direct naar de printer gestuurd kan worden.
Kiezen we deze optie in het menu, dan gaan we n niveau
terug, naar het hoofdmenu. De menu-items voor het sub-
menu Overzichten zijn gedenieerd; we kunnen het venster
Schakelbordpagina bewerken afsluiten door op de knop Sluiten te
klikken.
Het laatste schakelbord (submenu Onderhoud) gaan we op dezelf-
de wijze maken.
Selecteer in het venster Schakelbordbeheer de optie Onderhoud en
klik op de knop Bewerken.
Hierna moeten de vijf items uit het submenu Onderhoud gede-
nieerd worden. We doen dit op dezelfde wijze als bij het submenu
Overzichten. Hieronder volgen de gegevens die ingevoerd moeten
worden.
Argument Instelling
Tekst Omzetlijst
Opdracht Macro uitvoeren
Macro rptOmzetlijst.Afdrukken
Argument Instelling
Tekst Sluiten
Opdracht Naar Schakelbord gaan
Schakelbord Hoofdmenu
Argument Instelling
Tekst Klanten
Opdracht Formulier openen in bewerkingsmodus
Formulier Klant
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
335
Het formulier Klant wordt geactiveerd onder dit item:
Het formulier Reis wordt geopend onder dit item:
Het formulier Bestemming wordt geactiveerd onder dit item:
Het formulier Constant wordt geopend onder dit item.
Wordt deze optie uit het menu gekozen, dan gaan we n
niveau terug, naar het hoofdmenu. De menu-items voor sub-
menu Overzichten zijn gedenieerd, we kunnen het venster
Schakelbordpagina bewerken afsluiten door op de knop Sluiten te
klikken. De menus (schakelborden) zijn gemaakt.
Sluit alle vensters van Schakelbordbeheer en kies in het database-
venster het overzicht Formulieren.
Open het formulier Schakelbord en controleer de werking van de
gemaakte menus.
Het formulier Schakelbord wordt in een afwijkende kleur getoond
ten opzichte van onze overige formulieren. We gaan het formulier
Argument Instelling
Tekst Reizen
Opdracht Formulier openen in bewerkingsmodus
Formulier Reis
Argument Instelling
Tekst Bestemmingen
Opdracht Formulier openen in bewerkingsmodus
Formulier Bestemming
Argument Instelling
Tekst Constanten
Opdracht Formulier openen in bewerkingsmodus
Formulier Constant
Argument Instelling
Tekst Sluiten
Opdracht Naar Schakelbord gaan
Schakelbord Hoofdmenu
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
336
Schakelbord op een aantal punten aanpassen, zodat het overeen-
stemt met onze overige formulieren. We kunnen het formulier
Schakelbord aanpassen aan onze eigen wensen zolang de detail-
sectie, het gedeelte waar de knoppen zitten, niet wordt veranderd.
Plaats het formulier Schakelbord in de ontwerpweergave op het
scherm.
Open het eigenschappenvenster van het formulier. Het schakelbord
is in een aantal secties verdeeld.
Selecteer de HorizontalHeaderBox (dat is de bovenste sectie).
Verwijder deze sectie (via Knippen).
De tekst t Zonnetje is met schaduw afgebeeld. Dit is gerealiseerd
door twee labels vlak onder elkaar te plaatsen. Selecteer Label2 en
verwijder dit label (Delete-toets).
Selecteer Label1. Verander in het tabblad Opmaak de eigenschap
Voorgrondkleur in zwart (klik op de drie puntjes) en de eigen-
schap Tekengewicht in Vet.
Nu plaatsen we de gebruikte lichtgele formulierkleur in de detail-
sectie. Klik op de balk Detail of selecteer deze uit de keuzelijst en
verander in het eigenschappenvenster, tab Opmaak, de eigenschap
Achtergrondkleur in lichtgeel door op de drie puntjes te klikken.
De linkerkant van het schakelbord is gereserveerd voor een af-
beelding. Met behulp van een tekenprogramma hebben wij voor
reisbureau t Zonnetje een afbeelding samengesteld, de naam is:
ZonLogo.gif.
Selecteer de sectie Picture van het schakelbord en selecteer in
het eigenschappenvenster de eigenschap Figuur, in het tabblad
Opmaak. Klik op de drie puntjes en kies voor het gif-plaatje
Zonlogo.
Verder kunnen we overwegen om de eigenschap Systeemmenu
van het formulier Schakelbord uit te schakelen, zodat alleen via de
knop Sluiten het formulier beindigd kan worden. Wij hebben dat
niet gedaan, zodat we met de X-knop kunnen sluiten zonder de
database af te sluiten. Het schakelbord is aangepast aan onze
smaak.
Bekijk het resultaat in de formulierweergave en pas eventueel de
afmetingen aan. Klik in de menubalk op de knop Opslaan om die
afmetingen vast te leggen.
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
337
Om de toepassing volledig te maken moeten we nog een verande-
ring aanbrengen. We wensen het formulier Schakelbord meteen te
starten zodra de database wordt geopend; we komen dan meteen
in het hoofdmenu. Dat kan gerealiseerd worden door een macro
te maken met de naam AutoExec, waarin staat dat het formulier
Schakelbord geopend moet worden. Er is echter een betere metho-
de, waarbij we extra instellingen kunnen aangeven, zoals het
onderdrukken van het databasevenster.
Selecteer daartoe in de menubalk Extra de optie Opstarten..., het
formulier Opstarten wordt getoond, zie guur 9.40.
Bij Toepassingsnaam kunnen we eventueel een afwijkende titel
opgeven. Kies voor de titel Reisbureau.
In de keuzelijst Formulier/pagina weergeven kunnen we opgeven
welk formulier geopend moet worden zodra de database wordt
gestart.
Selecteer het formulier Schakelbord.
In het vakje Toepassingspictogram kunnen we een pictogram
opgeven voor de toepassing. Wij hebben op de cd-rom een picto-
gram voor onze database staan, genaamd t Zonnetje.ico. Door te
klikken op de drie puntjes kunnen we aangeven waar het picto-
gram te vinden is. We moe-ten de map aanwijzen waarin we de
gegevens van de cd-rom hebben gekopieeerd. In guur 9.40 wordt
een map geselecteerd waarin we de database en overige bestanden
hebben geplaatst. Op de statusbalk van Windows wordt nu het pic-
togram, een tropisch eiland, zichtbaar.
Verwijder het vinkje bij Databasevenster weergeven. Hierdoor
wordt het databasevenster niet meer getoond. Verwijder ook het
Figuur 9.40
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
338
vinkje bij Statusbalk weergeven. De Access statusbalk wordt dan
niet meer weergegeven.
De Menubalk en een Snelmenubalk veranderen we niet. In het
onderste deel van het scherm kunnen we een aantal opties met
betrekking tot menu- en werkbalken opgeven. Verwijder het
vinkje bij Volledige menus toestaan, Access gebruikt dan een
reeks beknopte ingebouwde menus, die bijvoorbeeld geen opmaak-
opdrachten bevatten. De standaard snelmenus wensen we niet, alle
mogelijkheden zitten al in de formulieren en knoppen ingebouwd.
Verwijder daartoe het vinkje bij Standaardsnelmenus toestaan. De
ingebouwde werkbalk mag niet getoond worden in onze toepas-
sing. Verwijder het vinkje bij Ingebouwde werkbalken toestaan.
Evenmin willen we dat de werkbalken gewijzigd kunnen worden,
verwijder daartoe het vinkje bij Wijzigingen in werkbalk/menu
toestaan.
In het geavanceerde gedeelte: de speciale toetsen, zoals F11 om het
databasevenster te tonen of Ctrl+F11 om te kunnen schakelen tus-
sen de aangepaste menubalk en de ingebouwde menubalk, zijn niet
wenselijk. Vink daartoe Speciale Access-toetsen gebruiken af.
Klik op de knop OK en start de toepassing opnieuw. De werkbalk
is verdwenen, de menubalk is verkleind en bij de applicatie is een
pictogram te zien.
Let op!
Iedere keer als de toepassing wordt gestart, wordt de verkleinde
menubalk getoond. Het aanbrengen van wijzigingen in de database
is niet meer mogelijk. De werkbalk en de ingebouwde menubalk
worden niet meer getoond. Om de toepassing te starten zonder de
opgegeven instellingen uit het menu Opstarten, starten we de toe-
passing met de Shift-toets ingedrukt!
Hiermee is de applicatie voltooid en kunnen we ermee aan de slag.
Nu volgen nog enige opmerkingen over het operationeel maken
van de applicatie.
Tijdens het bouwen van de applicatie neemt de omvang van de
database toe. Allerlei overbodige gegevens worden door Access
achter de schermen bewaard. Die overbodige gegevens kun-
nen verwijderd worden door in het menu Extra te kiezen voor
Databasehulpprogrammas, Database comprimeren en herstellen.
De omvang van de database zal aanzienlijk verkleind worden.
Copyright 2007 Academic Service
9 Het bouwen van een toepassing
339
Iedereen die weet dat een toepassing volledig te benaderen is door
deze op te starten met de Shift-toets ingedrukt, kan eenvoudig
(ongewenste) wijzigingen aan onze toepassing aanbrengen.
We kunnen een compacte versie van de database maken door
in het menu Extra voor Databasehulpprogrammas te kiezen.
Selecteer vervolgens Mde-bestand maken. Het hulpprogramma
vraagt om een naam en locatie voor het opslaan van onze com-
pacte versie. Er wordt een versie gemaakt met de extensie Mde.
Deze versie compileert de code, die automatisch is gemaakt door
de Wizard van de opdrachtknoppen, en comprimeert de database.
Om wijzigingen door te voeren in het ontwerp van onze database,
dienen we onze oorspronkelijke versie te gebruiken. Aangezien de
Mde-versie compacter is, werkt deze sneller dan de originele ver-
sie!
Als we de applicatie willen verspreiden onder gebruikers die niet
over een volledige versie van Access beschikken, kunnen we een
speciaal pakket kopen, genaamd Access Developer Extentions.
Hiermee kunnen we een runtime-versie van onze toepassingen
maken en deze distribueren.
Copyright 2007 Academic Service
Copyright 2007 Academic Service
10 SQL, Structured Query
Language
Bij de bovenstaande opsomming gaan we ervan uit dat de leerlin-
gen een case uitwerken waarbij de docent/begeleider de rol van
opdrachtgever/gebruiker speelt.
10.1 Inleiding
Bij het werken met databases hebben we ons tot nu toe beperkt tot
het werken met n standaardpakket op de pc. Er bestaan echter
nog vele andere databasepakketten, met name voor toepassingen
op grotere computers. Enkele bekende grote databasemanagement-
systemen (DBMSen) zijn Oracle, Ingres, SQLserver en DB2. Een
kenmerk van deze pakketten is dat ze geschikt zijn voor het bedie-
nen van vele gebruikers tegelijkertijd en het verwerken van grote
hoeveelheden gegevens.
Als gebruikers informatie willen opvragen uit de gebruikte
database, dienen zij zich te bedienen van de vraagtaal die in
het gebruikte pakket is opgenomen. In principe betekent dit dat
voor ieder DBMS een andere vraagtaal moet worden gebruikt.
Gelukkig ondersteunen vrijwel alle pakketten tegenwoordig een
gemeenschappelijke vraagtaal: SQL.
SQL, Structured Query Language, is in eerste aanzet ontwikkeld
door IBM, maar intussen gevolueerd tot een standaard. Kunnen
we werken met deze vraagtaal, dan betekent dit dus dat we infor-
matie kunnen opvragen uit vele databasesystemen.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
342
In dit hoofdstuk zullen we ons beperken tot het formuleren van
querys. Het toevoegen van gegevens aan de database of het wij-
zigen hiervan zal slechts zijdelings worden besproken. De reden
daarvoor is het feit dat bij het toevoegen en wijzigen van gegevens
vrijwel altijd gebruikgemaakt wordt van een applicatieprogramma,
dat de gebruiker op interactieve manier laat werken. Kennis van
SQL is daarbij eigenlijk niet noodzakelijk.
Ook voor het formuleren van standaard-querys zullen vaak appli-
caties ontwikkeld worden. Het is echter ondoenlijk om voor iedere
informatiebehoefte, zeker voor die welke slechts sporadisch optre-
den, een applicatie op te zetten. Dat kost te veel tijd en geld.
Binnen Access kunnen we voor het opvragen van informatie altijd
gebruikmaken van de query wizard, waardoor het lijkt alsof we
geen kennis van SQL hoeven te hebben. Op de achtergrond vormt
Access de query echter wel om tot SQL. Deze code is ook op te
vragen.
De reden om in dit boek toch SQL op te nemen is tweeledig. Ener-
zijds kunnen we met SQL terecht bij ieder modern DBMS, waar-
onder Oracle of DB2. Anderzijds zijn er enkele soorten opvragin-
gen en bewerkingen die we binnen Access alleen maar met SQL
kunnen uitvoeren. We kunnen dus ook binnen Access niet om SQL
heen.
10.2 Begrippen
Ter herinnering enige begrippen. SQL ziet de gegevens alsof deze
liggen opgeslagen in tabellen. Tijdens het logisch ontwerp spraken
we over entiteittypen. Een tabel bestaat uit een aantal rijen (ofte-
wel entiteit-occurrences) en kolommen (oftewel attribuuttypen).
Tabel ARTIKEL
Artikelnummer Omschrijving Verkoopprijs Voorraad Leveranciercode
64447 V-snaar 56,00 5 J3633
75558 Accu 225,00 2 K3773
84494 Stuurhoes 23,95 4 P4774
46644 Binnenspiegel 37,50 1 J3633
enzovoort
kolommen
Rijen
Copyright 2007 Academic Service
10 SQL, Structured Query Language
343
Om iedere rij uniek te kunnen identiceren is er een gegeven, of
een combinatie van gegevens die iedere rij uniek maken, de pri-
maire sleutel. In de tabel Artikel is dat het artikelnummer. In een
rij kunnen gegevens voorkomen die verwijzen naarde sleutel van
een (andere) tabel. Deze gegevens (of combinatie ervan) worden
vreemde sleutel (foreign key) genoemd. Een voorbeeld hiervan is
de leveranciercode. Die verwijst immers naar een soortgelijke tabel
waarin de gegevens van de leveranciers liggen opgeslagen en waar
we een leverancier kunnen identiceren met behulp van de code.
Om de betrouwbaarheid van de gegevens te waarborgen, worden
er aan de tabellen enkele eisen gesteld:
Een primaire sleutel mag geen overbodige attributen bevatten
(minimaliteiteis).
Er mogen geen dubbele rijen voorkomen en een primaire sleutel
moet altijd een gedenieerde waarde hebben (identity integrity).
Iedere waarde die een vreemde sleutel aanneemt, moet ook als
sleutelwaarde voorkomen (referential integrity).
Kolommen bevatten alleen elementaire gegevens, samengestelde
gegevens dienen dus opgesplitst te worden.
10.3 Opbouw hoofdstuk
In dit hoofdstuk zal worden gewerkt met twee verschillende data-
bases. De eerste betreft een database van een bibliotheek, die zal
worden gebruikt om de theorie toe te lichten aan de hand van enige
voorbeelden. Daarnaast dient een aantal opdrachten te worden
gemaakt, waarbij deze database moet worden gebruikt. Deze
opdrachten kunnen niet op de computer worden uitgewerkt, omdat
de betreffende database alleen op papier bestaat. De antwoorden
van de opdrachten staan op de meegeleverde cd-rom bij dit boek.
De tweede database betreft een database van een groothandel in
alcoholische dranken. Vraag deze aan de docent. De naam is Alco
en hij zal worden gebruikt om je vaardigheden in de praktijk te
toetsen. De praktijkgerichte opdrachten moeten worden uitgewerkt
met behulp van deze database.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
344
10.4 Database Bibliotheek (theorieopdrachten)
Een grote bibliotheek heeft meerdere lialen. Van alle uitgaven
kunnen er meerdere exemplaren aanwezig zijn, zelfs in n liaal.
Een lezer mag alleen maar boeken lenen in het eigen liaal. Lezers
kunnen uitgeleende boeken laten reserveren. Men maakt gebruik
van zes verschillende tabellen, met de volgende opbouw:
LEZER UITGAVE UITLENING
Lezernr ISBN * Lezernr
Naam Titel * Exemplaarnr
Adres Schrijver * Huurdatum
Postcode Uitgeverij * Retourdatum (datum waarop
Plaats Prijs * boek is teruggebracht)
Telefoon
Geboortedatum
* Filiaalnr
FILIAAL EXEMPLAAR RESERVERING
Filiaalnr Exemplaarnr * Lezernr
FilAdres * Filiaalnr * ISBN
FilPostcode * ISBN * Datum
FilPlaats
FilTelefoon
De primaire sleutels zijn onderstreept. Vreemde sleutels zijn voor-
zien van een sterretje.
Het bijbehorende ER-diagram is weergegeven in guur 10.1.
o.b.v. ISBN o.b.v. ISBN
o.b.v. lezernr
o.b.v. filiaalnr o.b.v. filiaalnr
o.b.v. lezernr
o.b.v. exemplaarnr
Reservering Uitgave
Filiaal Lezer
Uitlening
Exemplaar
Figuur 10.1
Copyright 2007 Academic Service
10 SQL, Structured Query Language
345
10.5 Database Alco (praktijkopdrachten)
Een groothandel in alcoholische dranken maakt onder meer
gebruik van de onderstaande tabellen.
ARTIKEL SOORT PRODUCTGROEP
Artikelcode Soortnr Productgroepnr
* Soortnr * Productgroepnr Productnaam
Jaar Naam
Inhoud Kleur
Adviesverkoopprijs Alcoholpercentage
Opvoorraad
FACTUUR FACTUURREGEL AFNEMER
Factuurnummer * Factuurnummer Afnemernummer
* Afnemernummer * Artikelcode Naam
Factuurdatum Verkoopaantal Adres
Verkoopprijs Postcode
Plaats
Regio
De primaire sleutels zijn onderstreept. Vreemde sleutels zijn voor-
zien van een sterretje.
Het bijbehorende ER-diagram is weergegeven in guur 10.2.
10.6 Opvragingen uit n tabel
De volgende voorbeelden hebben betrekking op de bibliotheek-
database. Om gegevens uit tabellen op te vragen moeten we
gebruikmaken van het SELECT-commando, dat de volgende
opbouw bezit:
factuurregel factuur afnemer
Artikel Soort Productgroep
o.b.v. artikelcode
o.b.v. productgroepnr o.b.v. soortnr
o.b.v. afnemernr o.b.v. factuurnr
Figuur 10.2
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
346
SELECT <te tonen kolom> [,<te tonen kolom>]
FROM <tabelnaam>
[ WHERE <voorwaarde> ] ;
De teksten tussen de scherpe haken <> geven aan dat daar de
betreffende gegevens dienen te worden ingevuld. Alles tussen
rechte haken [] geeft aan dat het gebruik van dat gedeelte toegesta-
an, maar niet verplicht is. De afsluitende puntkomma geeft het
einde van de opdracht aan. Deze is verplicht, omdat anders wordt
gewacht met de uitvoering van het commando.
Het overzicht wordt getoond in rijen. Per geselecteerde rij uit de
tabel worden de gevraagde kolommen afgedrukt. De uitvoer
bestaat dus ook weer uit een tabel.
De namen van alle lezers uit Rotterdam:
SELECT naam
FROM lezer
WHERE plaats = Rotterdam ; (let op de aanhalingstekens)
Uitvoer :
NAAM
Jansen
Pietersen
Gerritsen
enzovoort
De titels en prijzen van alle boeken van Hermans:
SELECT titel, prijs
FROM uitgave
WHERE schrijver = Hermans ;
Uitvoer :
TITEL PRIJS
Onder professoren 34,95
Donkere kamer van Damocles 29,95
enzovoort.
voorbeelden
Copyright 2007 Academic Service
10 SQL, Structured Query Language
347
Terzijde
Let op! Standaard wordt door SQL onderscheid gemaakt tussen
hoofd- en kleine letters! Binnen Access wordt hierin echter
(standaard) geen onderscheid gemaakt.
De adressen en telefoonnummers van alle lialen die binnen Breda
gelegen zijn:
SELECT ladres, ltelefoon
FROM liaal
WHERE lplaats = Breda ;
Alle gegevens afdrukken van alle lezers:
SELECT *
FROM lezer ;
We zien dat het niet noodzakelijk is om een voorwaarde op te
nemen in het SELECT-statement. Tevens zien we het gebruik van
het teken *, wat aangeeft dat alle kolommen van de genoemde
tabel moeten worden afgedrukt.
We kunnen bij de WHERE-optie gebruikmaken van meerdere
voorwaarden tegelijkertijd. De afzonderlijke voorwaarden kunnen
we door de logische operatoren OR of AND met elkaar verbinden.
Bij het door elkaar gebruiken van OR en AND is het verstandig
met haakjes te werken, om de juiste voorwaarden te combineren.
De titels van de boeken van Wolkers die minder dan 25, kosten,
en de titels van de boeken van Campert die bij uitgeverij de brede
letter zijn uitgegeven.
SELECT titel
FROM uitgave
WHERE (schrijver = Wolkers
AND prijs < 25 )
OR (schrijver = Campert
AND uitgeverij = de brede letter) ;
Bij het opgeven van voorwaarden, moeten we teksten omgeven
door aanhalingstekens; getallen kunnen we direct opnemen.
voorbeeld
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
348
Als we in een voorwaarde een datumaanduiding willen gebrui-
ken, moeten we de datum standaard aangeven volgens het formaat
mm-dd-jj, omgeven door twee hekjes. De datum 2 april 1955
moeten we dus opgeven als #4-2-55# of als #04-02-55#. De eeuw-
aanduiding laten we standaard weg, tenzij we Windows anders
hebben ingesteld. Hoe we de datum precies moeten intoetsen, is
afhankelijk van de instellingen van Windows. Ga dat dus zelf even
na. Ongeacht de datuminstelling van Windows moeten we binnen
het SQL-deel van Access altijd met de Amerikaanse notatiewijze
te werken, dus eerst de maand- en daarna pas de dagaanduiding!
We kunnen ook gebruikmaken van een alternatieve Amerikaanse
notatie, te weten: dd-MMM-jj, waarbij de maand wordt aangege-
ven door de eerste drie letters. De datum 3 mei 1981 wordt dan
#3-MAY-81#. In de Nederlandse versie gebruiken we uiteraard
#3-MEI-81#.
Terzijde
De datumnotatie tussen hekjes is geen standaard SQL-notatie en
werkt alleen in Access-SQL. In andere databases wordt een
andere datumnotatie gebruikt. Hetzelfde geldt voor de hieronder
besproken jokers (wildcards). In standaard SQL worden respec-
tievelijk _ en % gebruikt. Standaard werkt Access voor wat
betreft SQL met de standaard ANSI 89. Deze wijkt op een aantal
punten af van de standaard ANSI 92 die door de meeste andere
systemen wordt gebruikt. Om beter aan te sluiten bij de praktijk
(MS SQL-server) is het daarom vanaf versie 2000 mogelijk om
Access zo in te stellen dat ook dit zich houdt aan de standaard
ANSI 92. Maar querys die gemaakt zijn volgens de ene
standaard, kunnen niet zonder meer gebruikt worden in de
andere. Vooral bij het gebruik van wildcards zijn er belangrijke
verschillen. In dit boek is ervoor gekozen om Access te gebrui-
ken volgens de standaard ANSI 89. In bijlage B staat meer infor-
matie over hoe je kunt overschakelen naar ANSI 92.
In de voorwaarden kunnen we gebruikmaken van:
1. = , > , < , <= , >= en <>
WHERE prijs >= 49
Copyright 2007 Academic Service
10 SQL, Structured Query Language
349
2. BETWEEN ... AND ..... (De grenswaarden voldoen ook!)
IN ( waardenverzameling )
NOT
LIKE Bij de operator LIKE kunnen we gebruikmaken van de
tekens ? en/of *. Het teken ? geeft aan dat op die
positie n willekeurig teken moet staan. Het teken *
geeft aan dat op die plaats gn teken hoeft te staan,
of n willekeurig teken, of een hele serie willekeurige
tekens.
IS NULL Vergelijken op een leeg veld. Let op, gebruik niet het
teken =, maar het woord IS.
WHERE prijs BETWEEN 20 AND 30
WHERE prijs IN ( 10, 15, 27, 49 )
WHERE prijs NOT IN ( 10, 15, 27, 49 )
WHERE schrijver LIKE ?olk*
De laatste voorwaarde selecteert dus bijvoorbeeld de schrijvers
Wolkers, Tolkien en Kolk.
WHERE Geboortedatum LIKE 02-03-*
Welke lezers zijn er op 3 februari jarig? Let op, nu zijn de nullen
wel verplicht en de datum moet als tekst zijn opgegeven!
WHERE schrijver <> Wolkers
OR schrijver IS NULL
Zonder de toevoeging OR schrijver IS NULL worden de boeken
waarbij geen schrijver is opgenomen niet afgedrukt omdat een
vergelijking met een leeg veld altijd de waarde FALSE oplevert.
Door een extra voorwaarde op te nemen en dus expliciet te testen
op een leeg veld, worden ook deze rijen opgenomen in de uitvoer-
tabel.
WHERE DatumRetour - DatumLenen > 7
Wie heeft er langer dan een week geleend? Het verschil tussen
twee datums levert het aantal dagen dat daartussen ligt. We kun-
nen dus gewoon met datums rekenen!
WHERE Geboortedatum BETWEEN 05-01-88 AND 05-31-88
Welke lezers zijn er in Mei 1988 geboren?
voorbeelden
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
350
Het kan voorkomen dat bij bepaalde opvragingen meerdere keren
dezelfde rij zou worden afgedrukt. Als we bijvoorbeeld alle woon-
plaatsen van de lezers laten afdrukken, zullen diverse woonplaat-
sen zeer waarschijnlijk meerdere keren voorkomen. Als we alle
geproduceerde rijen slechts n maal in het overzicht willen opne-
men, dan breiden we het SELECT-statement uit met de toevoeging
DISTINCT. Door de verwerkingswijze van DISTINCT blijkt dat
de uitvoer nu ook automatisch gesorteerd is op volgorde van de te
tonen kolommen.
SELECT DISTINCT woonplaats
FROM lezer ;
Om een overzicht van de namen van de schrijvers met de naam
van de uitgeverij van het betreffende boek te krijgen, zonder dub-
bele combinaties, formuleren we het volgende commando:
SELECT DISTINCT schrijver, uitgeverij
FROM uitgave ;
Hierbij kan wel de naam van een schrijver meerdere keren voor-
komen, evenals de naam van een uitgeverij, maar iedere combina-
tie wordt hoogstens n keer in het overzicht opgenomen.
Opgaven
10.1 Verzorg aan de hand van de tabellen die behoren bij de bibliotheek-
database de volgende overzichten:
a. Alle gegevens van alle uitgaven.
b. De telefoonnummers en postcodes van alle lezers uit Leiden die
nog niet meerderjarig zijn.
c. De namen van de schrijvers die ooit een boek hebben uitgege-
ven bij uitgeverij De dunne kaft.
d. De namen van de uitgeverijen die ooit een boek van Wolkers
hebben uitgebracht.
e. De datums waarop lezer 64489 boeken heeft geleend, na 1980.
f. De nummers van de lialen die minimaal n exemplaar heb-
ben van het boek met ISBN 9062335306.
10.2 Wanneer kan het voorkomen dat in een overzicht meerdere rijen
hetzelfde zijn? Gebruik in het antwoord de term primaire sleutel.
Copyright 2007 Academic Service
10 SQL, Structured Query Language
351
10 SQL, Structured Query Language
351
10.3 a. Geef een mening omtrent het opnemen van de kolom Prijs in
de tabel UITGAVE.
b. Geef een mening omtrent de opbouw van de sleutel in de tabel
UITLENING.
10.7 SQL gebruiken in Access
Om binnen Access met SQL te werken moeten we eerst de betref-
fende database openen via Bestand, Database openen. Selecteer
het overzicht Querys. Om een nieuwe query te ontwerpen gebrui-
ken we de knop Nieuw.
Uit de geboden mogelijkheden in guur 10.3, Nieuwe query, kie-
zen we voor het ontwerpen in de Ontwerpweergave. Op het scherm
wordt nu guur 10.4 getoond, waarin we kunnen opgeven welke
tabellen we bij onze query willen gebruiken.
Figuur 10.3
Figuur 10.4
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
352
Omdat we in de SQL-query zelf opgeven welke tabellen we wen-
sen te gebruiken, sluiten we het venster Tabel toevoegen direct af,
via de knop Sluiten, zonder een tabel te selecteren.
Het scherm dat nu gepresenteerd wordt (zie guur 10.5), is bedoeld
om op de Access-manier, dus muisgestuurd, de querys te ontwer-
pen. We kunnen nu het scherm selecteren waarin we zelf SQL-
querys kunnen invoeren (guur 10.6) door in het menu te kiezen
voor Beeld, SQL, of door gebruik te maken van de knop Beeld,
links in de werkbalk.
We zien dat het woord SELECT al voor ons is neergezet. We kun-
nen nu de query intoetsen, waarna we hem kunnen laten uitvoeren
door op de knop Uitvoeren te drukken (de toets met het uitroep-
teken). Ook kunnen we in het menu kiezen voor Query, Uitvoeren.
Op het scherm wordt de uitvoer van de query getoond, of een fout-
melding omdat de query niet juist is opgesteld. In het laatste geval
kunnen we na het lezen van de foutmelding kiezen voor OK en de
query direct verbeteren.
Als de query foutloos is en dus wordt uitgevoerd zal Access het
resultaat op het scherm plaatsen. Deze uitvoer kunnen we op de
gebruikelijke wijze afdrukken op papier: via Bestand, Afdrukken
of door gebruik te maken van de knop Afdrukken.
Figuur 10.5
Copyright 2007 Academic Service
10 SQL, Structured Query Language
353
We keren weer terug naar het ontwerpscherm door in het menu
te kiezen voor Beeld, SQL of door weer gebruik te maken van de
knop Beeld. In het laatste geval moeten we het bij die knop beho-
rende menu even naar beneden trekken door te klikken op de knop
en vervolgens te kiezen voor SQL.
Een eenmaal ontwikkelde query kunnen we bewaren via Bestand,
Sluiten. Ook kunnen we het ontwerpscherm afsluiten. In dat geval
zal Access ons vragen of we de query wensen te bewaren en zo ja,
onder welke naam.
Bestaande querys openen we door ze in het overzicht Querys te
selecteren en vervolgens te kiezen voor Ontwerpen. Bestaande
querys kunnen we ook direct laten uitvoeren door ze te selecteren
en vervolgens te kiezen voor Openen. Ook querys die zijn ontwor-
pen met een wizard, zonder gebruik te maken van SQL, kunnen
we altijd in SQL opvragen. Daartoe selecteren we de betreffende
query in het ontwerpscherm en kiezen vervolgens Beeld, SQL.
Ook het omgekeerde is meestal mogelijk.
Let op! Standaard SQL gaat ervan uit dat de namen van de kolom-
men altijd uit n woord bestaan. Bij Access kunnen we echter
kolomnamen uit meerdere woorden laten bestaan. Deze namen
Figuur 10.6
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
354
kunnen we dan alleen in een SQL-query gebruiken als we de
betreffende naam tussen rechte haken plaatsen, dus SELECT
[Aantal kamers], [Totale oppervlakte] .... Dit geldt ook voor de
namen van de tabellen.
In dit hoofdstuk gebruiken we SQL binnen Access. Om SQL te
kunnen gebruiken, hebben we op zich Access niet nodig. Een zelf-
standig programma dat toegang verschaft tot de gewenste database
voldoet. Een dergelijk programma is het programma S(impel)QL,
dat door A.H.J. Kuipers, docent aan de Hogeschool Rotterdam,
ontwikkeld is en dat door het onderwijs gratis te gebruiken is. Dit
programma maakt via MS JetSQL verbinding met de database en
kan zelfs worden gebruikt zonder dat Access op de PC is genstal-
leerd. Het programma houdt zich aan de ofcile SQL-standaard,
dit in tegenstelling tot Access dat hier op een aantal plekken net
even iets van afwijkt. Je vindt het programma S(impel)QL en een
uitvoerige handleiding op de bij dit boek behorende CD.
Opgave
10.4 Voer de volgende opdrachten uit aan de hand van de Alco-data-
base.
a. Start Access of S(impel)QL en activeer de database Alco.
Gebruik bij de beantwoording de beschrijving van de database
zoals je deze terug vindt in paragraaf 10.5.
b. Laat alle gegevens van de afnemers afdrukken.
c. Welke productsoorten worden er aangeboden? Laat naam, kleur
en alcoholpercentage afdrukken.
d. Welke facturen zijn er verstuurd op 28 of 29 juni 2005? Laat de
factuurnummers afdrukken.
e. Welke Artikelen hebben een adviesverkoopprijs onder de
25 euro en een voorraad van meer dan 30 stuks? Laat het soort-
nummer en jaartal afdrukken.
f. Welke rode dranken met een alcoholpercentage van 10 of meer
kunnen worden geleverd. Laat het productgroepnummer en de
naam afdrukken.
g. Bij welke artikelen is geen adviesverkoopprijs opgenomen?
h. Op welke dagen hebben we gefactureerd?
i. Toon alle artikelen uit de productgroepen wijn, port, rose en
sherry.
Copyright 2007 Academic Service
10 SQL, Structured Query Language
355
10.8 Eenvoudige opvragingen uit meerdere tabellen
In de vorige paragraaf hebben we ons beziggehouden met het uit-
voeren van opvragingen uit n enkele tabel. Vaak zullen de
gegevens echter uit meerdere tabellen komen. We maken dan
gebruik van hetzelfde SELECT-statement, maar geven bij het
FROM-gedeelte nu meerdere tabellen op.
SELECT <te tonen kolom> [,<te tonen kolom>]
FROM <tabelnaam> [,<tabelnaam>]
[ WHERE <voorwaarde> ] ;
Als we meerdere tabellen opgeven, wordt iedere rij uit de ene
tabel gecombineerd met alle andere rijen uit de andere tabellen.
We noemen dit een join. Als we twee tabellen met ieder 100 rijen
combineren, ontstaan dus 10.000 rijen! Bij grote tabellen neemt
het totale aantal gegenereerde rijen explosief toe. Deze explosie
dienen we tegen te gaan. Het is vrijwel altijd zinloos om alle rijen
uit de ene tabel te combineren met alle rijen uit de andere tabel. We
mogen alleen de zinvolle combinaties toestaan. Daartoe maken we
gebruik van het WHERE-gedeelte.
We geven een voorbeeld: een overzicht van de namen en num-
mers van de lezers die in een liaal in Breda hun boeken lenen. We
vinden de naam van een lezer in de tabel LEZER. Of een liaal
in Breda ligt, is te vinden in de tabel FILIAAL. We kunnen nu
de rijen uit de tabel LEZER uitbreiden met de rijen uit FILIAAL.
Het combineren van twee rijen heeft alleen maar zin voor die
rijen waarbij een gelijk liaalnummer optreedt. De rij uit de tabel
FILIAAL met liaalnummer 12 combineren we dus alleen met die
rijen uit LEZER waar ook liaalnummer 12 staat vermeld. Bedenk
dat liaalnr in LEZER een vreemde sleutel is, waarbij verwezen
wordt naar liaalnr in FILIAAL.
SELECT lezer.naam, lezer.lezernr
FROM lezer , liaal
WHERE lezer.liaalnr = liaal.liaalnr
AND liaal.lplaats = Breda ;
Hierbij is allereerst opgegeven wat er in het overzicht moet worden
opgenomen. Daarbij moet de kolomnaam voorafgegaan worden
voorbeeld
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
356
door de naam van de bijbehorende tabel, van elkaar gescheiden
door een punt. De tabelnaam mag achterwege gelaten worden als
de kolomnaam uniek is voor de in het FROM-gedeelte opgesomde
tabellen. Ook goed is dus:
SELECT naam, lezernr
FROM lezer , liaal
WHERE lezer.liaalnr = liaal.liaalnr
AND lplaats = Breda ;
Vervolgens wordt opgegeven uit welke tabellen gegevens benodigd
zijn. Hierna worden de juiste rijen van de tabellen met elkaar ge-
combineerd. In dit geval gebeurt dit op basis van gelijk liaalnum-
mer. Bovendien wordt er alleen maar gecombineerd voor de rijen
uit FILIAAL waarbij geldt dat in de kolom plaats de waarde Breda
staat. Omdat een lezer slechts in n liaal boeken mag lenen, en
omdat de lezernummers uniek zijn, zullen er in het overzicht geen
dubbele rijen voorkomen.
We willen een overzicht van de titels van de boeken die lezer
355267 in januari 2001 geleend heeft.
De gegevens komen uit de tabellen UITLENING, EXEMPLAAR
en UITGAVE. Voor het tot stand brengen van de juiste combina-
ties moeten we kijken naar de in de tabellen overeenkomende
kolommen. Voor het op de juiste manier combineren komen we
dan op de volgende beperkingen:
WHERE uitlening.exemplaarnr = exemplaar.exemplaarnr
AND exemplaar.isbn = uitgave.isbn
Daarnaast hebben we nog te maken met beperkingen die uit de
vraagstelling volgen, te weten:
AND uitlening.lezernr = 355267
AND uitlening.datum >= #1-1-01#
AND uitlening.datum <= #1-31-01# ( of BETWEEN )
Om het typewerk te beperken zullen we niet steeds de volledige
naam opnemen bij de kolomaanduiding, maar een zogeheten alias.
Daarbij geven we in het FROM-gedeelte voor de tabellen een alias-
naam op, door de tabelnaam te laten volgen door de door ons
voorbeeld
Copyright 2007 Academic Service
10 SQL, Structured Query Language
357
gewenste alias-naam, gescheiden door een spatie. Bij het aandui-
den van de tabellen moeten we vervolgens de alias-naam gebrui-
ken.
SELECT DISTINCT u.titel
FROM uitgave u , exemplaar e, uitlening ul
WHERE ul.exemplaarnr = e.exemplaarnr
AND e.isbn = u.isbn
AND ul.lezernr = 355267
AND ul.datum>= #1-1-01#
AND ul.datum<= #1-31-01# ;
In de query is de toevoeging DISTINCT opgenomen omdat een
titel meerdere keren kan voorkomen in het overzicht. De lezer kan
immers meer dan eens hetzelfde boek lenen!
We kunnen een SQL-query in Access (geen standaard SQL) exi-
bel maken, op dezelfde wijze die we eerder zijn tegengekomen bij
het werken met gewone Access-querys. Daartoe gebruiken we in
een voorwaarde een variabele. De naam hiervan mag niet gelijk
zijn aan de naam van een kolom uit een van de betrokken tabel-
len. Voordat de query wordt uitgevoerd, zal Access om de waarde
vragen die aan de variabele moet worden toegekend. We kunnen
van de voorgaande query de uitvoer exibel maken door de laatste
twee regels te wijzigen in:
AND ul.datum >= Startdatum
AND ul.datum <= Einddatum ;
Access vraagt zowel voor de variabele Startdatum als voor de
variabele Einddatum de waarde. Deze waarde zal in de query
worden ingevuld. Daarna wordt de query pas uitgevoerd. We kun-
nen nu dus ook een overzicht opvragen over heel 1997, of over de
eerste week van mei, of van het derde kwartaal, of...
We kunnen ook een overzicht maken van alle titels waarvoor een
reservering bestaat. Merk op dat het opnemen van DISTINCT
noodzakelijk is.

SELECT DISTINCT u.titel
FROM uitgave u , reservering r
WHERE u.isbn = r.isbn ;
voorbeeld
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
358
Tip: Uit een tabel alle kolommen nodig? Maak dan gebruik van het
teken *.
Bijvoorbeeld : lezer.*
of exemplaar.liaalnr, uitgave.*
of e.liaalnr, u.*
Opgaven
10.5 Verzorg aan de hand van de tabellen die behoren bij de bibliotheek-
database de volgende overzichten:
a. De namen van de lezers die ooit een boek van Wolkers hebben
geleend.
b. Een overzicht van alle gegevens van de lezers die lenen bij lia-
len die in Leiden gelegen zijn.
c. Alle titels van de boeken die in Rotterdamse lialen aanwezig
zijn.
d. Een overzicht van alle boekgegevens van boeken met dezelfde
titel als de door Campert geschreven boeken. (Aanwijzing: we
kunnen een tabel ook met zichzelf combineren.)
10.6 Voer de volgende opdrachten uit aan de hand van de Alco-data-
base.
a. Start Access of S(impel)QL en activeer de database Alco.
Gebruik bij de beantwoording de beschrijving van de database
zoals je deze terug vindt in paragraaf 10.5
b. Aan wie is op 29 juni 2005 een factuur verstuurd? Laat naam,
adres, postcode en plaats afdrukken.
c. Welke whiskys hebben een alcoholpercentage hoger dan 40?
Laat productnaam, soortnummer en naam afdrukken.
d. Aan wie hebben we op 30 juni 2005 n of meer essen
Riesling des Cigognes gefactureerd? Laat het factuurnummer
en afnemernummer afdrukken.
e. Welke wijnen uit het jaar 1996 hebben we in het assortiment?
Laat de naam, inhoud en adviesverkoopprijs afdrukken.
Copyright 2007 Academic Service
10 SQL, Structured Query Language
359
10.9 Wijzigen van de volgorde
Tot nu toe is de volgorde waarin de rijen van de uitvoertabel
werden getoond willekeurig totstandgekomen. Vaak zal de gebrui-
ker behoefte hebben aan een uitvoer die op een bepaalde wijze
gesorteerd is. Daartoe kunnen we het SELECT-commando uit-
breiden met ORDER BY.
SELECT <te tonen kolom> [,<te tonen kolom>]
FROM <tabelnaam> [,<tabelnaam>]
[ WHERE <voorwaarde> ]
[ ORDER BY <te tonen kolom> [ASC/DESC] ] ;
De toevoeging ORDER BY zal de uitvoer laten zien in volgorde
van de waarden, opgeslagen in de opgegeven kolom. Door meer-
dere kolommen op te geven, gescheiden door een komma, wordt
bij gelijke waarde in de eerste kolom verder gesorteerd op basis
van de daarna opgesomde kolom(men). Met de optie ASC wordt
oplopend gesorteerd (standaard), met de optie DESC wordt de
uitvoer in aopende volgorde gesorteerd. Bij sorteren op meerdere
kolommen kunnen we per kolom de optie ASC of DESC opgeven.
Een overzicht van de boeken aanwezig in Leiden. Getoond moeten
worden: ISBN en titel, gesorteerd op titel.
SELECT DISTINCT u.isbn, titel
FROM uitgave u, exemplaar e, liaal f
WHERE u.isbn = e.isbn
AND e.liaalnr = f.liaalnr
AND lplaats = Leiden
ORDER BY titel ;
Opmerkingen
1. Omdat de kolomnamen titel en lplaats uniek zijn voor de
gebruikte tabellen, is het niet noodzakelijk daar een tabelnaam of
alias toe te voegen.
2. De toevoeging ASC mag worden weggelaten, omdat dit de stan-
daardsorteervolgorde is.
3. De toevoeging DISTINCT is gebruikt omdat van een boek meer
dan n exemplaar aanwezig kan zijn. Hiervan hoeft slechts n
keer opgave gedaan te worden.
voorbeeld
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
360
Een overzicht van alle titels en prijzen. In alfabetische volgorde
van titel, bij gelijke titel dalend op prijs.
SELECT titel, prijs
FROM uitgave
ORDER BY titel, prijs DESC
Opgaven
10.7 Verzorg aan de hand van de tabellen die behoren bij de bibliotheek-
database de volgende overzichten:
a. Een lijst met alle gegevens van alle lezers, gesorteerd op naam.
Bij
gelijke naam moet verder worden gesorteerd op woonplaats.
b. Een lijst van de nu uitgeleende boeken (titel en schrijver), gesor-
teerd op exemplaarnummer.
c. Een lijst met daarop alle liaalgegevens, gesorteerd op post-
code.
10.8 Voer de volgende opdrachten uit aan de hand van de Alco-data-
base.
a. Start Access of S(impel)QL en activeer de database Alco.
Gebruik bij de beantwoording de beschrijving van de database
zoals je deze terug vindt in paragraaf 10.5
b. Geef een lijst met alle gegevens van alle klanten, gesorteerd op
naam.
c. Geef een lijst met alle door ons te leveren productnamen, gesor-
teerd op productnaam.
d. Geef een overzicht van alle artikelen op volgorde van aopende
esinhoud. Bij gelijke esinhoud sorteren op oplopend jaartal
en bij gelijk jaartal doorsorteren op aopende adviesverkoop-
prijs.
e. Geef een overzicht van namen van de afnemers voor wie we
op 29 of 30 juni 2005 een factuur hebben aangemaakt. Laat het
factuurnummer, de factuurdatum en de naam van de afnemer
afdrukken, op volgorde van naam.
f. Welke rode wijnen kunnen we leveren? Laat de naam, es-
inhoud en adviesverkoopprijs tonen. De duurste es moet als
eerste worden getoond, de goedkoopste als laatste.
voorbeeld
Copyright 2007 Academic Service
10 SQL, Structured Query Language
361
10.10 Rekenkundige bewerkingen
We kunnen de gegevens uit tabellen op een rekenkundige manier
laten bewerken. Daartoe staan ons in standaard-SQL de volgende
functies ter beschikking:
MIN ( <kolomnaam> ) Bepaalt de kleinste optredende waarde in
de uitvoertabel, voor de opgegeven kolom.
MAX ( <kolomnaam> ) Bepaalt de grootste optredende waarde
in de uitvoertabel, voor de opgegeven kolom.
AVG ( <numerieke kolom> ) Bepaalt de gemiddelde waarde
in de uitvoertabel aan de hand van de getallen in de opgegeven
kolom.
COUNT ( * ) Bepaalt het aantal rijen in de uitvoertabel.
COUNT ( <kolomnaam> ) Bepaalt het aantal rijen met een niet-
lege kolomwaarde in de genoemde kolom van de uitvoertabel.
COUNT ( DISTINCT <kolomnaam> ) Bepaalt het aantal ver-
schillende waarden dat optreedt in de genoemde kolom van de
uitvoertabel. Als we Access hebben ingesteld volgens de standaard
ANSI 89 dan wordt deze functie niet ondersteund. Bij het gebruik
van de standaard ANSI 92 wel. Voor meer toelichting, zie bijlage
B. De op de CD bijgeleverde tool S(imple)QL ondersteunt deze
functie (uiteraard) wel.
SUM ( <numerieke kolom> ) Bepaalt de som van de getallen in
de opgegeven kolom van de uitvoertabel. Ook hier is (ofcieel) de
toevoeging DISTINCT toegestaan en ook dit wordt door Access,
ingesteld op de standaard ANSI 89, niet ondersteund.
Het aantal uitgaven waarbij een schrijver bekend is:
SELECT COUNT (schrijver)
FROM uitgave ;
De prijs van het duurste boek.
SELECT MAX(prijs)
FROM uitgave ;
Het aantal schrijvers waarvan boeken aanwezig zijn:
SELECT COUNT (DISTINCT schrijver)
FROM uitgave ;
voorbeeld
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
362
Deze query werkt wel in standaard SQL, maar helaas niet in
Access, wel in S(imple)QL!
De gemiddelde prijs van de boeken :
SELECT AVG(prijs) of SELECT SUM(prijs)/COUNT(*)
FROM uitgave FROM uitgave ;
In de twee laatstgenoemde querys kunnen we twee verschillende
antwoorden vinden, omdat functies die op velden werken (bijvoor-
beeld AVG en SUM), lege velden (NULL) buiten beschouwing
laten, en COUNT(*) doet dat niet!
Opmerkingen
1. De volgende query zal leiden tot een foutmelding omdat de kolom
plaats meerdere waarden kan opleveren en de functie slechts n.
Het totale aantal lezers uit Dordrecht:
SELECT plaats , COUNT(*)
FROM lezer
WHERE plaats = Dordrecht ;
We kunnen deze query wel anders formuleren:
SELECT MIN(plaats) , COUNT(*)
FROM lezer
WHERE plaats = Dordrecht ;
Uitvoer:
MIN(plaats) COUNT(*)
Dordrecht 1283
Omdat in de uitvoertabel alleen de kolomwaarde Dordrecht voor-
komt, zal als minimumwaarde ook Dordrecht worden gevonden.
2. Omdat door het opgeven van bewerkingen de kop boven een kolom
een vreemd opschrift krijgt, kunnen we expliciet opgeven welke
tekst als koptekst moet worden afgedrukt. Dit is niet beperkt tot
de resultaten van bewerkingen, we mogen dit ook doen bij gewone
kolommen. We geven hiertoe achter de bewerking de toevoeging
AS, gevolgd door het door ons gewenste opschrift.
Copyright 2007 Academic Service
10 SQL, Structured Query Language
363
SELECT MIN(plaats) AS Plaats , COUNT(*) AS Aantal
FROM lezer
WHERE plaats = Dordrecht ;
Uitvoer:
Plaats Aantal
Dordrecht 1283
3. Behalve de eerdergenoemde functies kent Access er nog veel meer,
die hier echter niet besproken worden. We kunnen via de ingebou-
wde hulp meer informatie opvragen.
Opgaven
10.9 Verzorg aan de hand van de tabellen die behoren bij de bibliotheek-
database de volgende overzichten:
a. Het aantal uitgeleende exemplaren van Wolkers.
b. Het aantal exemplaren van het boek Onder professoren van
Hermans dat aanwezig is in de Rotterdamse lialen.
c. De gemiddelde prijs van de uitgeleende boeken.
d. Het aantal uitgaven waarvan geen prijs bekend is.
e. De geboortedatum van de oudste lezer.
f. Het aantal uitleningen gedurende de maand januari 2001.
g. Het aantal uitgaven dat nu uitgeleend is.
10.10 Voer de volgende opdrachten uit aan de hand van de Alco-data-
base.
a. Start Access of S(impel)QL en activeer de database Alco.
Gebruik bij de beantwoording de beschrijving van de database
zoals je deze terug vindt in paragraaf 10.5
b. Hoeveel klanten hebben we?
c. Hoeveel facturen zijn er verstuurd op 29 Juni 2005?
d. Hoeveel essen hebben we op dit moment totaal in voorraad?
e. Wat is de gemiddelde adviesverkoopprijs van wijnen uit het jaar
1999?
f. Wat kost de duurste rode wijn?
g. Van welke whisky hebben we het kleinste aantal essen op
voorraad? Toon het gevonden aantal.
h. Van welke whisky hebben we het grootste aantal liters op voor-
raad? Toon het gevonden aantal.
i. Voor welk bedrag is er op 29 Juni 2005 gefactureerd aan klan-
ten die niet uit Rotterdam komen?
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
364
10.11 Groeperen
Vaak hebben gebruikers de wens gegevens gegroepeerd op een
gemeenschappelijk kenmerk ter beschikking te hebben. Om aan
deze wens te voldoen, is het mogelijk het SELECT-statement uit te
breiden met de toevoeging GROUP BY.
SELECT <te tonen kolom> [,<te tonen kolom>]
FROM <tabelnaam> [,<tabelnaam>]
GROUP BY <kolomnaam> [,<kolomnaam>]
[HAVING <voorwaarde(n)> ] ;
De toevoeging GROUP BY <kolomnaam> zal de rijen groeperen
op basis van de waarden in de genoemde kolom. Per gevonden
groep wordt vervolgens de uitvoer gegenereerd. Er ontstaat daarbij
per gevonden groep slechts n rij, de groepsrij. Als gevolg hiervan
mogen in het SELECT-gedeelte dan ook alleen maar de kolom-
men worden genoemd die ook in de GROUP BY-regel voorkomen.
Andere kolommen zijn niet toegestaan, omdat er in die kolommen
verschillende waarden kunnen voorkomen. Welke van die waarden
zou moeten worden afgedrukt? In het SELECT-gedeelte mogen
wel functies worden gebruikt, omdat een functie altijd precies n
waarde oplevert.
Een overzicht van alle schrijvers waarvan boeken aanwezig zijn:
SELECT schrijver
FROM uitgave
GROUP BY schrijver ;
Alle schrijvers komen slechts n maal in het overzicht voor.
Een alternatieve oplossing:
SELECT DISTINCT schrijver
FROM uitgave ;
De onderstaande query is NIET toegestaan:
SELECT schrijver, titel
FROM uitgave
GROUP BY schrijver ;
voorbeeld
voorbeeld
Copyright 2007 Academic Service
10 SQL, Structured Query Language
365
Na het groeperen op schrijver(naam) kan de naam worden afge-
drukt. De naam heeft immers in de betreffende groep van uit-
gegeven boeken steeds dezelfde waarde. Maar de titel kan niet
worden afgedrukt omdat iedere uitgave in principe een andere titel
heeft. Welke titel zou moeten worden geselecteerd?
Een overzicht van alle schrijvers, tezamen met het aantal door hen
geschreven boeken:
SELECT schrijver, COUNT(*)
FROM uitgave
GROUP BY schrijver ;
Van iedere schrijver worden de naam en het aantal aangetroffen
titels afgedrukt. Bedenk dat we nu wel een kolom kunnen combi-
neren met een functie, omdat beide nu slechts n waarde
opleveren. Als we een functie combineren met een GROUP BY,
dan werkt de functie per groep!
Met de toevoeging HAVING kunnen we bepalen welke groepen in
het overzicht moeten worden opgenomen. Wat WHERE doet met
rijen, doet HAVING met groepen. Bij HAVING is echter het
gebruik van functies toegestaan.
Een overzicht van de schrijvers die meer dan tien titels op hun
naam hebben staan:
SELECT schrijver
FROM uitgave
GROUP BY schrijver
HAVING COUNT(*) > 10 ;
Een overzicht van de uitgebrachte boeken per schrijver per uit-
geverij, tezamen met het aantal uitgebrachte boeken:
SELECT schrijver, uitgeverij, COUNT(*)
FROM uitgave
GROUP BY schrijver, uitgeverij ;
Een GROUP BY mag dus bestaan uit meerdere kolommen. Per
unieke combinatie wordt in dat geval een rij in de uitvoertabel
opgenomen.
voorbeeld
voorbeeld
voorbeeld
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
366
Per schrijver de prijs van het duurste boek dat door hem of haar is
geschreven:
SELECT schrijver, MAX(prijs)
FROM uitgave
GROUP BY schrijver ;
Er gelden enkele specieke eigenschappen bij het gebruik van
GROUP
BY:
1. In het SELECT-gedeelte mogen alleen die kolommen worden
opgesomd die ook voorkomen in het GROUP BY-gedeelte, als-
mede functies. Het is overigens niet verplicht het GROUP BY-
argument op te nemen in de SELECT-regel.
2. Functies werken nu per groep en mogen wel kolommen bevatten
waarop niet wordt gegroepeerd.
3. Per groep wordt slechts n rij in de uitvoertabel opgenomen.
4. We kunnen groeperen aan de hand van meerdere kolommen. Per
unieke combinatie ontstaat een rij.
5. We kunnen met HAVING voorwaarden opleggen aan de groepen.
Alleen groepen die voldoen aan de voorwaarde worden opgeno-
men in de uitvoertabel. We mogen hier alleen de kolommen
gebruiken die ook in het GROUP BY-gedeelte voorkomen, als-
mede functies.
Eerder hebben we gezien dat bij een SELECT-commando ook de
toevoegingen WHERE en ORDER BY kunnen worden gebruikt.
Dat blijft uiteraard zo.
SELECT <te tonen kolom> [,<te tonen kolom>]
FROM <tabelnaam> [,<tabelnaam>]
[ WHERE <voorwaarde(n)> ]
GROUP BY <kolomnaam>
[ HAVING <voorwaarde(n)> ]
[ ORDER BY <te tonen kolom> [ASC/DESC] ] ;
De volgorde waarin de diverse stappen worden doorlopen, is nu als
volgt:
1. Welke tabellen gebruiken? (FROM)
2. Welke rijen selecteren? (WHERE)
voorbeeld
Copyright 2007 Academic Service
10 SQL, Structured Query Language
367
3. Welke groepen maken? (GROUP BY)
4. Welke groepen selecteren? (HAVING)
5. Welke kolommen in de uitvoer? (SELECT)
6. Welke volgorde in de uitvoer? (ORDER BY)
Een overzicht van de lialen met meer dan 1000 leden die voor
1980 geboren zijn. Ook het betreffende aantal moet worden
afgedrukt. Het overzicht moet worden gesorteerd op het aantal
aangetroffen leden.
SELECT liaalnr, COUNT(*)
FROM lezer
WHERE geboortedatum < #1-1-80#
GROUP BY liaalnr
HAVING COUNT(*) > 1000
ORDER BY COUNT(*) ;
Hier wordt allereerst de tabel lezer geselecteerd. Uit deze tabel
worden de leden geselecteerd die voor 1980 geboren zijn. Deze
leden worden vervolgens gegroepeerd op liaalnummer. Per
groep wordt bekeken of er meer dan 1000 rijen aanwezig zijn. Als
dit zo is, wordt het liaalnummer, alsmede het aantal aangetrof-
fen rijen, opgenomen in de uitvoertabel. (Per groep wordt slechts
n maal het liaalnummer afgedrukt, omdat dubbele rijen in de
uitvoertabel automatisch worden geschrapt.) Ten slotte wordt de
uitvoertabel gesorteerd op het aangetroffen aantal, en getoond op
het scherm.
Willen we ook de naam van het liaal tonen, dan moeten we even-
eens de tabel Filiaal gebruiken en deze op basis van het liaal-
nummer koppelen met de tabel Lezer. Vervolgens moeten we ons
realiseren dat we in de SELECT-regel niet zonder meer de kolom
lplaats kunnen opnemen, omdat we deze kolom niet noemen in
het GROUP BY-gedeelte. Bedenk echter dat na het groeperen op
basis van het liaalnummer in iedere afzonderlijke groep steeds
n en dezelfde liaalnaam is opgenomen. Door hiervan alfa-
betisch gezien de kleinste te tonen, met behulp van de functie
MIN, krijgen we precies wat we wensen, namelijk de naam van
het liaal. De query ziet er dan als volgt uit:
voorbeeld
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
368
SELECT f.liaalnr, COUNT(*), MIN(lnaam)
FROM lezer l, liaal f
WHERE l.liaalnr = f.liaalnr
AND geboortedatum < #1-1-80#
GROUP BY f.liaalnr
HAVING COUNT(*) > 1000
ORDER BY COUNT(*) ;
Een alternatieve oplossing is gebaseerd op de gedachte dat na
het groeperen op basis van liaalnummer in iedere groep (per
gevonden liaal) steeds dezelfde plaatsnaam vermeld staat. Door
niet alleen te groeperen op liaalnummer, maar daarnaast op
liaalplaats, vergroot je het aantal groepen dus niet! Maar omdat je
nu ook op plaats groepeert, kun je dit gegeven wel opnemen in de
SELECT-regel. Je krijgt dan:
SELECT f .liaalnr, COUNT(*), lnaam
FROM lezer l, liaal f
WHERE l.liaalnr = f.liaalnr
AND geboortedatum < #1-1-80#
GROUP BY f.liaalnr, lnaam
HAVING COUNT(*) > 1000
ORDER BY COUNT(*) ;
Als algemene regel zouden we kunnen aanhouden: wat in SELECT
staat (behalve functies) staat ook bij de GROUP BY.
Een overzicht met daarop het lezernummer, de lezernaam en het
aantal door de lezer geleende boeken:
SELECT l.lezernr, naam, count(*)
FROM lezer l, uitlening u
WHERE l.lezernr = u.lezernr
GROUP BY l.lezernr, naam;
Idem, maar nu alleen voor de lezers uit Rotterdam:
SELECT l.lezernr, naam, count(*)
FROM lezer l, uitlening u
WHERE l.lezernr = u.lezernr
AND plaats = Rotterdam
GROUP BY l.lezernr, naam;
voorbeeld
voorbeeld
Copyright 2007 Academic Service
10 SQL, Structured Query Language
369
Idem maar nu alleen voor de lezers uit Rotterdam die minder dan
100 boeken hebben geleend:
SELECT l.lezernr, naam, count(*)
FROM lezer l, uitlening u
WHERE l.lezernr = u.lezernr
AND plaats = Rotterdam
GROUP BY l.lezernr, naam
HAVING count(*) < 100 ;
Opgaven
10.11 Verzorg aan de hand van de tabellen, behorend bij de bibliotheek-
database de volgende overzichten:
a. Het aantal boeken per schrijver dat nu is uitgeleend.
b. Het aantal leden per woonplaats, gesorteerd per woonplaats;
in het overzicht dienen alleen de plaatsen met meer dan
1000 leden te worden opgenomen.
c. Per liaal het gemiddelde aantal in 2001 per lezer uitgeleende
boeken; het overzicht moet in volgorde van oplopend aantal
worden getoond.
d. Per uitgeverij het totaal aantal aanwezige boeken waarvan de
aanschafprijs meer dan 25, bedraagt.
e. Per uitgeverij het aantal uitgegeven boeken, geschreven door
Wolkers.
f. Geef per exemplaar het aantal uitleningen in 2005 (huurdatum).
Toon exemplaarnummer, ISBN, titel en aantal uitleningen.
10.12 Voer de volgende opdrachten uit aan de hand van de Alco-data-
base.
a. Start Access of S(impel)QL en activeer de database Alco.
Gebruik bij de beantwoording de beschrijving van de database
zoals je deze terug vindt in paragraaf 10.5
b. Geef per plaats het aantal afnemers. Laat plaatsnaam en aantal
afdrukken op volgorde van oplopend aantal. Bij gelijk aantal
doorsorteren op plaatsnaam.
c. Geef per productgroep het aantal artikelen en de gemiddelde,
hoogste en laagste adviesverkoopprijs. Laat naast de berekende
waarden ook de productnaam afdrukken.
d. Geef per factuur het totale factuurbedrag, het factuurnummer
en de naam van de afnemer.
voorbeeld
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
370
Databaseontwikkeling 4 Access 2003
370
e. Geef per soort rode wijn het totale aantal essen en het totale
aantal liters dat we op voorraad hebben. Laat ook de naam
afdrukken. Het overzicht moet op volgorde van naam worden
gepresenteerd.
f. Van welke producten hebben we meer dan 100 liter in voor-
raad? Laat de productnaam afdrukken.
g. Van welke soort hebben we in Juni 2005 meer dan 10 essen
verkocht? Laat de naam en het aantal essen afdrukken, op
volgorde van dalend aantal essen.
10.12 Subquerys
Soms willen we een SQL-opdracht opgeven waarbij we met een
tussenresultaat willen of moeten werken. Bijvoorbeeld bij de
vraagstelling: Welke boeken zijn duurder dan de gemiddelde boe-
kenprijs? Om die vraag te kunnen beantwoorden zullen we eerst
de gemiddelde boekenprijs moeten bepalen. De onderstaande
query levert die waarde op.
SELECT AVG(prijs)
FROM uitgave ;
Stel dat hier een bedrag van 27,50 wordt gevonden. Dan kunnen
we nu met de volgende query de vraag beantwoorden.
SELECT *
FROM uitgave
WHERE prijs > 27.5 ;
We hebben nu echter twee querys ingevoerd en afzonderlijk
van elkaar laten uitvoeren. Dit kan ook met n query waarbij
we de twee eerder opgestelde querys in elkaar schuiven door te
bedenken dat de door ons opgegeven waarde in de laatste query
de uitvoer van de eerste query is. We plaatsen de query die de
gemiddelde prijs opleverde op de plaats waar we zojuist de
gevonden waarde noteerden en omgeven deze met ronde haken.
We krijgen dan:
Copyright 2007 Academic Service
10 SQL, Structured Query Language
371
SELECT *
FROM uitgave
WHERE prijs > ( SELECT AVG(prijs)
FROM uitgave ) ;
We hebben nu gebruik gemaakt van een subquery. Deze subquery,
omsloten door ronde haken, wordt als eerste uitgevoerd en als het
ware vervangen door de gegenereerde uitvoer, de gemiddelde prijs.
Hierna wordt dan de hoofdquery uitgevoerd en worden de boeken
bepaald die duurder zijn dan de gemiddelde prijs.
We kunnen gebruik maken van meer dan n subquery tegelijker-
tijd. Bijvoorbeeld bij het oplossen van de vraag: van welk boek ligt
de prijs het dichtst onder de gemiddelde prijs?
We beginnen weer met het bepalen van de gemiddelde boekprijs.
SELECT AVG(prijs)
FROM uitgave ;
Vervolgens gaan we alle prijzen achterhalen die onder deze gemid-
delde waarde liggen.
SELECT prijs
FROM uitgave
WHERE prijs < ( SELECT AVG(prijs)
FROM uitgave ) ;
Van al deze prijzen zijn we eigenlijk alleen maar genteresseerd in
de grootste waarde omdat die het dichtst onder de gemiddelde aan-
koopprijs ligt. We krijgen dan:
SELECT MAX (prijs)
FROM uitgave
WHERE prijs < ( SELECT AVG(prijs)
FROM uitgave ) ;
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
372
Tenslotte willen we nu nog weten voor welk boek (of boeken) deze
prijs geldt.
SELECT *
FROM uitgave
WHERE prijs = ( SELECT MAX(prijs)
FROM uitgave
WHERE prijs <( SELECT AVG(prijs)
FROM uitgave ) );
We hebben nu gebruik gemaakt van twee (geneste) subquerys die
beide zijn omgeven door ronde haken. Bedenk daarbij dat de laat-
ste subquery deel uit maakt van de middelste subquery en dat dus
de afsluitende ronde haak hiervan achter de laatste subquery moet
worden geplaatst.
Als laatste inleidende voorbeeld zullen we de vraag beantwoorden:
welke boeken (uitgaven) zijn in 2004 niet uitgeleend?
Om deze vraag te kunnen beantwoorden moeten we bedenken dat
een bibliotheek wel bijhoudt welke boeken er worden uitgeleend
maar niet welke boeken NIET worden uitgeleend. We moeten
daarom de vraag voor ons zelf iets andere formuleren: zoek uit
welke boeken er in 2004 wel zijn uitgeleend en bepaal vervolgens
welke boeken daar niet bij zitten. Om te bepalen welke boeken er
in 2004 zijn uitgeleend kunnen we gebruik maken van de onder-
staande query.
SELECT uitgave.*
FROM uitgave, exemplaar, uitlening
WHERE uitgave.isbn = exemplaar.isbn
AND exemplaar.exemplaarnr =
uitlening.exemplaarnummer
AND huurdatumBETWEEN #1-1-2004#
AND #31-12-2004# ;
Deze query levert van de WEL uitgeleende boeken alle gegevens.
Nu hoeven we niet alle gegevens te zien, alleen maar dat wat de
boeken uniek identiceert, het ISBN dus. We krijgen dan:
Copyright 2007 Academic Service
10 SQL, Structured Query Language
373
SELECT uitgave.isbn
FROM uitgave, exemplaar, uitlening
WHERE uitgave.isbn = exemplaar.isbn
AND exemplaar.exemplaarnr =
uitlening.exemplaarnummer
AND huurdatumBETWEEN #1-1-2004#
AND #31-12-2004# ;
Als uitvoer krijgen we nu een lijst met alle nummers van de wel
in 2004 uitgeleende boeken. Nu kunnen we op zoek gaan naar de
boeken waarvan het nummer NIET in deze lijst voorkomt. Die
boeken zijn dan immers niet in 2004 uitgeleend. We krijgen:
SELECT *
FROM uitgave
WHERE isbn niet in de eerder gevonden lijst.
Voor de eerder gevonden lijst kunnen we nu de eerder opgestelde
query gebruiken en deze als subquery opnemen. We krijgen:
SELECT *
FROM uitgave
WHERE isbn NOT IN
( SELECT uitgave.isbn
FROM uitgave, exemplaar, uitlening
WHERE uitgave.isbn = exemplaar.isbn
AND exemplaar.exemplaarnr =
uitlening.exemplaarnummer
AND huurdatum BETWEEN #1-1-2004#
AND #31-12-2004#) ;
Het gebruik van subquerys is aan te raden voor het beantwoorden
van vragen waarvoor de oplossing zich niet zo eenvoudig laat
beschrijven. Door het probleem, en dus ook de oplossing, op te
splitsen in deelproblemen en deeloplossingen, is het vaak eenvou-
diger om tot een correcte oplossing te komen.
Bij subquerys kunnen we onder andere de volgende twee hoofd-
constructies tegenkomen. Met deze constructies kunnen vrijwel
alle overzichten worden gegenereerd.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
374
1. Een kolomwaarde vergelijken met n waarde
Geef de namen van de lezers die op dezelfde datum geboren zijn
als lezernr 4773.
SELECT lezernr, naam
FROM lezer
WHERE geboortedatum= (SELECT geboortedatum
FROM lezer
WHERE lezernr = 4773 ) ;
De subquery levert de geboortedatum van lezer 4773 (n waarde)
op. In de hoofdquery wordt van iedere lezer de geboortedatum
daarmee vergeleken. In plaats van het teken = mogen we ook alle
andere ongelijkheid-operatoren gebruiken.
2. Een kolomwaarde vergelijken met een waardenverzameling
(IN/ALL)
Geef de exemplaarnummers van de boeken geschreven door
Wolkers, gesorteerd op nummer.
SELECT exemplaarnr
FROM exemplaar
WHERE isbn IN (SELECT isbn
FROM uitgave
WHERE schrijver = Wolkers )
ORDER BY exemplaarnr ;
Allereerst worden alle isbns gegenereerd die te maken hebben
met een boek van Wolkers. Vervolgens wordt van ieder exemplaar
bekeken of het bijbehorende isbn voorkomt in de zojuist gevonden
verzameling.
Geef de titel(s) van het duurste boek(en):
SELECT titel
FROM uitgave
WHERE prijs >= ALL (SELECT prijs
FROM uitgave );
Allereerst wordt een tussentabel gegenereerd met alle prijzen.
Vervolgens wordt bij ieder boek nagegaan of de prijs van dat
Copyright 2007 Academic Service
10 SQL, Structured Query Language
375
betreffende boek groter dan of gelijk is aan alle waarden (ALL) die
in de zojuist gegenereerde verzameling voorkomen. En alleen voor
de grootste waarde geldt dat. Een alternatieve oplossing hier zou
zijn:
SELECT titel
FROM uitgave
WHERE prijs = (SELECT MAX(prijs)
FROM uitgave ) ;
Daarbij wordt eerst in de subquery de hoogste prijs bepaald.
Daarna wordt in de hoofdquery bekeken voor welke uitgave(n) die
hoogste prijs geldt.
Geef alle titels van boeken van Wolkers die ook door andere schrij-
vers zijn gebruikt:
SELECT titel
FROM uitgave
WHERE schrijver = Wolkers
AND titel = IN (SELECT titel
FROM uitgave
WHERE schrijver <> Wolkers ) ;
Ook hier wordt eerst weer een tussentabel gegenereerd, die nu
alle titels bevat van boeken geschreven door andere schrijvers.
Vervolgens worden alle titels van de boeken van Wolkers met deze
verzameling vergeleken; titels die daarin voorkomen, worden afge-
drukt.
Opmerkingen met betrekking tot subquerys
1. In een subquery mag in het SELECT-gedeelte slechts n kolom
(zonder DISTINCT) of functie gebruikt worden (standaard SQL).
2. Een subquery mag alleen voorkomen als rechterlid van een voor-
waarde.
3. Een subquery moet een waarde of een waardenverzameling ople-
veren die overeenstemt met het linkergedeelte van de voorwaarde.
4. Een subquery mag alleen voorkomen in een voorwaarde bij
WHERE of bij HAVING (of AND/OR).
5. De subquery moet tussen ronde haken worden geplaatst.
6. Na een subquery kan de gewone query worden voortgezet.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
376
SELECT ......
FROM ......
WHERE ......
AND ... IN (SELECT ......
FROM ......
WHERE ......
AND ...... )
GROUP BY .......
ORDER BY ....... ;
1. Geef de naam van de schrijver met het grootste aantal titels op
zijn naam. Allereerst zullen we dan per schrijver het aantal titels
moeten bepalen. Hierbij moeten we de tabel Uitgave gebruiken en
hier per schrijver tellen, dus gebruikmaken van GROUP BY.
SELECT COUNT(*)
FROM uitgave
GROUP BY schrijver
Vervolgens gaan we dit nogmaals doen en zullen we de naam
afdrukken van de schrijver waarvoor geldt dat het getelde aantal
groter dan of gelijk is aan alle zojuist gevonden waarden. Denk
eraan dat we groter of gelijk moeten nemen, omdat de subquery
ook het aantal van de schrijver met het grootste aantal vindt!
SELECT schrijver
FROM uitgave
GROUP BY schrijver
HAVING COUNT(*) >= ALL (SELECT COUNT(*)
FROM uitgave
GROUP BY schrijver ) ;
2. Wie is de oudste lezer?
Eerst bepalen we van alle geboortedatums de kleinste waarde (dat
wil zeggen het langst geleden, dus het oudst). Vervolgens lopen we
alle lezers langs om te kijken of hun geboortedatum gelijk is aan
de gevonden kleinste waarde. Van die lezer(s) drukken we de
gegevens af.
voorbeelden
Copyright 2007 Academic Service
10 SQL, Structured Query Language
377
SELECT *
FROM lezer
WHERE geboortedatum = (SELECT MIN ( geboortedatum )
FROM lezer ) ;
3. Welke schrijver heeft het grootste aantal titels op zijn naam?
Eerst in de subquery per schrijver (GROUP BY) het aantal titels
bepalen. We selecteren alleen de gevonden aantallen. Vervolgens
in de hoofdquery nog een keer per schrijver tellen en het gevonden
aantal vergelijken met de zojuist gevonden waarden. Is het aantal
uit de hoofdquery groter dan of gelijk aan alle gevonden waarden,
dan hebben we de grootste. Van deze schrijver selecteren we de
naam.
SELECT schrijver
FROM uitgave
GROUP BY schrijver
HAVING COUNT(*) >= ALL ( SELECT COUNT(*)
FROM schrijver
GROUP BY schrijver ;
4. Welke lezers hebben geen boeken gereserveerd?
Een bibliotheek houdt wel bij welke lezer welke boeken leent
en reserveert, maar natuurlijk niet welke lezers niet lenen of
reserveren. Daarom moeten we het probleem via een omweg bena-
deren. Omdat de bibliotheek wel bijhoudt wie er wel een boek
heeft gereserveerd, zullen we de nummers van die lezers bepalen.
Vervolgens onderzoeken we bij iedere lezer of zijn/haar nummer
voorkomt in de zojuist gevonden verzameling. We krijgen dan:
SELECT lezernr, naam
FROM lezer
WHERE lezernr NOT IN ( SELECT lezernr
FROM reservering ) ;
5. Dezelfde vraag als hiervoor, maar nu alleen van de lezers uit
Rotterdam. Bovendien moet de geproduceerde uitvoer op volgorde
van naam worden gepresenteerd.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
378
SELECT lezernr, naam
FROM lezer
WHERE lezernr NOT IN ( SELECT lezernr
FROM reservering )
AND Plaats = Rotterdam
ORDER BY naam ;
6. Welke lezers hebben boeken geleend die ook door andere lezers
uit dezelfde woonplaats zijn geleend? We zullen in dit geval eerst
uitzoeken welke boeken ook werkelijk door lezers zijn geleend. We
stellen dan de volgende query op:

SELECT isbn
FROM lezer l, uitlening ul, exemplaar e
WHERE l.lezernr = ul.lezernr
AND ul.exemplaarnr = e.exemplaarnr
Nu worden alle geleende boeken getoond. Wij willen echter
alleen de boeken die geleend zijn door lezers uit dezelfde woon-
plaats als een andere lezer. Stel dat de betroffen lezer woont in
Emmen. We zouden dan de query moeten uitbreiden met AND
plaats = Emmen en krijgen dan:

SELECT isbn
FROM lezer l, uitlening ul, exemplaar e
WHERE l.lezernr = ul.lezernr
AND ul.exemplaarnr = e.exemplaarnr
AND plaats = Emmen
Nu kunnen we de query opstellen die de lezers toont die ook zon
boek hebben geleend. We krijgen dan:

SELECT l.lezernr, naam
FROM lezer l, uitlening ul, exemplaar e
WHERE l.lezernr = ul.lezernr
AND ul.exemplaarnr = e.exemplaarnr
AND isbn IN (SELECT isbn
FROM lezer l, uitlening ul, exemplaar e
WHERE l.lezernr = ul.lezernr
AND ul.exemplaarnr = e.exemplaarnr
AND plaats = Emmen )

Copyright 2007 Academic Service
10 SQL, Structured Query Language
379
Er wordt nu steeds gekeken of de lezer uit Emmen komt, wat uiter-
aard niet juist is. In de subquery moeten we kijken of de woon-
plaats van de lezer uit de subquery gelijk is aan de woonplaats
van de lezer uit de hoofdquery. Daartoe geven we de lezertabellen
uit beide deelquerys respectievelijk alias l1 en l2 en verbinden
vervolgens de woonplaatsen met elkaar via de voorwaarde: AND
l1.plaats = l2.plaats. We krijgen nu uiteindelijk:

SELECT l1.lezernr, naam
FROM lezer l1, uitlening ul, exemplaar e
WHERE l1.lezernr = ul.lezernr
AND ul.exemplaarnr = e.exemplaarnr
AND isbn IN ( SELECT isbn
FROM lezer l2, uitlening ul,
exemplaar e
WHERE l2.lezernr = ul.lezernr
AND ul.exemplaarnr =
e.exemplaarnr
AND l1.plaats = l2.plaats ) ;

We noemen de bovenstaande query gecorreleerd, omdat in de
subquery gegevens gebruikt worden uit de hoofdquery. SQL zal nu
eerst in de hoofdquery een lezer selecteren en voor deze lezer de
subquery gaan uitvoeren. Pas daarna wordt de tweede lezer in de
hoofdquery geselecteerd. De subquery wordt nu niet, zoals gebrui-
kelijk, slechts n keer doorlopen, maar vele malen, namelijk voor
iedere rij uit de hoofdquery. De uitvoering van een gecorreleerde
query kan dus wel enige tijd in beslag nemen!
Opgaven
10.13 Verzorg aan de hand van de tabellen die behoren bij de bibliotheek-
database de volgende overzichten:
a. Een overzicht van de lezers die een boek gelezen hebben dat
nog niet door andere lezers uit hetzelfde liaal gelezen is.
b. Van welke schrijvers er geen boeken gereserveerd zijn.
c. Welke uitgeverij het grootste aantal titels heeft uitgebracht.
d. Welke schrijvers slechts voor n uitgeverij hebben geschreven.
e. Welke exemplaren nog nooit zijn uitgeleend.
f. Welke titel het meest is uitgeleend.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
380
Databaseontwikkeling 4 Access 2003
380
g. Het boek met de hoogste aanschafprijs.
h. Het aantal lezers dat in januari 2001 geen boeken heeft geleend.
i. Het boek waarvoor de meeste reserveringen bestaan.
10.14 Voer de volgende opdrachten uit aan de hand van de Alco-data-
base.
a. Start Access of S(impel)QL en activeer de database Alco.
Gebruik bij de beantwoording de beschrijving van de database
zoals je deze terug vindt in paragraaf 10.5
b. Geef een overzicht van de artikelen waarvan het aantal essen
dat op voorraad is boven de gemiddelde voorraad ligt.
c. Wat is de prijs van de duurste es wijn? Laat ook de naam
afdrukken.
d. Wie heeft er in Juni 2005 geen factuur gekregen?
e. Welke artikelen zijn in Juni 2005 niet verkocht?
f. Wie heeft de factuur met het hoogste factuurbedrag ontvangen?
g. Welke Rotterdamse afnemer heeft het grootste aantal facturen
ontvangen?
h. Welke artikelen vallen er in dezelfde productgroep als het arti-
kel met de grootste adviesverkoopprijs?
i. Wie heeft er een wijn uit 1995 besteld die ook door iemand uit
een andere woonplaats is besteld?
j. Welke artikelen zijn duurder dan de gemiddelde artikelprijs in
hun productgroep?
10.13 Speciale joins en views
Normaal gesproken zullen bij het combineren van tabellen alleen
rijen uit de ene tabel worden gecombineerd met rijen uit de andere
tabel als de verbindende waarde in beide rijen wordt aangetroffen
en gelijk is.
De query:

SELECT titel, u.isbn, exemplaarnr, liaalnr
FROM uitgave u, exemplaar e
WHERE u.isbn = e.isbn

zal alleen de titels van de uitgaven tonen waarvan het isbn ook
in de tabel Exemplaar voorkomt. Een uitgave waarvan nog geen
Copyright 2007 Academic Service
10 SQL, Structured Query Language
381
exemplaar in de bibliotheek aanwezig is waarvan het isbn dus
niet in de tabel Exemplaar voorkomt wordt niet getoond; ook niet
alleen de titel, zonder exemplaarnummer en liaalnummer.
Willen we deze uitgaven toch zien, dan moeten we niet de hiervoor
genoemde combinatie gebruiken, de zogenaamde inner join, maar
een outer join. Een outer join kent twee varianten, de left join en de
right join.
Als we een left join gebruiken, worden alle rijen uit de tabel die
aan de linkerkant van de toevoeging left join staat, getoond in de
uitvoer ongeacht het feit of er in de tabel rechts van de toevoe-
ging left join een bijbehorende rij is gevonden.
Om in dit voorbeeld ook de titels te krijgen van boeken die nog
niet in de bibliotheek aanwezig zijn, wijzigen we de query in:
SELECT titel, u.isbn, e.exemplaarnr, liaalnr
FROM uitgave u LEFT JOIN exemplaar e
ON u.isbn = e.isbn
Normaal gesproken koppelen we met de regel WHERE. Deze is
nu vervangen door de regel ON om duidelijk te maken dat op die
voorwaarde gecombineerd moet worden. Van alle uitgaven worden
de titel en het ISBN getoond; alleen van uitgaven waarvan exem-
plaren aanwezig zijn in de bibliotheek worden ook het bijbehoren-
de exemplaarnummer en liaalnummer getoond.
De right join werkt op soortgelijke wijze. Nu worden alle rijen uit
de tabel rechts van de toevoeging right join getoond, ongeacht het
feit of er overeenkomstige rijen in de tabel links van de toevoeging
right join worden gevonden. Door de tabellen onderling te verwis-
selen krijgen we feitelijk weer de eerder besproken left join!
Als tweede voorbeeld formuleren we de query waarmee we kun-
nen nagaan welke lezers op dit moment welke boeken hebben
geleend. Heeft een lezer op dit moment geen boeken geleend, dan
moeten wel zijn/haar nummer en naam worden getoond.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
382
SELECT l.lezernr, naam, exemplaarnr, huurdatum
FROM lezer l LEFT JOIN uitlening u
ON l.lezernr=u.lezernr
WHERE retourdatum IS NULL ;

De voorwaarde waarop de combinatie (join) is gebaseerd, wordt
voorafgegaan door ON. De bijkomende voorwaarde volgt op
gebruikelijke wijze achter WHERE.
Views
Bij het werken met gegevensbestanden wordt er vaak gewerkt met
views. Een view is een bepaalde blik op een database waarbij over
het algemeen slechts een selectie van de gegevens wordt getoond.
Op de verkoopafdeling van een groothandel ziet men bijvoorbeeld
van een klant wel het aeveradres maar niet het factuuradres. Een
medewerker van de nancile afdeling ziet juist wel het factuur-
adres en waarschijnlijk niet het aeveradres. Een verkoper ziet
alleen maar de klanten die tot zijn rayon behoren, terwijl zijn afde-
lingschef alle klanten te zien krijgt. Binnen Access kunnen views
heel eenvoudig als query gedenieerd worden. Vervolgens worden
niet meer de afzonderlijke tabellen benaderd, maar alleen de
betreffende query. Zo kunnen we een query opstellen die alleen
maar de klanten uit Rotterdam laat zien. Deze query kunnen we
vervolgens opslaan onder de naam RotterdamseKlanten. De
betreffende verkoper opent in het vervolg deze query in plaats
van de originele tabel(len).
Binnen SQL worden views gedenieerd met het commando
CREATE VIEW. Bij het bovenstaande voorbeeld krijgen we:
CREATE VIEWRotterdamseKlanten AS ( SELECT *
FROM Afnemer
WHERE Plaats = Rotterdam ) ;
Hierna kan de verkoper werken met:
SELECT * FROM RotterdamseKlanten ;
Het bovenstaande CREATE VIEW commando wordt (helaas) door
Access niet ondersteund, daar moet je gebruik maken van querys
die immers hetzelfde bewerkstelligen. De tool S(imple)QL, mee-
geleverd op de bij het boek behorende CD, ondersteunt views wel
volledig.
Copyright 2007 Academic Service
10 SQL, Structured Query Language
383
Een view is dynamisch. Hiermee bedoelen we dat het niet zo is
dat tijdens het deniren van de view eenmalig de SELECT wordt
uitgevoerd en dat de dan gegenereerde uitvoer voortaan gebruikt
wordt als de view wordt aangeroepen. De view zou dan juist sta-
tisch zijn. Met dynamisch bedoelen we dat op het moment dat de
view wordt gebruikt, volgens de denitie die er aan te grondslag
ligt, de query wordt uitgevoerd. De gegevens zijn dus altijd actueel.
Een view behoeven we niet echt aan te maken (CREATE). We
kunnen een view ook direct gebruiken in een SQL-opdracht, ook
binnen Access!
In paragraaf 10.10 hebben we gezien dat standaard Access geen
COUNT ( DISTINCT .. ) kent. Door gebruik te maken van het
view-mechanisme kunnen we hier een alternatieve oplossing voor
opstellen. De vraag luidt: van hoeveel schrijvers hebben we een
boek in huis? Een correcte oplossing die Access echter niet onder-
steunt:
SELECT COUNT (DISTINCT schrijver)
FROM uitgave, exemplaar
WHERE uitgave.isbn = exemplaar.isbn ;
Een alternatieve oplossing met behulp van een view:
SELECT COUNT (*)
FROM (SELECT DISTINCT (schrijver)
FROM uitgave, exemplaar
WHERE uitgave.isbn = exemplaar.isbn );
Een ander voorbeeld.
Hoeveel lezers hebben in 2004 een boek van J.K. Rowlings
geleend? Geef ook het totale aantal uitleendagen.
Als een lezer meerdere keren een boek van Rowlings heeft geleend
mag hij toch maar n keer meetellen. We zullen dus ook nu weer
gebruik moeten maken van COUNT DISTINCT.
Een juiste oplossing binnen standaard SQL:
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
384
SELECT COUNT(DISTINCT lezernr),
SUM(Retourdatum Huurdatum + 1)
FROM uitgave, exemplaar, uitlening
WHERE uitgave.isbn = exemplaar.isbn
AND exemplaar.exemplaarnr = uitlening.exemplaarnr
AND YEAR(huurdatum) = 2004
AND schrijver = J.K. Rowlings ;
Met behulp van een view:
SELECT COUNT(*), SUM(aantalperklant)
FROM (SELECT lezernr, SUM(eind begin + 1)
AS aantalperklant
FROM uitgave, exemplaar, uitlening
WHERE uitgave.isbn = exemplaar.isbn
AND exemplaar.exemplaarnr =
uitlening.exemplaarnr
AND YEAR(huurdatum) = 2004
AND schrijver = J.K. Rowlings
GROUP BY lezernr );
10.14 SQL, meer mogelijkheden
Naast het SELECT-statement kent SQL uiteraard veel meer
mogelijkheden. Deze vallen echter buiten het bestek van dit boek,
mede omdat men binnen Access dezelfde functionaliteit via andere
methodieken heeft gemplementeerd. Denk daarbij bijvoorbeeld
aan het deniren van een tabel. Toch vinden wij het op zijn plaats
om een aantal belangrijke SQL- en Access-mogelijkheden kort toe
te lichten.
Toevoegen van gegevens
INSERT INTO uitgave (isbn,titel,schrijver,uitgeverij,prijs)
VALUES (9062335306,Korte gras,Hennekorf,
Korte Pen, 45.90);
Hierbij wordt eerst gezegd dat de actie bestaat uit het toevoe-
gen van rijen aan de genoemde tabel ( INSERT INTO uitgave).
Vervolgens wordt vermeld in welke kolommen een waarde moet
worden geplaatst. Het is namelijk niet noodzakelijk om direct alle
Copyright 2007 Academic Service
10 SQL, Structured Query Language
385
velden een waarde te geven. Ten slotte worden de in te voegen
waarden opgenomen (VALUES). Hierbij wordt de eerstgenoemde
waarde in het eerstgenoemde veld geplaatst. De tweede waarde in
het veld dat als tweede is genoemd, enzovoort.
Deze manier van invoegen kun je goed gebruiken om via een web-
pagina ingevoerde gegevens toe te voegen aan een tabel. Daarbij
moet je dan wel een script/programmeertaal gebruiken die spe-
ciaal voor webtoepassingen is ontwikkeld.
Wijzigen van gegevens
UPDATE lezer
SET naam = Jansen , adres = Kerkstraat 23 ,
plaats = Delft
WHERE lezernr = 4773;
Allereerst wordt de tabel genoemd waarin de wijziging moet wor-
den doorgevoerd (UPDATE). Vervolgens wordt vermeld in welk
veld de waarde moet worden aangepast. Ten slotte staat vermeld
onder welke voorwaarde dit moet gebeuren. Zonder voorwaarde
wordt de wijziging namelijk in alle records doorgevoerd!
Verwijderen van gegevens
DELETE FROM reservering
WHERE lezernr = 4773;
Hier wordt eerst de tabel genoemd waaruit moet worden ver-
wijderd (DELETE FROM). Vervolgens worden de voorwaarden
opgesomd waaronder de verwijdering moet plaatsvinden.
Samenvoegen van uitvoertabellen
Dit kan alleen via SQL gerealiseerd worden, niet via de standaard-
opvraagfaciliteiten van Access!
SELECT lezernr
FROM lezer
WHERE liaalnr = 14
UNION
SELECT lezernr
FROM uitlening
WHERE huurdatum = 2-15-97;
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
386
Dubbele records in de uitvoer worden automatisch onderdrukt.
Willen we deze wel zien, dan moeten we verbinden via UNION
ALL.
In ieder van de afzonderlijke deelquerys mogen andere kolommen
worden geselecteerd. Zo kun je de lezernummers uit de tabel lezer
zonder probleem combineren met de huurdatums uit de tabel uit-
lening. In feite worden er dan gewoon twee afzonderlijke querys
uitgevoerd waarvan de uitvoer aan elkaar geplakt wordt.
Een zinvolle toepassing van een UNION zou kunnen liggen in
het afdrukken van een lijst met personen die moeten worden uit-
genodigd voor een schoolrenie. Daarbij moeten de gegevens uit
de tabel STUDENT worden gecombineerd met de gegevens uit de
tabel DOCENT. Om te voorkomen dat iemand twee brieven krijgt
(een student die later docent is geworden) maken we gebruik van
UNION ALL.
SELECT naam, adres, postcode, woonplaats
FROM student
UNION ALL
SELECT naam, adres, postcode, plaats
FROM docent ;
Copyright 2007 Academic Service
A Veldeigenschappen
Tijdens het ontwerpen van een tabel kunnen we niet alleen
opgeven welke velden we in de tabel wensen op te nemen, we
kunnen ook de eigenschappen van het veld instellen. Er bestaan in
totaal dertien verschillende eigenschappen. Deze kunnen we echter
niet altijd instellen omdat ze niet altijd relevant zijn. Afhankelijk
van het soort veld kunnen we een eigenschap wel of niet instel-
len. We kunnen dit ook achteraf doen door de bestaande tabel te
openen in de Ontwerpweergave.
In deze bijlage komen alle eigenschappen kort aan bod.
Figuur A.1
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
388
Veldlengte
Hiermee stellen we de Veldlengte in bij velden van het type Tekst,
Numeriek en Autonummering. De lengte voor een tekst-veld staat
standaard ingesteld op 50, maar deze kan variren tussen 0 en 255.
Het is zaak de lengte zo in te stellen dat het veld niet te veel ruimte
in beslag neemt. Gelet op de ruimte stellen we deze waarde zo laag
mogelijk in. Zorg er wel voor dat alle gegevens, ook de gegevens
die we in de toekomst nog zullen invoeren, in het veld passen.
Bij een veld van het type numeriek wordt de veldlengte opgegeven
door in te stellen welk soort getal we willen kunnen verwerken.
Hier kunnen we kiezen uit:
byte alleen gehele getallen van 0 tot en met 255;
integer alleen gehele getallen, tussen 32768 en +32767;
lange integer alleen gehele getallen tussen 2.147.483.648 en
2.147.483.647;
enkele precisie getal met maximaal 7 decimalen, tussen
3,410
38
en
+3,410
38
;
dubbele precisie getal met maximaal 15 decimalen, tussen
1,79710
308
en +1,79710
308
;
decimaal getal met maximaal 28 decimalen, tussen 10
28
en
+10
28
. In het veld Precisie kunnen we het totale aantal bij te houden
cijfers opgeven. In het veld Schaal geven we op hoeveel cijfers we
achter de komma willen kunnen plaatsen;
replicatie id een getal bedoeld voor het uniek identiceren van
objecten; wordt hier verder buiten beschouwing gelaten.
Hierbij geldt dat naar beneden toe de benodigde geheugenruimte
toe- en de verwerkingssnelheid afneemt. Het is dus zaak het type
zo te kiezen dat zo min mogelijk geheugenruime wordt gebruikt
maar wel alle gewenste waarden kunnen worden opgenomen. Bij
een veld van het type Autonummering kunnen we voor de veld-
lengte alleen kiezen uit lange integer en replicatie id. Hoewel
Access hier zelf de nummering bijhoudt, kunnen we wel benvloe-
den wat het eerstvolgende nummer moet worden.
Stel we willen in de database Reisbureau in de tabel Klant de
eerstvolgende waarde van het klantnummer op 4000 zetten:
Copyright 2007 Academic Service
A Veldeigenschappen
389
Open dan eerst de tabel Klant en zorg ervoor dat klantnummer niet
langer een sleutelveld is.
Creer een nieuwe tabel en neem in deze tabel n veld op, met
eveneens de naam klantnummer, maar nu van het type numeriek,
lange integer.
Voer in deze tabel vervolgens n record in en geef daarbij aan
klantnummer de waarde 3999, dus n minder dan de waarde
waarmee we straks willen beginnen.
Sluit de tabel vervolgens weer af.
Maak nu een query aan, in de ontwerpweergave en baseer deze
query op de zojuist gemaakte tabel. Neem het veld klantnummer
op.
Selecteer vervolgens in de menubalk Query, Toevoegquery en geef
op dat we de gegevens willen toevoegen aan de tabel Klant.
Laat de query uitvoeren.
Open hierna de tabel Klant en verwijder het zojuist toegevoegde
record, met de waarde 3999. Zorg er ook voor dat de originele
sleutelinstelling weer wordt ingesteld, dus klantnummer weer aan-
wijzen als sleutel.
Als we nu een nieuw record toevoegen, zullen we zien dat Access
automatisch de waarde 4000 toekent als eerstvolgende klantnum-
mer.
Het is overigens verstandig om voordat we de vorenstaande actie
ondernemen de database te defragmenteren en te comprimeren.
Hierbij wordt onder andere alle overtollige ruimte uit de database
verwijderd. Tevens wordt het autonummer op de eerstvolgende
startwaarde gezet, dat wil zeggen op n hoger dan de hoogste
waarde die in gebruik is. Hebben we als test in een database
gewerkt en gebruikgemaakt van een autonummer, dan kunnen we
na het verwijderen van alle testgegevens het comprimeren
gebruiken om de startwaarde van het autonummer weer op 1 te
zetten. Om te comprimeren selecteer je achtereenvolgens: Extra,
Databasehulpprogrammas, Database comprimeren en herstellen.
Notatiewijze
Met de eigenschap Notatie kunnen we opgeven hoe gegevens
moeten worden gepresenteerd naar buiten toe. Deze eigenschap
heeft geen invloed op de waarde van het veld zelf, alleen op de
presentatiewijze. Zo kan een tekst, opgeslagen in kleine letters,
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
390
op het scherm gepresenteerd worden als een tekst in hoofdletters.
Afhankelijk van het soort veld kunnen we de notatiewijze instel-
len.
Voor een tekst-veld kunnen we gebruikmaken van:
@op de positie van dit teken wordt het ingetypte teken of een spa-
tie getoond;
& op de positie hiervan wordt het teken getoond; als er niets is
ingetoetst, wordt er niets getoond;
< alles wordt in kleine letters weergegeven;
> alles wordt in hoofdletters weergegeven.
We kunnen twee secties opgeven. De eerste sectie bevat de notatie
voor een veld waarin een waarde staat vermeld, de tweede sectie
bevat de opmaak voor een leeg veld, een veld zonder waarde. De
secties worden door een puntkomma van elkaar gescheiden.
Om een artikelcode te tonen volgens het formaat twee tekens, punt,
vier tekens, punt, n teken, in hoofdletters, kunnen we gebruik-
maken van de notatie >@@.@@@@.@;[rood]onbekend. Als er
geen waarde wordt ingevuld, wordt dit dus met de tekst onbekend
weergegeven (in het rood). De bovengenoemde eigenschappen
gelden ook voor velden van het type memo.
Voor een veld van het type numeriek hebben we de keuze uit een
aantal standaardinstellingen:
Standaard getalnotatie het getal wordt weergegeven zoals het is
ingevoerd.
Valuta geldbedrag, het scheidingsteken voor duizendtallen wordt
gebruikt; negatieve getallen worden tussen haakjes geplaatst, stan-
daard worden er twee decimalen getoond.
Euro de valutanotatie wordt gebruikt, waarbij altijd het eurosym-
bool wordt getoond, onafhankelijk van het in Windows ingestelde
valutasymbool;
Vast er wordt ten minste n cijfer weergegeven, zonder duizend-
talteken, standaard worden er twee decimalen getoond.
Standaard het scheidingsteken voor duizendtallen wordt gebrui-
kt; de standaardinstelling van het aantal decimalen is 2.
voorbeeld
Copyright 2007 Academic Service
A Veldeigenschappen
391
Percentage de waarde wordt met 100 vermenigvuldigd en er
wordt een procentteken (%) toegevoegd; de standaardinstelling
van het aantal decimalen is 2.
Wetenschappelijk de standaard wetenschappelijke notatie wordt
gebruikt, dus machten van tien.
Naast de standaardinstellingen kunnen we bij getallen ook een
eigen presentatiewijze deniren. We kunnen dan gebruikmaken
van:
. (punt) het scheidingsteken voor duizendtallen;
, (komma) het decimale scheidingsteken;
0 tijdelijke cijferaanduiding; geeft altijd een cijfer
(eventueel 0) weer;
# tijdelijke cijferaanduiding; geeft een cijfer of niets
weer;
geeft het euroteken weer (alleen in de
Nederlandstalige versie)
$ geeft de dollaraanduiding weer (alleen in de
Engelstalige versie);
% percentage: de waarde wordt vermenigvuldigd met
100 en er wordt een procentteken toegevoegd;
E of e wetenschappelijke notatie, met een minteken ()
bij negatieve exponenten en geen teken bij
positieve exponenten; te gebruiken in combinatie
met andere symbolen, bijvoorbeeld 0,00E-00 of
0,00E00;
E+ of e+ wetenschappelijke notatie, met een minteken bij
negatieve exponenten en een plusteken (+) bij posi-
tieve exponenten; te gebruiken in combinatie met
andere symbolen, bijvoorbeeld 0,00E+00.
We kunnen bij getallen werken met vier secties, van elkaar geschei-
den door een puntkomma. Deze bevatten achtereenvolgens de
opmaak voor positieve getallen, voor negatieve getallen, voor de
waarde nul (het getal nul) en ten slotte voor de Null-waarde (leeg
veld). Voorbeeld : #.##0,00; #.##0,00 Negatief!;Nul;
Onbekend. Door deze instelling worden getallen altijd getoond
als bedragen, voorafgegaan door het euroteken. Er wordt altijd
minimaal n cijfer voor het decimaalteken getoond en altijd twee
decimalen. Bij negatieve bedragen (tweede sectie) wordt achter
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
392
het bedrag het woord Negatief! afgedrukt. De waarde 0 (derde
sectie) wordt als woord uitgeschreven. In een leeg veld (sectie vier)
wordt de tekst Onbekend getoond. De bovengenoemde eigen-
schappen gelden ook voor velden van het type valuta.
Voor een veld van het type datum/tijd hebben we de keuze uit een
aantal standaardinstellingen:
Standaard datumnotatie als de waarde alleen uit een datum
bestaat, wordt geen tijd weergegeven en als de waarde alleen uit
een tijd bestaat, wordt geen datum weergegeven; de instelling is
een combinatie van de instellingen Korte datumnotatie en Lange
tijdnotatie, bijvoorbeeld:
3-04-98 17:34:00.
Lange datumnotatie lange aanduiding, volgt de instelling van
Windows zelf; standaard staat deze op de weergave: Vrijdag 3
april 1998.
Middellange datumnotatie middellange aanduiding, bijvoorbeeld:
3-apr-98.
Korte datumnotatie korte notatie, volgt de instelling van
Windows zelf; standaard staat deze op de weergave: 3-4-98.
Waarschuwing: bij deze instelling wordt aangenomen dat datums
tussen 1-1-00 en 31-12-29 datums uit de eenentwintigste eeuw
zijn (dat wil zeggen, er wordt uitgegaan van de jaren van 2000 tot
2029); datums tussen 1-1-30 en 31-12-99 worden verondersteld uit
de twintigste eeuw te zijn (dat wil zeggen, er wordt uitgegaan van
de jaren van 1930 tot 1999).
Lange tijdnotatie lange aanduiding voor de tijd, volgt de instel-
ling van Windows zelf; standaard aangeduid met bijvoorbeeld:
17:34:23.
Middellange tijdnotatie middellange aanduiding, bijvoorbeeld:
5:34 PM.
Korte tijdnotatie korte aanduiding, bijvoorbeeld: 17:34.
Naast de standaardinstellingen kunnen we ook een eigen presenta-
tiewijze deniren. We kunnen dan gebruikmaken van:
: scheidingsteken binnen de tijdaanduiding, aan te
passen binnen Windows zelf;
/ scheidingsteken binnen de datum;
c als de vooraf gedenieerde Standaard datumnota-
tie;
Copyright 2007 Academic Service
A Veldeigenschappen
393
d dag van de maand in n of twee cijfers, afhanke-
lijk van wat nodig is (van 1 tot en met 31);
dd dag van de maand (altijd) in twee cijfers;
ddd eerste twee letters van de dag;
dddd volledige naam van de dag;
ddddd als de vooraf gedenieerde Korte datumnotatie;
dddddd als de vooraf gedenieerde Lange datumnotatie;
w dag van de week (van 1 tot en met 7);
ww week van het jaar (van 1 tot en met 53);
m maand van het jaar in n of twee cijfers;
mm maand van het jaar (altijd) in twee cijfers;
mmm eerste drie letters van de maand;
mmmm volledige naam van de maand;
k datum weergegeven als kwartaal van het jaar (van
1 tot en met 4);
j dag van het jaar (van 1 tot en met 366);
jj laatste twee cijfers van het jaartal (van 01 tot en
met 99);
jjjj volledig jaartal in vier cijfers;
u uren in n of twee cijfers;
uu uren in (altijd) twee cijfers;
n minuten in n of twee cijfers;
nn minuten in (altijd) twee cijfers;
s seconden in n of twee cijfers;
ss seconden in (altijd) twee cijfers;
ttttt als de vooraf gedenieerde Lange tijdnotatie;
AM/PM tijdaanduiding in maximaal 12 uren, met toevoe-
ging van de hoofdletters AM (s ochtends) of PM
(s middags);
am/pm maximaal 12 uren, maar nu met toevoeging van de
kleine letters am (s ochtends) of pm (s middags);
A/P maximaal 12 uren, met toevoeging van de hoofd-
letter A (s ochtends) of P (s middags);
a/p maximaal 12 uren, met toevoeging van de kleine
letter a (s ochtends) of p (s middags);
AMPM maximaal 12 uren, met de aanduiding van ochtend
of middag, zoals gedenieerd in Windows zelf.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
394
Voor een veld van het type Ja/nee hebben we de keuze uit drie
standaardinstellingen:
Waar/onwaar;
Ja/nee;
Aan/uit.
We kunnen ook zelf de eigenschappen instellen; daartoe beschik-
ken we over drie secties. De eerste sectie blijft ongebruikt, we
gaan dus direct met een ; door naar de tweede sectie. Daar geven
we op welke waarde getoond moet worden als de waarde Waar, Ja
of Aan is. In de derde sectie geven we de waarde op die we wensen
te tonen in het geval de waarde van het veld Onwaar, Nee of Uit
is. Bijvoorbeeld: de notatie ;Betalend lid;Ere lid zal de tekst
Betalend lid tonen als de waarde van het invoer veld op Ja staat.
In het andere geval wordt de tekst Ere lid getoond.
Omdat een veld van het type Ja/Nee standaard wordt weergegeven
als afvinkvakje, wordt de presentatiewijze voornamelijk gebruikt
bij het laten uitvoeren van querys en rapporten.
Bij alle velden, ongeacht het type, kunnen we gebruikmaken van:
het teken !, er wordt dan rechts uitgelijnd in plaats van links;
het teken *, de beschikbare ruimte wordt nu opgevuld met het op
het *-teken volgende symbool;
alle andere tekens worden letterlijk in het veld weergegeven als we
ze omsluiten met dubbele aanhalingstekens of (ieder afzonderlijk)
laten voorafgaan door het teken \.
We kunnen ook de kleur instellen door deze op te geven tussen
rechte haken, bijvoorbeeld [rood]. We kunnen kiezen uit zwart,
blauw, groen, lichtblauw, rood, lila, geel en wit.
Invoermasker
Met een Invoermasker kunnen we per teken opgeven welke invoer
is toegestaan. Daarbij kunnen we gebruikmaken van de volgende
symbolen:
Copyright 2007 Academic Service
A Veldeigenschappen
395
0 verplichte invoer van een cijfer (0 t/m 9), het plus- en min-
teken zijn niet toegestaan;
9 invoer van cijfer (0 t/m 9) of een spatie, niet verplicht, het
plus- en minteken zijn niet toegestaan;
# invoer van cijfer (0 t/m 9), spatie of het plus- of minteken,
niet verplicht;
L letters A t/m Z, verplichte invoer;
? letters A t/m Z, niet verplicht;
A letter of cijfer, verplicht;
a letter of cijfer, niet verplicht;
& willekeurig teken of spatie, verplicht;
C willekeurig teken of spatie, niet verplicht;
,.:;-/ scheidingstekens voor decimalen, duizendtallen, datum en
tijd, het echte teken is afhankelijk van de instellingen in
Windows zelf;
> maakt van alle volgende tekens hoofdletters;
< maakt van alle volgende tekens kleine letters;
! lijnt rechts uit;
\ het hieropvolgende teken wordt letterlijk weergegeven.
We kunnen als masker ook het woord Wachtwoord opgeven. De
invoer wordt dan behandeld alsof het een wachtwoord is. Ieder
ingevoerd teken wordt weergegeven door een asterisk.
We kunnen bij het werken met een invoermasker gebruikmaken
van drie secties. In de eerste sectie geven we het masker zelf op. In
de tweede sectie geven we op of we de letterlijke-weergave-tekens
(volgend op \) in de tabel willen opslaan wanneer we gegevens
invoeren. Als we in deze sectie 0 typen, worden alle letterlijke
tekens (bijvoorbeeld de haakjes in een invoermasker voor een tele-
foonnummer) samen met de waarde opgeslagen. Als we 1 typen
of de sectie leeg laten, worden alleen de tekens opgeslagen die we
daadwerkelijk intoetsen. In de derde sectie geven we het teken op
waarmee we spaties in het invoermasker wensen weer te geven.
Om een bankrekening in te toetsen volgens het formaat
12.34.56.789, waarbij we de punten zelf niet opslaan, geven we de
volgende notatie op: 00\.00\.00\.000;1;. Een postcode kan volgens
de layout 0000\ >LL;1 De spatie (tussen de tekens \ en >) wordt nu
niet opgenomen in het bestand.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
396
Door niet zelf een masker in te toetsen maar op de knop met de
drie puntjes te drukken, starten we een Wizard die het instellen
van een masker vereenvoudigt doordat de uitwerking van de instel-
ling direct op het scherm wordt getoond, zie guur A.2. De Wizard
start overigens alleen bij invoermaskers voor velden van het type
tekst en datum/tijd.
We kunnen hier een eerste keuze maken. Selecteer het masker
dat het best aan onze wensen voldoet. Druk daarna op de knop
Volgende. Door op de knop Lijst bewerken te drukken, kun je
een aantal standaardmaskers bewerken en blijvend veranderen.
Je verandert daarmee dus de standaardwaarde zelf. Ook kun je
zelfgedenieerde standaardmaskers toe voegen.
In het scherm van guur A.3 kunnen we het masker aanpassen
voor het veld waarmee we bezig zijn. Een wijziging die we hier
aanbrengen, is dus alleen voor dit ene veld geldig. Tevens kunnen
we hier aangeven met welk teken we het veld willen vullen. Dit
teken wordt later overschreven door de ingetoetste tekens. Hierna
kunnen we naar de volgende stap van de Wizard gaan.
We dienen nu (zie guur A.4) op te geven of de door ons gebruikte
symbolen uit het masker ook moeten worden opgeslagen of niet.
Hiermee krijgen we de mogelijkheid de veldlengte te verkleinen.
We slaan de vaste symbolen immers niet op in de tabel, maar pre-
senteren deze wel in de in- en uitvoer doordat we deze symbolen
Figuur A.2
Copyright 2007 Academic Service
A Veldeigenschappen
397
hebben opgenomen in het masker. Ten slotte voltooien we het
masker.
Let op! Als we gebruikmaken van een invoermasker en tegelijker-
tijd van de eigenschap Notatie, heeft de eigenschap Notatie prio-
riteit bij het weergeven van de gegevens.
Figuur A.3
Figuur A.4
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
398
Bijschrift
Normaal wordt als kolomnaam, of als veldnaam in een formulier,
de naam van het betreffende veld gebruikt zoals die is opgegeven
bij het deniren van de tabel. Met de eigenschap Bijschrift kun-
nen we een andere tekst opgeven die als bijschrift moet worden
gebruikt.
Standaardwaarde
Met deze eigenschap kunnen we een veld van een nieuw record
automatisch laten vullen met een Standaardwaarde. Dit is handig
als we in een veld vaak dezelfde waarde moeten invullen. We kun-
nen hier ook gebruikmaken van functies. Bij een datumveld kun-
nen we bijvoorbeeld gebruikmaken van de functie DATE() om de
huidige datum te noteren. Uiteraard kunnen we tijdens het daad-
werkelijk invoeren van gegevens de standaardwaarde wijzigen in
een andere waarde.
Validatieregel
Met een Validatieregel kunnen we controleren of de door de
gebruiker ingetoetste waarde voldoet aan de beperkingen zoals
we die hebben opgegeven. We kunnen een validatieregel direct
invoeren, maar ook gebruikmaken van de opbouwfunctie voor
expressies zoals we die ook zijn tegengekomen bij het opstellen
van querys.
Door een validatieregel op te geven dient de gebruiker ook altijd
iets in te voeren. Het is niet toegestaan het veld leeg te laten, tenzij
we dit expliciet opgeven in de validatieregel en bij de eigenschap
Vereist.
Om een numerieke waarde te controleren waarvan de waarde moet
liggen tussen 10 en 250, geven we de volgende regel op: >=10
AND <=250. Ook in de Nederlandstalige versie dienen we de uit-
drukking AND te gebruiken! Een tekst van vijf tekens, waarvan
de eerste letter een A is, waarbij het ook is toegestaan om niets in
te vullen: LIKE A???? OR IS NULL. Let erop dat we ook de
waarde van Vereist moeten instellen op No!
Copyright 2007 Academic Service
A Veldeigenschappen
399
Validatietekst
Als we gebruikmaken van een Validatietekst, zal Windows een
standaardmelding tonen op het moment dat er onjuiste invoer is
ingegeven. Willen we een eigen melding laten tonen, dan kunnen
we de tekst hier opgeven.
Vereist
De eigenschap Vereist gebruiken we om op te geven of een veld
verplicht een waarde moet krijgen of dat men het ook leeg mag
laten.
Lengte nul toegestaan
De eigenschap Lengte nul toegestaan bepaalt of we lege invoer
toestaan of niet. Deze eigenschap werkt direct samen met de eigen-
schap Vereist. Is de eigenschap Vereist op Nee ingesteld, dan is
lege invoer (bijvoorbeeld direct op Enter of op de spatiebalk druk-
ken) toegestaan. In het veld wordt dan de Null-waarde geplaatst.
Staat de waarde van de eigenschap Vereist op Ja, dan hebben we de
volgende twee mogelijkheden; deze zijn afhankelijk van de waarde
van de eigenschap Lengte Nul Toegestaan:
Ja: drukken op Enter is niet toegestaan, drukken op de spatiebalk
wel.
Nee: geen van de beide bovenstaande acties is toegestaan.
Gendexeerd
Met de eigenschap Gendexeerd kunnen we opgeven of bij het
betreffende veld een index moet worden aangemaakt (en bijgehou-
den) of niet. Een index zorgt ervoor dat het zoeken in en sorteren
op het betreffende veld aanzienlijk sneller verloopt. Moeten we
vaak zoeken naar waarden in een bepaald veld, dan is het ver-
standig op dat veld een index te deniren. Access creert zelf
automatisch een index voor ieder sleutelattribuut. Vanuit een sleu-
telwaarde worden vaak gerelateerde gegevens in andere bestanden
gezocht. Om dit zoeken te versnellen is het verstandig om in die
bestanden, op basis van de betreffende vreemde sleutel, een index
te laten genereren. Met name bij grote hoeveelheden gegevens zal
het uitvoeren van querys hierdoor aanzienlijk versneld worden.
Het aanbrengen van wijzigingen in de tabel wordt nu wel iets ver-
traagd omdat de index steeds opnieuw moet worden bijgewerkt.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
400
We kunnen de eigenschap instellen op drie waarden:
Nee er wordt nu geen index aangemaakt.
Ja, (Duplicaten Ok) er wordt een index gemaakt waarbij dubbele
waarden zijn toegestaan. Deze waarde dienen we dus in te stellen
bij de index die we aanleggen op basis van een vreemde sleutel.
Ja (Geen duplicaten) er wordt een index gemaakt waarin geen
duplicaten mogen worden opgenomen, zoals bij een sleutelveld
gebruikelijk is.
Vaak is een index op een enkel veld voldoende, soms echter niet.
Bijvoorbeeld: voor het bijhouden van een agenda moet de combi-
natie datum en tijd uniek zijn, maar de afzonderlijke velden hoeven
dat niet te zijn!
Willen we een index op meerdere velden tegelijkertijd, dan moeten
we gebruikmaken van het venster Indexen, te bereiken via de
menukeuze Beeld, Indexen.
In het venster (zie guur A.5) voegen we de gewenste index toe
aan de reeds bestaande indexen. We geven eerst de index een naam
in de kolom Indexnaam. Hierna geven we in de kolom Veldnaam
de verschillende te combineren velden op. Deze velden plaatsen we
onder elkaar op verschillende regels, waarbij we bij het tweede en
volgende veld de kolom Indexnaam leeg laten. Vervolgens geven
we in de kolom Sorteervolgorde, per veld, de gewenste volgorde
aan, Oplopend of Aopend.
Onder in het scherm kunnen we vervolgens nog drie eigenschap-
pen opgeven:
Primair moet de index als primaire sleutel dienst doen? Hiermee
verwijderen we een eventueel al eerder opgegeven primaire sleutel.
Uniek moet de waarde in het (gecombineerde) veld uniek zijn of
niet.
Null-waarden negeren moeten lege velden ook in de index wor-
den opgenomen of niet.
In dit scherm kunnen we ook bestaande indexen wijzigen of ver-
wijderen. We verwijderen een index door de betreffende regel te
markeren en vervolgens op de toets Delete te drukken.
Copyright 2007 Academic Service
A Veldeigenschappen
401
Unicode compressie
Access ondersteunt, net als de andere Ofce-modules, het
Unicode-schema. Hiermee is het mogelijk in plaats van de gebrui-
kelijke 256 tekens ruim 65000 verschillende tekens te gebruiken.
Dit betekent echter wel dat velden van het type Tekst, Memo en
Hyperlink twee keer zoveel ruimte in beslag nemen als wanneer er
geen gebruik gemaakt wordt van Unicode. Indien we de Unicode-
compressie bij een veld toestaan worden de normale tekens zoals
die voorkomen in de West-Europese talen toch gecomprimeerd
opgeslagen. Voor afwijkende tekens, bijvoorbeeld een Grieks of
Russisch symbool, wordt dan automatisch de niet-gecomprimeerde
opslagwijze gehanteerd. Gelet op een efcint gebruik van schij-
fruimte is het verstandig om het comprimeren altijd toe te staan.
Alleen indien we afwijkende tekens gebruiken en we gegevens
willen kunnen uitwisselen met andere 32-bits applicaties (geen
Ofce-modules) die eveneens Unicode ondersteunen, is het ver-
standig de compressie uit te schakelen.
IME-modus / IME-zinmodus
IME staat voor Input Method Editor. Dit is een programma waar-
mee gewone toetsaanslagen, bij het gebruik van de Oost-Aziatische
talen, kunnen worden omgezet naar specieke Oost-Aziatische
karakters. Met behulp van de eigenschappen IME-Modus en IME-
zinmodus kunnen we instellen hoe er in het betreffende veld moet
worden omgegaan met de ingevoerde toetsaanslagen. Het werken
met deze twee eigenschappen heeft alleen maar zin als je de IME
van de gewenste taal daadwerkelijk hebt genstalleerd. Je hebt hier-
bij de keuze uit Chinees, Japans en Koreaans. De gewenste IME
kun je downloaden vanaf de ofcile Windows Ofcewebpagina.
Figuur A.5
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
402
Infolabels
Een infolabel (Smarttag) kun je gebruiken om aan een veld
een bepaalde vooraf gedenieerde standaardactie te koppelen.
Microsoft heeft een aantal standaardacties ontwikkeld, gericht op
het gebruik van Microsoft Ofce. Deze acties stellen je bijvoor-
beeld in staat om snel een email te versturen, een afspraak te plan-
nen of een naam toe te voegen aan de lijst met contactpersonen.
Maar er bestaan ook acties die niet zo zeer gericht zijn op Outlook
maar op andere zaken, bijvoorbeeld het ophalen van nancile
gegevens over een bedrijf. Ook andere partijen dan Microsoft heb-
ben standaardacties ontwikkeld. Heb je een infolabel aan een veld
gekoppeld dan zal, zodra je het veld selecteert, het infolabelsym-
bool verschijnen. Door hier met de rechtermuistoets op te klikken
kun je de actie starten.
Wil je infolabels bij gebruik van het gegevensblad niet tonen,
dan kun je dit bereiken door via Extra, Opties naar het tabblad
Gegevensblad te gaan en hier voor de betreffende keuze het vinkje
weg te halen.
Copyright 2007 Academic Service
B Opties
Tijdens het werken met Access zullen we merken dat het program-
ma een aantal vooraf ingestelde standaardwaarden kent, bijvoor-
beeld de standaardlengte van een tekstveld of de plaats waar de
databases worden opgeslagen. Deze waarden kunnen we voor het
grootste deel zelf wijzigen. Enkele belangrijke standaardinstellin-
gen worden hierna nader toegelicht.
Willen we een standaardwaarde wijzigen, dan kiezen we in het
menu voor Extra, Opties. Vervolgens wordt het scherm dat is afge-
beeld in guur B.1 getoond. Verdeeld over elf tabbladen vinden we
alle instellingen waarvan we de waarde kunnen wijzigen. De zes
belangrijke en voor iedereen bruikbare tabbladen worden hierna
kort toegelicht. Dit zijn achtereenvolgens Weergave, Algemeen,
Bewerken/zoeken, Toetsenbord, Gegevensblad en Tabellen/que-
rys. De overige tabbladen worden hier verder buiten beschouwing
gelaten omdat deze buiten de doelstellingen van dit boek liggen.
Weergave
In het tabblad Weergave kunnen we opgeven wat we op het scherm
wensen te zien. We regelen dit door het betreffende item wel of
niet af te vinken (zie guur B.1).
Als eerste kunnen we opgeven of we de Statusbalk onder in het
scherm wensen te zien. Op deze balk staat onder andere vermeld
in welke modus Access zich bevindt. Ook staan daar vaak korte
aanwijzingen.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
404
Als tweede kun je opgeven of je het Taakvenster dat Access stan-
daard direct na het opstarten van het programma toont, wilt zien
of niet. In het taakvenster kun je direct een bestaande database
openen of een nieuwe database aanmaken. Ook zie je een kort
overzicht van de databases die je het laatst hebt gebruikt. In dit
boek gaan we ervan uit dat dit venster wordt getoond.
De derde instelling, Snelkoppeling voor nieuwe objecten, geeft
aan of in het databasescherm niet alleen de echte objecten (tabel-
len, rapporten, enzovoort) worden getoond maar ook de specieke
snelkoppelingen, bijvoorbeeld Rapport maken in ontwerpweergave
of Rapport maken met wizard.
De vierde instelling, Verborgen objecten, komt soms goed van
pas. We kunnen namelijk objecten uit de database (tabellen,
querys, enzovoort) verbergen. Daartoe klikken we er in het data-
basescherm met de rechtermuisknop op. Vervolgens kiezen we
Eigenschappen en vinken we de instelling Verborgen af. Het object
wordt nu niet langer in het databasescherm getoond. Daardoor
kunnen we het echter ook niet meer benaderen om de instelling
waarmee we het hebben verborgen, te herroepen. Door in dit tab-
blad de eigenschap Verborgen objecten af te vinken zorgen we
ervoor dat ook de verborgen objecten weer getoond worden, alleen
nu voorafgegaan door een lichtgrijs pictogram. Omdat we nu het
object weer kunnen selecteren, kunnen we de eigenschap verber-
gen eventueel weer opheffen.
Figuur B.1
Copyright 2007 Academic Service
B Opties
405
De vijfde instelling is gevaarlijk. We kunnen daarmee de sys-
teemtabellen zichtbaar maken in het databasescherm. In deze
tabellen houdt Access voor zichzelf bij hoe de database is opge-
bouwd: welke tabellen, welke relaties, welke querys, enzovoort
deze bevat. Door in deze tabellen wijzigingen aan te brengen
kunnen we de database ernstig beschadigen. Vink het kenmerk
Systeemobjecten dus niet af, tenzij je daarmee een speciale bedoe-
ling hebt.
De zesde instelling bepaalt of er pictogrammen op de taakbalk
moeten worden getoond voor iedere geopend object of scherm. Om
de pictogrammen te tonen dienen we wel Internet Explorer Active
Desktop genstalleerd te hebben.
Ten slotte kunnen we ook nog aangeven of we bij het ontwerpen
van macros een Kolom met namen en/of een Kolom met voor-
waarden wensen te zien. Ook de wijze van klikken om objecten in
het databasevenster te openen kun je nog opgeven.
Algemeen
In het tabblad Algemeen, zie guur B.2, kunnen we de
Afdrukmarges instellen. Hiermee bepalen we de vrije ruimte aan
de boven-, onder- en zijkant van het papier bij het afdrukken.
Figuur B.2
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
406
Tevens kunnen we hier opgeven welke map (folder) we wensen te
gebruiken als Standaarddatabasemap. In deze map zullen nieuwe
databases worden geplaatst en bestaande databases worden opge-
zocht, tenzij we speciek een andere map opgeven.
Verder kunnen we opgeven welke taal we wensen te gebruiken
bij het bepalen van de Sorteervolgorde voor nieuwe database. De
sorteervolgorde kan namelijk van land tot land verschillen, mede
als gevolg van tekens die in de ene taal wel en in de andere taal
niet voorkomen. Deze instelling heeft geen invloed op de sorteer-
volgorde van bestaande databases.
Met de instelling Automatische naamcorrectie kunnen we instel-
len of Access gegevens moet bijhouden om een verbetering in een
naam later ook op andere plaatsen automatisch door te voeren.
Tevens kunnen we aangeven of de automatische verbeteringen
direct doorgevoerd moeten worden en of hiervan een logboek moet
worden bijgehouden. We hebben ook de mogelijk om aan te geven
of jaartallen in de geopende database, of zelfs in alle databases,
met vier cijfers moeten worden getoond of niet. Deze instelling is
onafhankelijk van de datuminstelling zoals die is opgegeven in het
conguratiescherm van Windows zelf. In het veld Laatst gebruikte
bestanden geven we aan of we bij het openen van het menu-item
Bestand de laatst gebruikte bestanden wensen te zien en zo ja,
welk aantal. Het item Comprimeren bij sluiten bepaalt of we data-
bases bij het opslaan willen laten comprimeren of niet. Access
zorgt er zelf voor dat bij het openen van databases eventueel wordt
gedecomprimeerd. De compressie die hier wordt gerealiseerd, is
bij lange na niet zo goed als de compressie die bij speciale com-
pressieprogrammas zoals PKZIP wordt behaald.
We kunnen ook opgeven of we gebruik wensen te maken van
geluidseffecten bij bijvoorbeeld het optreden van fouten of uit-
zonderlijke situaties, Feedback met geluid. De te gebruiken gelui-
den kunnen we binnen Windows zelf instellen. Wees voorzichtig
in het gebruik van geluiden omdat gebruikers zich snel ergeren aan
overbodige, steeds terugkerende geluiden.
Met de instelling Persoonlijke gegevens uit dit bestand verwij-
deren, kunnen we afdwingen dat de persoonlijke gegevens zoals
naam en bedrijf wel of niet worden opgenomen in de algemene
Copyright 2007 Academic Service
B Opties
407
eigenschappen van een database. De algemene eigenschappen van
een database kun je opvragen via Bestand, Eigenschappen. Met de
knop Webopties roep je een scherm op waarin je een aantal web-
gerelateerde eigenschappen instelt, zoals de kleur waarmee een al
dan niet gevolgde weblink moet worden weergegeven.
Serviceopties geeft de mogelijkheid om gebruik te maken van
Microsoft Online. Bij het gebruik van de help-functie worden
dan niet alleen de hulpbestanden gebruikt die op de PC aanwezig
zijn, maar ook de online (op het web) aangeboden hulpbestanden.
Tevens krijg je hiermee de beschikking over via het web aan-
geboden sjablonen en mediafragmenten. Via deze optie kun je ook
aangeven of je wilt meewerken aan het leveren van feedback aan-
gaande het gebruik van Microsoft software. Deze feedback ver-
loopt geheel geautomatiseerd en in de achtergrond. Op regelmatige
tijdstippen worden (niet-persoonsgebonden) gegevens omtrent
gebruik, uitzonderingen, foutmeldingen etc. naar Microsoft verstu-
urd.
Bewerken/zoeken
In het tabblad Bewerken/zoeken kunnen we als eerste opgeven
wat de standaardmethode zoeken/vervangen moet zijn. Deze stan-
daardmethode wordt voorgesteld als we gegevens gaan zoeken
in een tabel via de menukeuze Bewerken, Zoeken. De standaard-
methode kunnen we hier wijzigen, zie guur B.3.
Verder kunnen we opgeven bij welke bewerkingen er volgens ons
om Bevestigen gevraagd moet worden voordat de bewerking daad-
werkelijk wordt uitgevoerd.
De andere instellingen hebben te maken met het gebruik van een
Formulierlter. We kunnen dan opgeven bij welk soort veld (wel
of niet gendexeerd) we wel of geen Lijst met waarden wensen aan
te bieden. In een dergelijke lijst worden alle in het betreffende veld
voorkomende waarden getoond. We kunnen dan de lterwaarde
bekend maken door de betreffende waarde te selecteren. Ook kun-
nen we hier de waarde instellen die opgeeft: Geen lijsten weer-
geven waarvoor meer dan het volgende aantal records is gelezen.
Lijsten waarbij minder dan het opgegeven aantal records is betrok-
ken, worden getoond. Lijsten waarbij meer dan het opgegeven aan-
tal records is betrokken, worden onderdrukt.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
408
Toetsenbord
In het tabblad Toetsenbord kunnen we als eerste opgeven wat de
wijze van Verplaatsing met Enter moet zijn op het moment dat
we op de toets Enter drukken, zie guur B.4. We kunnen ervoor
kiezen om de cursor niet te verplaatsen, te verplaatsen naar het
volgende veld of te verplaatsen naar het volgende record. In het
laatste geval zullen we waarschijnlijk met de Tab-toets van veld
naar veld springen.
Ook kunnen we opgeven wat de Focus na verplaatsing moet zijn.
Moet de cursor na het verplaatsen naar een ander veld aan het
begin van het veld staan, aan het einde van het veld, of moet het
gehele veld direct zijn geselecteerd (gemarkeerd).
Met de instelling Werking van pijltoetsen geven we op of we met
het gebruik van de toetsen en naar het volgende teken of
naar het volgende veld wensen te springen. In het laatste geval
kunnen we met behulp van de toets F2 binnen een veld toch naar
een volgend teken gaan.
De instelling Cursor stopt bij eerste/laatste veld, bepaalt of we met
de toetsen en wel of niet door kunnen gaan naar een vorig/
volgend record in de lijst.
Figuur B.3
Copyright 2007 Academic Service
B Opties
409
Gegevensblad
In het tabblad Gegevensblad kunnen we de opmaak van de
gegevensbladen instellen, zie guur B.5.
De instellingen voor Standaardkleuren, Standaardlettertype,
Standaardweergave van rasterlijnen, Standaardkolombreedte,
Standaardceleffect en Animatie weergeven kunnen we aanpassen.
Figuur B.4
Figuur B.5
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
410
Met name de instelling voor de standaardbreedte voor kolommen
kan waarschijnlijk goed van pas komen. Je kunt hier ook opgeven
of je eventuele aanwezige infolabels (smarttags) wel of niet wilt
zien bij het werken met tabellen en formulieren. De mogelijkheid
kan met name een rol spelen bij het werken met databases die door
derden worden aangeleverd en waarbij ongewenste standaardacties
aan de infolabels zijn toegekend.
Tabellen/querys
Het tabblad Tabellen/querys is bedoeld om de standaard bij het
ontwerpen van tabellen en querys in te stellen, zie guur B.6.
Als eerste kunnen we de Standaardveldlengten opgeven. Voor
tekst bedraagt deze 50 tekens, maar het is aan te bevelen deze te
verlagen tot 25. De standaardlengte voor getallen is gesteld op
lange integer, waarbij we dus gehele getallen van 2.147.483.648
tot en met 2.147.483.647 kunnen invoeren.
Vervolgens kunnen we het Standaardveldtype instellen en onder
welke omstandigheden er automatisch indexen moeten worden
aangemaakt, AutoIndex bij importeren/maken.
Op formulieren en rapporten maak je gebruik van de velden zoals
deze in de tabellen/querys voorkomen. Neem je een veld uit een
Figuur B.6
Copyright 2007 Academic Service
B Opties
411
tabel voor het eerst op in het ontwerp van een formulier/rapport,
dan worden automatisch alle eigenschappen van dat veld mee-
genomen, bijvoorbeeld dat het een numeriek veld is met twee deci-
malen. Wijzig je later de eigenschappen van het veld in de
onderliggende tabel (je wilt bijvoorbeeld een valutanotatie), dan
wil je waarschijnlijk dat deze wijziging ook wordt doorgevoerd in
alle formulieren/rapporten waar dit veld gebruikt wordt, of juist
niet! Je kunt Access zo instellen dat in dat geval een overzicht
wordt getoond van alle formulieren/rapporten waar dit veld
gebruikt wordt en je de mogelijkheid wordt gegeven de eigen-
schappen ook in die formulieren/rapporten aan te passen. Je moet
daartoe aangeven dat de knoppen voor de bijwerkopties voor
eigenschappen dienen te worden weergegeven.
Bij de instellingen van het query-ontwerp geven we eerst de instel-
ling Tabelnamen weergeven op. Hiermee bepalen we of de namen
van de tabellen in het ontwerpraster moeten worden vermeld of
niet. De instelling Alle velden weergeven bepaalt of bij het maken
van een query alle velden uit de betrokken tabellen moeten worden
getoond of alleen de door ons geselecteerde velden. De instelling
AutoJoin activeren bepaalt of Access zelf tabellen moet koppelen
of dat we dat handmatig moeten doen. Deze instelling zorgt ervoor
dat bij het gebruik van meer dan n tabel alleen de juiste combi-
naties worden gemaakt, op basis van velden die in beide tabellen
voorkomen en in n van de tabellen de sleutel vormen. Je vindt
hier ook de mogelijkheid om het lettertype en de tekengrootte op te
geven zoals die tijdens het ontwerpen van de query moeten worden
gebruikt. De instelling Uitvoeringsmachtigingen bepaalt of alleen
de eigenaar van een query wijzigingen in de query mag aanbren-
gen of dat ook gebruikers van de query dat mogen, gebaseerd op
de aan de gebruiker algemeen toegekende rechten.
De optie Met SQL-Server compatibele syntaxis (ANSI 92) bepaalt
of je wilt werken met de standaard ANSI 92 of met de standaard
ANSI 89. Access werkt bij SQL met de standaard ANSI 89. Deze
standaard is dan ook in dit boek aangehouden. Zolang je werkt met
Access-databases geeft dit weinig tot geen beperkingen. Maar als
je gegevens wilt ontsluiten die in een professioneel DBMS zoals
MS SQL-server liggen opgeslagen, moet je de standaard ANSI 92
gebruiken omdat MS SQL-server volgens die standaard werkt.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
412
Er zitten echter verschillen tussen de beide standaards die direct
gevolgen kunnen hebben voor de geproduceerde uitvoer. Een
belangrijk detail waarin de beide standaarden van elkaar verschil-
len, is bijvoorbeeld het gebruik van wildcards. De een gebruikt
een * en de ander een %-teken. De query SELECT plaats FROM
Bestemming WHERE plaats LIKE B* levert in de ene standaard
alle plaatsen op waarvan de naam met de letter B begint. In de
andere standaard wordt er geen uitvoer geproduceerd omdat daar
letterlijk naar de tekst B* wordt gezocht. En die wordt niet aan-
getroffen! Door dit soort verschillen is het dan ook niet mogelijk
om beide standaarden door elkaar te gebruiken. Je moet een keuze
maken. Bedenk dat bij het overschakelen naar de standaard ANSI
92, door het aanvinken van het betreffende veld, je alle querys
moet controleren op juist functioneren. In dit boek gaan we ervan
uit dat er wordt gewerkt volgens de standaard van Access, dus
ANSI 89.
Naast de mogelijkheid om makkelijk te werken met bijvoorbeeld
MS SQL-server, biedt ANSI 92 ook de mogelijkheid om:
rechten toe te kennen / te herroepen met GRANT en REVOKE;
DISTINCT te gebruiken bij rekenkundige functies;
de omvang van de uitvoer te beperken met LIMIT TO .. ROWS.
Copyright 2007 Academic Service
C Een grote, uitgewerkte
opdracht
In deze bijlage wordt een uitgewerkt voorbeeld gegeven van een
opdracht waarin alle aspecten aan de orde komen zoals die in dit
boek zijn toegelicht in de hoofdstukken 1 tot en met 7. Er wordt
uitgegaan van een gegeven informatiebehoefte. Via de techniek
van het normaliseren wordt hieruit de informatiebehoefte bepaald.
Vervolgens wordt de informatiebehoefte vertaald naar een Access-
database en worden de tabellen gevuld met gegevens. Ten slotte
wordt er een aantal querys, formulieren en rapporten ontwikkeld
waarmee de opgeslagen informatie ontsloten wordt. Docenten kun-
nen vergelijkbare opgaven verkrijgen bij de auteurs van het boek.
Voor meer informatie hierover verwijzen we naar het voorwoord.
De opdracht
Een tweewielcentrum in Almelo verkoopt etsen, brommers en
scooters. Sinds enige jaren heeft men de klanten ook de mogelijk-
heid gegeven om brommers en scooters te leasen. Om de gegevens
hiervan bij te houden maakt men onder andere gebruik van de vol-
gende overzichten.
In guur C.1 wordt per leasecontract vastgelegd wie welke brom-
mer of scooter least, vanaf welke datum en tegen welk bedrag.
Tevens wordt na aoop van het contract de datum vastgelegd waar-
op het contract eindigt. Men kan een contract per maand opzeg-
gen. Er geldt wel een opzegtermijn van twee maanden. Tenslotte
houdt men per contract ook de betalingsgegevens bij. De prijs per
maand is gebaseerd op het merk en type brommer of scooter dat
wordt gehuurd en van het feit of men ook een verzekering via het
tweewielcentrum heeft afgesloten. In dat geval ontvangt men een
korting van 10% op het standaard leasebedrag per maand.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
414
In guur C.2 wordt per merk en type de prijs bijgehouden die men
per maand in rekening brengt.
a. Logisch ontwerp
a.1. Normaliseer beide guren. Licht de normalisaties toe, denk
daarbij aan het toelichten van proces-, samengestelde en con-
stante gegevens. Licht ook de sleutelkeuze toe.
Figuur C.1
Figuur C.2
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
415
a.2. Integreer de normalisaties tot n geheel en ontwerp het bij-
behorende ERD.
a.3. Bij de onderdelen d, e en f kan sprake zijn van nog niet
genoemde attributen. Voeg deze (indien van toepassing) toe
aan de betreffende objecten.
b. Technisch ontwerp
b.1. Ontwerp de tabellen met behulp van Access. Zorg ervoor dat
bij vreemde sleutels alleen uit de bijbehorende sleutelwaarde
kan worden gekozen door gebruik te maken van een combo-
box (zie hoofdstuk 5). Neem in de kolom Beschrijving een
korte omschrijving op.
b.2. Leg tussen de tabellen alle bestaande relaties en dwing daar-
bij de controle op referentile integriteit af.
c. Opbouwen tabellen
c.1. Vul de bestanden met gegevens. Zorg ervoor dat de inhoud
van de tabellen een rele afspiegeling van de werkelijkheid is,
zonder je te verliezen in het invoeren van een eindeloze reeks
van gegevens. Zorg er ook voor dat alle hierna opgenomen
opgaven kunnen worden uitgevoerd en getest.
c.2. Maak een invoerformulier waarmee in n van de tabellen,
n waarbij geen sprake is van een vreemde sleutel, gegevens
kunnen worden ingevoerd. Zorg ervoor dat dit formulier net-
jes, overzichtelijk en uitnodigend is.
d. Opvragen gegevens
d.1. Verzorg een query waarmee alle klantgegevens worden gepre-
senteerd van klanten die per automatische incasso betalen. Op
volgorde van postcode.
d.2. Verzorg een query waarmee een overzicht wordt verkregen
met daarop per leasecontract het merk, type, prijs per maand
en de naam en de woonplaats van de klant. Het overzicht
moet liggen op volgorde van woonplaats. Bij gelijke woon-
plaats moet worden doorgesorteerd (oplopend) op merk.
d.3. Hoeveel leasecontracten zijn er in 2002 afgesloten, die nog
steeds doorlopen en waarbij ook direct de verzekering via ons
is afgesloten?
d.4. Verzorg per plaats het totale aantal afgesloten en nu nog lopen-
de leasecontracten. Toon het overzicht op volgorde van plaats-
naam.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
416
d.5. Verzorg een query waarmee per contract het totaal aan betaal-
de bedragen wordt getoond. Laat ook het aantal betalingen
en de naam van de klant tonen. Het overzicht moet liggen op
volgorde van dalend totaalbedrag.
e. Manipuleren gegevens
e.1. Verzorg een query waarmee het bedrag per maand wordt aan-
gepast. Leasebedragen boven de 20, moeten met 2% wor-
den verhoogd. Alle andere moeten met 3% worden verhoogd.
Maak voordat je dit test een kopie van je database!
e.2. Verzorg een query waarmee alle contracten, beindigd op of
voor een door de gebruiker op te geven datum, worden ver-
wijderd. Maak voordat je dit test een kopie van de database!
f. Rapporten
f.1. Verzorg een rapport waarmee guur C.2 kan worden gegene-
reerd.
f.2. Verzorg een rapport waarmee guur C.1 kan worden gegene-
reerd, nadat het nummer van het betreffende contract is inge-
voerd. Tip: maak een exibele query.
Uitwerking
a. Logisch ontwerp
a.1. Normaliseer beide guren. Licht de normalisaties toe, denk daar-
bij aan het toelichten van proces-, samengestelde en constante
gegevens. Licht ook de sleutelkeuze toe.
We beginnen met het normaliseren van guur C1. In dit overzicht
zien we allereerst de gegevens van het tweewielcentrum zelf. Dit
zijn vaste, constante gegevens die we niet opnemen. Vervolgens
zien we een aantal gegevens van de klant, de gegevens van het
geleaste voertuig, gegevens omtrent het contract en tenslotte een
aantal keer gegevens omtrent de verrichte betalingen. Dit levert de
onderstaande nulde normaalvorm.
0 NV (contractnummer, klantnummer, naam, adres, postcode,
plaats, telefoonnummer, geboortedatum, merk, type,
ingangsdatum, beindigingdatum, verzekering, maand-
bedrag, RG (betaal-datum, betaald bedrag))
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
417
Per contract wordt een uniek nummer gebruikt. Het contractnum-
mer kan dus als sleutel worden gebruikt. Alle gegevens worden n
keer vermeld, met uitzondering van de betaalgegevens, die dus zijn
opgenomen in een herhalende groep, repeating group. Omdat er
per maand een afwijkend bedrag kan zijn betaald, kan het betaalde
bedrag niet worden gezien als een procesgegeven.
1 NV (contractnummer, klantnummer, naam, adres, postcode,
plaats, telefoonnummer, geboortedatum, merk, type, in-
gangsdatum, beindigingdatum, verzekering, maandbedrag)
(contractnummer, betaaldatum, betaald bedrag)
De herhalende groep is apart genomen. Omdat er per contract
meerdere bedragen kunnen zijn betaald, maar nooit twee maal op
dezelfde datum, bestaat de sleutel in de nieuwe groep uit de combi-
natie contractnummer, betaaldatum.
2 NV = 1 NV
Er is in n groep sprake van een samengestelde sleutel, maar het
daarin opgenomen niet-sleutelattribuut is afhankelijk van de
gehele sleutel.
3 NV (contractnummer, klantnummer, merk, type, ingangsdatum,
beindigingdatum, verzekering, maandbedrag) (contract-
nummer, betaaldatum, betaald bedrag) (klantnummer,
naam, adres, postcode, plaats, telefoonnummer, geboorte-
datum)
Er is een nieuwe groep ontstaan met daarin de gegevens van de
klant. Deze gegevens hebben immers op zich niets te maken met
het contractnummer.
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
418
We vinden dus uiteindelijk:
CONTRACT (contractnummer, klantnummer, merk, type,
ingangsdatum, beindigingdatum, verzekering,
maandbedrag)
BETALING (contractnummer, betaaldatum, betaald bedrag)
KLANT (klantnummer, naam, adres, postcode, plaats,
telefoonnummer, geboortedatum)
We zullen nu guur C.2 normaliseren.
0 NV (merk, type, prijs per maand)
Ook hier geldt dat de gegevens van het tweewielcentrum als con-
stanten beschouwd kunnen worden. Er is ook geen sprake van een
herhalende groep. Omdat de prijs per maand afhankelijk is van het
merk en type, bestaat de sleutel uit de combinatie van deze twee
gegevens.
Vervolgens geldt dat de gevonden nulde normaalvorm ook direct
de eerste, tweede en derde normaalvorm is. We krijgen dus uitein-
delijk:
VOERTUIG (merk, type , prijs per maand)
a.2. Integreer de normalisaties tot n geheel en ontwerp het bij-
behorende ERD.
De integratie geeft in eerste instantie de onderstaande vier tabel-
len.
CONTRACT (contractnummer, klantnummer, merk, type,
ingangsdatum, beindigingdatum, verzekering,
maandbedrag)
BETALING (contractnummer, betaaldatum, betaald bedrag)
KLANT (klantnummer, naam, adres, postcode, plaats,
telefoonnummer, geboortedatum)
VOERTUIG (merk, type , prijs per maand)
Door de integratie ontstaat er plotseling een procesgegeven. Het
maandbedrag in de tabel CONTRACT is na integratie een pro-
cesgegeven geworden, omdat dit bedrag ook kan worden afgeleid
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
419
uit de prijs per maand uit de tabel VOERTUIG, tezamen met het
gegeven verzekering uit de tabel CONTRACT. Immers, als er geen
verzekering is afgesloten, geldt dat het maandbedrag gelijk is aan
de prijs per maand. Als er wel een verzekering bij afgesloten is,
wordt er een korting van 10% op de prijs per maand verleend. Dus
uit het feit of er wel of niet een verzekering is afgesloten, kan in
combinatie met de prijs per maand het maandbedrag worden ber-
ekend. We laten het maandbedrag dus achterwege. We krijgen dan:
CONTRACT (contractnummer, klantnummer, merk, type,
ingangsdatum, beindigingdatum, verzekering)
BETALING (contractnummer, betaaldatum, betaald bedrag)
KLANT (klantnummer, naam, adres, postcode, plaats,
telefoonnummer, geboortedatum)
VOERTUIG (merk, type , prijs per maand)
Dit levert het volgende ERD op:
Bij een contract kunnen nul, een of meer betalingen horen. Een
betaling hoort bij precies n contract. Bij een contract hoort pre-
cies n klant, maar een klant kan wel meerdere contracten hebben
lopen. Omdat we een klantgegeven pas opnemen in de database als
er een contract is opgesteld, hoort er bij iedere klant minstens n
contract.
Bij een contract hoort n type voortuig. Bij een bepaald type
voertuig kunnen we nul, n of meer contracten vinden.
a.3. Bij de onderdelen d, e en f kan sprake zijn van nog niet genoemde
attributen. Voeg deze (indien van toepassing) toe aan de betref-
fende tabellen.
Bij vraag d.1 is sprake van automatische incasso. Dit moeten we
toevoegen aan de tabellen. Het gegeven moet worden toegevoegd
aan de tabel CONTRACT om het mogelijk te maken dat een klant
o.b.v. contractnummer o.b.v. klantnummer
o.b.v. merk + type
Betaling Contract Klant
Voertuig
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
420
per contract bepaalt of hij wel of niet via automatische incasso wil
betalen. We krijgen dus uiteindelijk:
CONTRACT (contractnummer, klantnummer, merk, type,
ingangsdatum, beindigingdatum, verzekering,
aut incasso)
BETALING (contractnummer, betaaldatum, betaald bedrag)
KLANT (klantnummer, naam, adres, postcode, plaats,
telefoonnummer, geboortedatum)
VOERTUIG (merk, type , prijs per maand)
b. Technisch ontwerp
b.1. Ontwerp de tabellen met behulp van Access. Zorg ervoor dat
bij vreemde sleutels alleen uit de bijbehorende sleutelwaarde kan
worden gekozen door gebruik te maken van een combobox (zie
hoofdstuk 5). Neem in de kolom Beschrijving een korte omschrij-
ving op.
De ontworpen tabellen kun je terugvinden in database TWEEWIEL-
CENTRUM. Deze database is te vinden op de cd-rom die bij het
boek is geleverd. Een afdruk van de ontworpen tabellen is weer-
gegeven in de guren C.3 tot en met C.6
Figuur C.4
Figuur C.5
Figuur C.3
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
421
b.2. Leg tussen de tabellen alle bestaande relaties en dwing daarbij de
controle op referentile integriteit af.
De relaties zoals weergegeven in het ERD zijn ook opgenomen in
de database TWEEWIELCENTRUM. Een afdruk is te vinden in
guur C.7
c. Opbouwen tabellen
c.1. Vul de bestanden met gegevens. Zorg ervoor dat de inhoud van de
tabellen een rele afspiegeling van de werkelijkheid is, zonder je
te verliezen in het invoeren van een eindeloze reeks van gegevens.
Zorg er ook voor dat alle hierna opgenomen opgaven kunnen wor-
den uitgevoerd en getest.
De inhoud van de tabellen kan worden teruggevonden in de data-
base TWEEWIELCENTRUM. Voor de overzichtelijkheid is de
inhoud van de tabellen ook hier weergegeven in de guren C.8 tot
en met C.11.
Figuur C.6
Figuur C.7
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
422
contract- klant- merk type ingangs- beindigings- verzekering aut incasso
nummer nummer datum datum
1 6 Asprilla Exclusiv 13-3-2002 Ja Ja
2 4 Garvin Luxe 13-3-2002 Nee Nee
3 9 Asprilla Exclusiv 16-5-2002 Nee Ja
4 3 Vespa GHT 31-5-2002 Ja Ja
5 2 Asprilla Rimi 1-6-2002 Nee Nee
6 1 Garvin Modio 1-6-2002 1-9-2002 Nee Nee
7 1 Vespa Pronto 1-9-2002 Nee Nee
8 5 Garvin Luxe 13-10-2002 Ja Ja
9 7 Vespa GHT 24-1-2003 Ja Ja
10 8 Garvin Luxe 26-1-2002 26-3-2003 Nee Ja
11 4 Asprilla Rimi 3-1-2003 Ja Ja
12 8 Vespa Pronto 26-3-2003 Nee Nee
Figuur C.8
contractnummer betaaldatum betaald bedrag
2 1-4-2002 C 9,00
1 1-4-2002 C 16,00
1 1-5-2002 C 23,40
2 1-5-2002 C 12,50
3 1-6-2002 C 13,00
1 1-6-2002 C 23,40
5 1-7-2002 C 32,00
4 1-7-2002 C 18,00
6 1-7-2002 C 13,75
3 1-7-2002 C 13,00
1 1-7-2002 C 23,40
2 1-7-2002 C 25,00
4 1-8-2002 C 18,00
3 1-8-2002 C 13,00
5 1-8-2002 C 32,00
6 1-8-2002 C 13,75
1 1-8-2002 C 23,40
4 1-9-2002 C 18,00
6 1-9-2002 C 13,75
2 1-9-2002 C 25,00
3 1-9-2002 C 13,00
5 1-9-2002 C 32,00
1 1-9-2002 C 23,40
5 1-10-2002 C 32,00
7 1-10-2002 C 22,50
1 1-10-2002 C 23,40
2 1-10-2002 C 12,50
3 1-10-2002 C 13,00
4 1-10-2002 C 9,00
1 1-11-2002 C 23,40
zie vervolg
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
423
8 1-11-2002 C 5,00
7 1-11-2002 C 22,50
3 1-11-2002 C 13,00
4 1-11-2002 C 9,00
5 1-11-2002 C 32,00
2 1-11-2002 C 12,50
8 1-12-2002 C 12,50
2 1-12-2002 C 12,50
5 1-12-2002 C 32,00
4 1-12-2002 C 36,00
3 1-12-2002 C 13,00
1 1-12-2002 C 23,40
7 1-12-2002 C 22,50
7 1-1-2003 C 22,50
5 1-1-2003 C 32,00
3 1-1-2003 C 13,00
2 1-1-2003 C 12,50
8 1-1-2003 C 12,50
4 1-1-2003 C 18,00
1 1-1-2003 C 23,40
8 1-2-2003 C 12,50
4 1-2-2003 C 18,00
9 1-2-2003 C 6,00
7 1-2-2003 C 22,50
5 1-2-2003 C 25,00
10 1-2-2003 C 3,50
11 1-2-2003 C 26,00
1 1-2-2003 C 23,40
3 1-2-2003 C 13,00
11 1-3-2003 C 28,80
10 1-3-2003 C 12,50
9 1-3-2003 C 18,00
8 1-3-2003 C 12,50
1 1-3-2003 C 23,40
5 1-3-2003 C 25,00
7 1-3-2003 C 22,50
3 1-3-2003 C 13,00
contractnummer betaaldatum betaald bedrag
Figuur C.9
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
424
c.2. Maak een invoerformulier waarmee in n van de tabellen, n
waarbij geen sprake is van een vreemde sleutel, gegevens kunnen
worden ingevoerd. Zorg ervoor dat dit formulier netjes, overzich-
telijk en uitnodigend is.
Er is voor gekozen dit formulier te ontwerpen voor de tabel
KLANT. Voor het ontwerp is gebruikgemaakt van de wizard.
Een afdruk van het formulier is weergegeven in guur C.12
en kan in de database worden teruggevonden onder de naam
KLANTINVOER.
Figuur C.10
klant- naam adres postcode plaats telefoon- geboorte-
nummer nummer datum
1 Jansen, Jan Kerkstraat 2 7607 BS Almelo 0546753796 1-3-1982
2 Walters, Wouter Merelstraat 13 7605 BG Almelo 0546758869 27-12-1981
3 Verploeg, Koen Oranjestraat 164 7461 DK Rijssen 0548442943 31-3-1982
4 Wit, Erica de Almeloseweg 182 7614 LB Mariaparochie 0546433839 15-11-1982
5 Boer, Koen de Eikenlaan 10 7461 XS Rijssen 0548499303 28-3-1979
6 Gerets, Monique 1e lageveldsweg 2 7641 RM Wierden 0546933302 3-12-1981
7 Gerets, Jannie 1e lageveldsweg 2 7641 RM Wierden 0546933302 3-12-1981
8 Hoofd, Eric Hofstraat 13 7607 AB Almelo 0546749941 26-12-1982
9 Mens, Hans Ravelstraat 42 7604 HZ Almelo 0546747732 18-11-1981
merk type prijs per maand
Asprilla Exclusiv C 26,00
Asprilla GT C 29,00
Asprilla Rimi C 32,00
Garvin Luxe C 12,50
Garvin Modio C 13,75
Vespa GHT C 20,00
Vespa Pronto C 22,50
Figuur C.11
Figuur C.12
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
425
d. Opvragen gegevens
d.1. Verzorg een query waarmee alle klantgegevens worden gepresen-
teerd van klanten die per automatische incasso betalen. Op vol-
gorde van postcode.
De query is opgeslagen onder de naam Aut-incasso. Figuur C.13
bevat een afdruk van het ontwerpscherm. Figuur C.14 toont de
gegenereerde uitvoer.
d.2. Verzorg een query waarmee een overzicht wordt verkregen met
daarop per leasecontract het merk, type, prijs per maand en de
naam en de woonplaats van de klant. Het overzicht moet liggen
op volgorde van woonplaats. Bij gelijke woonplaats moet worden
doorgesorteerd (oplopend) op merk.
De query is opgeslagen onder de naam MerkperPlaats. Figuur C.15
bevat een afdruk van het ontwerpscherm. Figuur C.16 toont de
gegenereerde uitvoer.
Figuur C.13
Figuur C.14
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
426
d.3. Hoeveel leasecontracten zijn er in 2002 afgesloten, die nog steeds
doorlopen en waarbij ook direct de verzekering via ons is afgeslo-
ten?
De query is opgeslagen onder de naam Aantal2002Verzekering.
Figuur C.17 bevat een afdruk van het ontwerpscherm. Figuur C.18
bevat de gegenereerde uitvoer.
Figuur C.15
Figuur C.16
Figuur C.17
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
427
d.4. Verzorg per plaats het totale aantal afgesloten en nu nog lopende
leasecontracten. Toon het overzicht op volgorde van plaatsnaam.
Om dit probleem op te lossen is er eerst een query ontworpen die
een overzicht geeft van de lopende contracten. Deze query is
opgeslagen onder de naam LopendeContracten. Figuur C.19 bevat
een afdruk van het ontwerpscherm. Figuur C.20 bevat de gegener-
eerde uitvoer.
Hierna is de uitvoer van de vorige query, met dus alleen de lopende
contracten, gebruikt om per plaats het aantal contracten te bepalen.
Deze query is opgeslagen onder de naam AantalContractenPer-
Plaats. Figuur C.21 bevat een afdruk van het ontwerpscherm.
Figuur C.22 bevat de gegenereerde uitvoer.
Figuur C.18
Figuur C.19
Figuur C.20
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
428
d.5. Verzorg een query waarmee per contract het totaal aan betaalde
bedragen wordt getoond. Laat ook het aantal betalingen en de
naam van de klant tonen. Het overzicht moet liggen op volgorde
van dalend totaalbedrag.
De query is opgeslagen onder de naam TotaalPerContract. Figuur
C.23 bevat een afdruk van het ontwerpscherm. Figuur C.24 bevat
de gegenereerde uitvoer.
Figuur C.21
Figuur C.22
Figuur C.23
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
429
e. Manipuleren gegevens
e.1. Verzorg een query waarmee het bedrag per maand wordt aan-
gepast. Leasebedragen boven de 20, moeten met 2% worden
verhoogd. Alle andere moeten met 3% worden verhoogd. Maak
voordat je dit test een kopie van de database!
De query is opgeslagen onder de naam VerhoogMaandbedragen.
Figuur C.25 bevat een afdruk van het ontwerpscherm. Er is gebrui-
kgemaakt van de IIF-functie om de wijziging tot stand te brengen.
e.2. Verzorg een query waarmee alle contracten, beindigd op of voor
een door de gebruiker op te geven datum, worden verwijderd.
Maak voordat je dit test een kopie van je database!
De query is opgeslagen onder de naam VerwijderBeeindigdeCont
racten. Figuur C.26 bevat een afdruk van het ontwerpscherm. Om
deze query goed te laten verlopen dient de relatie tussen Contract
Figuur C.24
Figuur C.25
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
430
en Betaling te zijn ingesteld op Gerelateerde records trapsgewijs
verwijderen. Hierdoor zullen ook de betalingen van de betrokken
contracten worden verwijderd!
f. Rapporten
f.1. Verzorg een rapport waarmee guur C.2 kan worden gegenereerd.
Het rapport is opgeslagen onder de naam Prijslijst. Figuur C.27
bevat een afdruk van het ontwerpscherm. Figuur C.28 bevat de
gegenereerde uitvoer.
Figuur C.26
Figuur C.27
Copyright 2007 Academic Service
C Een grote, uitgewerkte opdracht
431
f.2. Verzorg een rapport waarmee guur C.1 kan worden gegenereerd,
nadat het nummer van het betreffende contract is ingevoerd. Tip:
maak een exibele query.
Om dit rapport te kunnen maken is eerst een query ontworpen
waarbij alle benodigde gegevens worden gegenereerd. Er is bij de
bouw van de query voor gezorgd dat eerst om een contractnummer
wordt gevraagd. De gegevens van het bijbehorende contract wor-
den vervolgens gegenereerd. Deze query is opgeslagen onder de
naam BetalingenPerContract.
Vervolgens is op basis van deze query het rapport opgemaakt.
Het rapport is opgeslagen onder de naam OverzichtPerContract.
Figuur C.29 bevat een afdruk van het ontwerpscherm. Figuur C.30
bevat de gegenereerde uitvoer.
Figuur C.28
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
432
Figuur C.29
Figuur C.30
Copyright 2007 Academic Service
433
Index
Symbolen
&-teken 256
A
achtergrondkleur 255
actiekolom 248
afbeeldingen 151
afdrukken 88
afhankelijk kader 152
Algemeen 405
alias 356
Alleen lijst 163
AND 347
applicatie 5, 271
argumenten 248
ASC 359
attribuut 26, 36, 70
attribuutwaarde 36
AVG 361
B
Back Color 255
Backup 123
besturingselementnaam 263
BETWEEN 348
bewerken 407
bijeenhouden 223
bij geen gegevens 320
bij klikken 268
bij openen 269
bij opmaken 314
bijschrift 221, 398
bij sluiten 300
Border Style 222
breedte 284
C
Caption 221
Check Box 145
Combo Box 156
Command Button 180
Common Expressions 312
conceptueel datamodel 14
Conditions 264
constante gegevens 25
constantentabel 273
ControlTip Text 184
converteren 7
COUNT 361
D
database 9
aanmaken 71
openen 351
selecteren 77
database-administrator 14
datadictionary 60
datamodel 14
DataPageSize 208
datumaanduiding 348
DELETE FROM 385
derde normaalvorm 33
DESC 359
detail 215
DISTINCT 350
DividingLines 280
draaigraeken 192
draaitabellen 185
dubbele repeterende groep 47, 52
duplicaten verbergen 216
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
434
E
eerste normaalvorm 28
elementaire gegevens 25
Enabled 168
entiteit 36
entiteit-occurence 36
Entiteit-Relatie-Diagram 36
ExpandedByDefault 208
Expression Builder 260
F
exibele query 226
Font Size 281
Font Weight 222
Fore Color 311
foreign key 38
formaat modus 154
kader niet vullen 154
kader vullen 154
uitsnede 154
formulier(en) 145
autoformulier 135
gebruiken 140
wizard 137
formulierkiezer 170
formulierkoptekst 280
formuliervoettekst 282
FROM 346
functie
Choose() 310
IIf() 292
Switch() 310
functioneel datamodel 14
G
gangbare expressies 312
gebeurtenis 268
gegeven 2
manipuleren 416, 429
opvragen 415, 425
gegevensanalyse 20
gegevensbank 9
gegevensblad 409
gegevenstructuur 7
groepeerinterval 223
groeperen 364
groeperen op 223
groepskoptekst 223
groepsvak 149
groepsvoettekst 223
GROUP BY 364
Group Footer 223
Group Header 223
Group Interval 223
Group On 223
H
handje met vijf vingers 293
handje met wijsvinger 293
HAVING 365
Height 284
Hide Duplicates 216
homoniemen 58
hoofdformulier 165
hoogte 284
I
identity integrity 343
IIF 115
IN 349
inconsistent 5
indexeren 399
informatie 2
informatie-analyse 20
informatiebehoefte 20
ingeschakeld 168, 294
inner join 322, 381
INSERT INTO 384
integreren 59
integriteit 2
invoermasker 394
IS NULL 349
Copyright 2007 Academic Service
I ndex 435
J
join 355
joineigenschappen 108
K
kandidaat-sleutels 27
Keep Together 223
keuzelijsten 156
met invoervak 156
zonder invoervak 156
klassieke bestandsorganisatie 9
knopinfo 184
kolombreedte 86
kolommen 342
vastzetten 88
verbergen 87
verplaatsen 87
koptekst 362
L
label 280
left join 381
left outer-join 322
lengte nul toegestaan 399
lettertype 85
lijn 222
LIKE 349
LimitToList 163
Line 222
List Box 157
Locked 168
logisch ontwerp 414, 416
M
macro
AlleMacrosStoppen 320
Berichtvenster 249
CancelEvent 320
FilterToepassen 250
FormulierOpenen 258
GebeurtenisAnnuleren 320
GoToControle 263
MacroStoppen 267
Maximaliseren 249
NaarBesturingselementGaan 263
OpenForm 258
OpenReport 298
RapportOpenen 298
SetValue 258
Sluiten 250
StopAllMacros 320
StopMacro 267
TabelOpenen 248
VorigFormaat 250
WaardeInstellen 258
macrogroep 257
macronaam 248
Macro Name 248
macrostap 252
Main Switchboard 331
MAX 361
Mde-bestand 339
meerdere tabellen 355
menustructuur 275
metagegevens 62
MIN 361
Min.- en max.-knop 280
minimaliteit-eis 343
Min Max Buttons 280
modaal 257
modaalvenster 257
Modal 257
N
naam 290
Name 290
navigatieknoppen 279
NavigationButtons 279
NewRowOrCol 326
niet-afhankelijk kader 152
nieuwe rij of kolom 326
normaliseren 23
Copyright 2007 Academic Service
Databaseontwikkeling 4 Access 2003
436
notatiewijze 389
nulde normaalvorm 23
O
OLE-objecten 151
On Open 269
ontwerpweergave 351
opbouwen tabellen 415
opbouwfunctie voor expressies 260
opdrachtknoppen 180
opmaak 85
opstarten 337
opties voor groeperen 228
opties voor totalen 239
OR 347
ORDER BY 359
outer join 381
P
Page Footer 215
Page Index 179
Pages 311
pagina 311
pagina-index 179
paginakoptekst 215
paginavoettekst 215
primaire sleutel 343
procesgegevens 26
programma 271
Q
query
bijwerk~ 119
gecorreleerd 379
groepeer~ 116
selectie~ 100, 112
verwijder~ 120
R
randbreedte 281
randstijl 222
rapporten 211, 416, 430
afdrukken 134
autorapport 124
etiketten 131
verwijzingen 259
wizard 126
rapportkoptekst 214
rapportvoettekst 215
record 70
~kiezers 279
~locking 16
lteren 81
sorteren 81
toevoegen 80
vervangen 83
verwijderen 81
wijzigen 80
zoeken 82
recordbegrenzingslijnen 280
RecordSelectors 279
redundantie 5
referential integrity 343
referentile integriteit 90
afdwingen 92
rekenkundige bewerkingen 361
rekenveld 185
relaties 90
toepassen 94
toevoegen 91
verwijderen 94
relationele database 13
repeterende groep 26
Report Footer 215
right join 381
right outer join 322
rijen 342
rijhoogte 86
runtime versie 339
S
schakelbordbeheer 330
schakelborden 329
schuifbalken 279
Copyright 2007 Academic Service
I ndex 437
ScrollBars 279
SELECT 346
selectievakje 145
Single Step 252
Size Mode 154
Clip 154
Zoom 154
sleutelattribuut 27
sleutelveld 76
speciale joins 380
SQL 341
standaardwaarde 398
starten 251
subformulier 165
subformulier/subrapport 176
subquerys 370
SUM 361
Switchboard Manager 330
switchboards 329
synoniemen 59
systeemmenu 257
T
tabbesturingselement 175
tabbladen 174
tabel 4, 342
aanmaken 73
aanpassen 79
selecteren 78
tabellen/querys 410
Tab Stop 182
tabstop 182
tabvolgorde 295
technisch ontwerp 415, 420
tekengewicht 222
tekengrootte 281
tekstuitlijning 225
Text Align 225
toepassing 271
toetsenbord 408
Toggle Button 147
trapsgewijs bijwerken 92
trapsgewijs verwijderen 92
tweede normaalvorm 31
U
uitvoeren 352
Unbound Object Frame 152
UNC 202
unieke records 116
unieke waarden 116
UNION 385
UPDATE 385
V
validatieregel 398
validatietekst 399
VBA-code 269
veld 70
veldlengte 388
vereist 399
vergrendeld 168, 295
view 14
Visual Basic for Applications 269
volgorde 359
voorbeeldopgave 413
voorgrondkleur 311
voorwaarden 264
vreemde sleutel 38, 343
W
wachtwoord 395
weergave 403
werking tabtoets 286
WHERE 346
WHERE-voorwaarde 250
Where Condition 250
wisselknop 147
wizard opzoeken 157
wizards voor besturingselementen 149
Z
zoeken 407
Copyright 2007 Academic Service

You might also like