1 TABELLEN 1.

1 Tabel-record-veld-database: creatie
1.1.1 Elementaire begrippen: tabel-record-veld-database In een schooladministratie heeft men een steekkaartenbak met per leerling één steekkaart met gegevens. Willen we de leerlingengegevens met de computer verwerken dan maken we van de steekkaartenbak een tabel. De gegevens van één leerling noemen we dan een record. Op een steekkaart komen verschillende items voor als naam, voornaam, adres, postnummer, enz... Deze items noemen we een veld. De adresgegevens van de leerlingen zullen we bewaren in een 'adressen'-tabel. De afwezigheden stockeren we in een 'afwezigheden'-tabel, betalingen in een 'betalingen'-tabel, enz... Al deze tabellen samen bewaren we in één leerlingendatabase met als naam leerling.mdb. Volgende tabel vergelijkt de terminologie bij een manuele en een geautomatiseerde informatieverwerking. manueel geautomatiseerd

een steekkaartenbak één steekkaart een item van een steekkaart

een tabel een record een veld

1.1.2. Creatie van database en tabellen • De database leerling.mdb

Prakticum Access ® - © MIG 2000

p. 1 van 64

Kies bij het opstarten van access voor nieuwe database maken op basis van een lege database. Geef als bestandsnaam leerling.mdb en druk maken. • De tabel tblAdressen Selecteer de tabellenfolder en druk nieuw. Kies ontwerpweergave. Op het scherm verschijnt het invoerscherm voor het aanmaken van tabellen.

Een leerlingensteekkaart op een manuele manier aangemaakt zou er als volgt kunnen uitzien:

STEEKKAART van familienaam: adres: postnummer: geslacht (M of V): betaald Wat resulteert in volgende velden: Prakticum Access ® - © MIG 2000 p. 2 van 64 gemeente: geboortedatum: inschrijvingsgeld voornaam:

veldnaam familienaam voornaam adres postnummer gemeente geslacht geboortedatum inschrijvingsgeld betaald

gegevenstype tekst tekst tekst tekst tekst tekst datum/tijd ja/neen

veldlengte 30 20 35 10 30 1

tips: Bij creatie van tabellen zorgt men dat:
• • • Alleen velden voorkomen die werkelijk nodig zijn. Het is overbodig in een artikelbestand een veld waarde te creëren als men het aantal en de eenheidsprijs in een veld bewaard. Gegevens slecht éénmaal moeten ingevoerd worden. Door te werken met verschillende tabellen en relaties kan men zorgen dat bij adresgegevens het postnummer volstaat in plaats van postnummer en gemeente. De tabelstructuur achteraf niet meer moet gewijzigd worden. Een nieuw artikel mag niet betekenen dat de tabelstructuur moet aangepast worden.

1.2 Toevoegen, wijzigen, verwijderen, afdrukken 1.2.1 Toevoegen in een tabel Een tabel openen voor invoer kan op verschillende manieren: • Dubbelklik op de naam in de tabellenfolder. • Selecteer de naam en klik op de rechter muisknop. Zo krijgt men het snelmenu en kiest men openen. • Selecteer de naam en klik op de openen-knop. Een geopende tabel verschijnt als een gegevensblad, te vergelijken met een excelwerkblad met rijen en kolommen. Elk veld verschijnt als kolomtitel. Een rij staat voor een record. Als voorbeeld een lege geopende tblAdressen-tabel

In elke cel of invulvak kan men het passend gegeven invoeren

Bemerk: • Met de return- of tab-toets verplaatst men de cursor naar een volgende veld. Na het Prakticum Access ® - © MIG 2000 p. 3 van 64

laatste veld wordt een nieuwe record gecreëerd. De recordkiezer is het vakje links van de record waarop u klikt om de volledige record te selecteren.

Met een van een volgende symbolen in de recordkiezer wordt de toestand van de huidige record in een gegevensblad weergegeven. Symbool Betekenis Dit is de huidige record die in deze toestand is opgeslagen. U bent deze record aan het bewerken, wijzigingen zijn nog niet opgeslagen. Dit is een nieuwe record waarin u gegevens kunt invoeren.

Onderaan het gegevensblad bevinden zich de navigatieknoppen. Deze maken het mogelijk naar de eerste, laatste, vorige, volgende of nieuwe record te gaan. Daarnaast bestaat de mogelijkheid het recordnummer in te voeren. De volgende afbeelding toont de knoppen. Zoek welke knoppen welke bewerking uitvoeren. Maak zo nodig gebruik van de help.

• • •

Met de verticale en horizontale schuifbalken kan men in alle richtingen doorgeen het gegevensblad scrollen. -knop van de werkbalk kan men een nieuwe record toevoegen. Met de Door het tabelvenster te sluiten wordt de volledige tabel bewaard. Tussentijds opslaan kan met de -knop van de werkbalk.

1.2.2 Wijzigen in een tabel • • De inhoud van een tabel wijzigen kan door de cel te wissen of gewoon te overschrijven. Zoeken van specifieke gegevens kan met de -knop van de werkbalk. Na invoer van het op te zoeken woord kan men de manier van zoeken bepalen o.a. begin van veld, volledige veld, gedeelte van veld, de zoekrichting, onderscheid tussen kleine letters en hoofdletters, enz... Ook door gegevens te sorteren kan men snel specifieke waarden terugvinden. Met de -knoppen kan men respectievelijk oplopend en aflopend sorteren. Het volstaat één of meerdere kolommen te selecteren en daarna de sorteerknop aan te slaan. Eén kolom selecteert men door de kolomnaam te klikken. Voor meerdere kolommen gebruikt men de windowsmethode klik/SHIFT-klik. Door geselecteerde kolommen te slepen kan men de volgorde wijzigen. Tenslotte kan men een reeks criteria op een tabel toepassen , zodat alleen de records die aan de criteria voldoen te zien zijn. Men spreekt van een filter. Microsoft Access kent Prakticum Access ® - © MIG 2000 p. 4 van 64

verschillende soorten filters o.a. selectiefilter en formulierfilter. • een selectiefilter Als u in het gegevensblad eenvoudig de waarde kunt vinden en selecteren die de gefilterde records moeten bevatten, gebruikt u selectiefilter. Voor alle adressen met postnummer 8000 uit de tblAdressen-tabel selecteert men ergens een cel waar 8000 voorkomt en drukt men de selectiefilterknop op de werkbalk. De filter kan men verwijderen met de -knop. een formulierfilter Als u de waarden die u zoekt wilt kiezen uit een lijst zonder door alle records in een gegevensblad te schuiven of als u meerdere criteria tegelijk wilt opgeven, gebruikt u formulierfilter. Klik op de formulierfilterknop op de werkbalk om over te schakelen naar het formulierfiltervenster. Klik in het veld waarin u het criteria wil plaatsen. Voer de gewenste criteria in door de te zoeken waarde uit de lijst te selecteren of door de waarde te typen. Eventueel kan men gebruik maken van de jokers * en ?. Plaatst men een voorwaarde in verschillende velden dan wordt een logische EN toegepast. Met de OF-knop onderaan het venster kan men een logische OFfunctie op een veld toepassen. Met de -knop (filter toepassen) laat men de filter uitvoeren. De -knop (raster wissen) verwijdert men de voorwaarden uit het formulierfiltervenster. een invoerfilter Als u de exacte veldwaarde wilt opgeven die de gefilterde records moeten bevatten, klikt u met de rechtermuisknop in het veld en typt u de waarde in het vak filteren op in het snelmenu. Als u bijvoorbeeld alle records zoekt met postnummer 8000 , klikt u met de rechtermuisknop in het veld postnummer. Vervolgens typt u 8000 in het vak filteren op. - Druk op ENTER om de filter toe te passen en het snelmenu te sluiten. - Druk op TAB als u de filter wilt toepassen en het snelmenu wilt openhouden (zodat u aanvullende criteria kunt opgeven voor het veld). Voer nieuwe criteria in en druk vervolgens opnieuw op TAB. Herhaal deze handeling totdat u de gewenste records hebt. Als u een tabel opslaat, wordt de filter opgeslagen. Als u de filter nodig hebt, kunt u dit opnieuw toepassen als u de tabel de volgende keer opent.

1.2.3 wissen in een tabel • • De waarde van een veld kan men wissen door de inhoud te slepen en de delete-toets aan te slaan. Een record kan men wissen door de inhoud te selecteren met de recordkiezer en de delete-toets of de -knop (record verwijderen) op de werkbalk aan te slaan. Vooraleer de record definitief gewist wordt, krijgt men een bevestigingsvenster waarmee men de wisprocedure eventueel kan onderbreken.

Prakticum Access ® - © MIG 2000

p. 5 van 64

Uiteraard kan men door verschillende records te kiezen, meerdere records in één deletebewerking wissen. Daarbij maakt men gebruik van de windowsmethode klik/SHIFT-klik voor een groep of via het menu, bewerken, alle records selecteren.

1.2.4 afdrukken van een tabel • • afdrukken-knop en de De inhoud van een tabel kan men afdrukken met de afdrukvoorbeeld-knop van de werkbalk. Kiest men vanuit het menu, bestand, pagina-instelling dan kunnen marges, afdrukstand, papierformaat en printer ingesteld worden.

1.4 Primaire sleutel en indexen
1.4.1 Aanmaken, wijzigen en verwijderen van een primaire sleutel De kracht van een relationele-databasesysteem zoals Microsoft Access ligt in de mogelijkheid van het programma om informatie uit verschillende tabellen te zoeken en bijeen te brengen door middel van query's, formulieren, en rapporten. Om dit mogelijk te maken moet elke tabel een veld of combinatie van velden bevatten die voor elke record in een tabel uniek is. Deze informatie wordt de primaire sleutel van een tabel genoemd. Als er eenmaal een primaire sleutel voor een tabel is ingesteld, staat Microsoft Access niet toe dat er dubbele waarden of nullwaarden in de primaire sleutelvelden worden ingevoerd. In Microsoft Access kunnen drie soorten primaire sleutels worden ingesteld: een autoNummering-veld, een enkel veld (enkelvoudige primaire sleutel) en meerdere velden (meervoudige primaire sleutel). werkwijze 1. Selecteer een tabel in de ontwerpweergave bijvoorbeeld tbladressen 2. Selecteer het veld of de velden die u als primaire sleutel wilt definiëren. • Als u één veld wilt selecteren, klikt u op de rijkiezer van het gewenste veld. • Als u meerdere velden wilt selecteren, houdt u CTRL ingedrukt terwijl u op de rijkiezer van elk veld klikt.

Prakticum Access ® - © MIG 2000

p. 6 van 64

3. Klik op primaire sleutel instellen op de werkbalk. In de rijkiezer wordt voor elk veld een sleutel afgebeeld. Opmerkingen • De primaire sleutel identificeert op een unieke wijze een record. • De tabelgegevens worden automatisch gesorteerd op de primaire sleutel weergegeven. • Het is mogelijk om als primaire sleutel een veld op te geven dat al gegevens bevat. Wanneer u de tabel opslaat, wordt echter een foutbericht weergegeven als het veld dubbele waarden of null-waarden bevat. Als dit foutbericht wordt weergegeven, hebt u drie mogelijkheden. Ten eerste kunt u het veld met deze waarden verwijderen of wijzigen. Ten tweede kunt u een ander veld kiezen als primaire sleutel. Tenslotte kunt u een autoNummering-veld toevoegen en als primaire sleutel instellen. • De volgorde van de velden kan bij een meervoudige primaire sleutel belangrijk zijn. De velden worden bij een meervoudige primaire sleutel ingedeeld op basis van de volgorde in de tabelontwerpweergave. Om de volgorde te wijzigen, geeft u volgens de voorgaande procedure eerst de velden op voor de primaire sleutel en klikt u vervolgens op indexen op de werkbalk om het venster indexen af te beelden. U kunt in dit venster de veldnamen voor de index met de naam primaire sleutel opnieuw rangschikken door te slepen in de rijkiezer.

Een primaire sleutel kan met op 2 manieren verwijderen. • Kies de tabel in ontwerpweergave, selecteer met de rijkiezer de primaire sleutel • en klik op primaire sleutel instellen op de werkbalk. Klik u op indexen op de werkbalk om het venster indexen af te beelden. Selecteer met de rijkiezer primarykey en sla de delete-toets aan.

1.4.2 Aanmaken, wijzigen en verwijderen van indexen

Prakticum Access ® - © MIG 2000

p. 7 van 64

Een index zorgt ervoor dat records sneller kunnen worden gevonden en gesorteerd. Indexen in een tabel worden in Microsoft Access gebruikt zoals u een index in een boek gebruikt: bij het opzoeken van gegevens wordt de locatie van de gegevens in de index opgezocht. U kunt indexen maken op basis van een enkel veld of van meerdere velden. Met een meervoudige index kunt u onderscheid maken tussen records die dezelfde waarden hebben in het eerste veld. Bemerk echter het volgende: • Het mdb-bestand wordt aanzienlijk groter. • De gegevensinvoer gaat trager, aangezien bij invoer van een record alle indexen moeten worden aangepast. Bepalen welke velden moeten worden geïndexeerd U wilt waarschijnlijk velden indexeren die u vaak zoekt, velden die u wilt sorteren of velden die u in query's wilt koppelen aan velden in andere tabellen. De primaire sleutel van een tabel wordt automatisch geïndexeerd. Een veld van het gegevenstype Memo, Hyperlink of OLE-object kan niet worden geïndexeerd. Voor andere velden moet u een index overwegen als alle volgende criteria van toepassing zijn: • Het gegevenstype van het veld is Tekst, Numeriek, Valuta of Datum/tijd. • U gaat waarschijnlijk zoeken naar de opgeslagen waarden in het veld. • U gaat waarschijnlijk de waarden in het veld sorteren. • U gaat waarschijnlijk veel verschillende waarden in het veld opslaan. Als een groot deel van de waarden in het veld identiek is, wordt het zoeken niet sneller uitgevoerd als u een index gebruikt. Enkelvoudige indexen • Open een tabel in de ontwerpweergave bijvoorbeeld tbladressen. • Selecteer in de rijkiezer het te indexeren veld en kies de geïndexeerd-eigenschap bijvoorbeeld postnummer. • Selecteer vervolgens Ja (duplicaten OK) indien meerdere records in dit veld eenzelfde waarde mogen hebben of Ja (geen duplicaten) als je niet wilt dat twee records in dit veld dezelfde gegevens bevatten.

Prakticum Access ® - © MIG 2000

p. 8 van 64

Meervoudige indexen Als u waarschijnlijk vaak zult zoeken in of sorteren op twee of meer velden tegelijk, kunt u voor deze combinatie van velden een index maken. Als u een tabel volgens een meervoudige index sorteert, wordt eerst op het eerste gedefinieerde indexveld gesorteerd. Als er records zijn met identieke waarden in het eerste veld, wordt vervolgens op het tweede gedefinieerde indexveld gesorteerd, enz. • Open een tabel in de ontwerpweergave bijvoorbeeld tbladressen. • Klik op indexen op de werkbalk. • Typ in de eerste lege rij in de kolom indexnaam de naam van de index. U kunt de naam van de index op een van de indexvelden baseren of een andere geschikte naam gebruiken bijvoorbeeld zoeknaam. • Klik op de keuzelijst in de kolom veldnaam en selecteer het eerste veld van de index bijvoorbeeld familienaam. • Selecteer in de volgende rij in de kolom veldnaam het tweede veld van de index bijvoorbeeld voornaam. (Laat de kolom indexnaam in die rij leeg.). Herhaal deze stap totdat u alle velden die u in de index wilt opnemen, hebt geselecteerd. U kunt maximaal 10 velden gebruiken.

Indexen bewerken • Open de tabel in de ontwerpweergave. • Klik op indexen op de werkbalk. • Breng de gewenste wijzigingen aan in de indexen of de eigenschappen van de indexen. Als u een index wilt verwijderen, verwijdert u in het indexvenster de rij waarop de index staat. Hierdoor wordt alleen de index verwijderd en niet het veld zelf.

1.5 Koppelen, importeren en exporteren
U kunt in Microsoft Access tabelgegevens vanuit andere Microsoft Access-databases (versie 1.x, 2.0, 95 en 97) importeren, evenals gegevens uit andere programma's met andere bestandsindelingen, zoals Microsoft Excel, dBASE, Microsoft FoxPro of Paradox. U kunt ook Prakticum Access ® - © MIG 2000 p. 9 van 64

HTML-lijsten en -tabellen (alleen-lezen) importeren of koppelen. Deze tabellen en lijsten kunnen zich op uw lokale computer, op een netwerkserver of op een Internetserver bevinden. Als u gegevens importeert, wordt er in een nieuwe tabel in de Microsoft Access-database een kopie van de informatie gemaakt. De brontabel of het bronbestand wordt hierdoor niet gewijzigd. Als u gegevens koppelt, kunt u de gegevens in de externe gegevensbron lezen en in de meeste gevallen bijwerken zonder deze te importeren. De bestandsindeling van de externe gegevensbron wordt hierdoor niet gewijzigd. U kunt het bestand dus nog steeds gebruiken in het programma waarin het oorspronkelijk is gemaakt, en u kunt gegevens toevoegen, verwijderen of bewerken met behulp van Microsoft Access. In Microsoft Access worden gekoppelde tabellen en tabellen die in de actieve database zijn opgeslagen, met verschillende pictogrammen weergegeven. Als u het pictogram van een gekoppelde tabel verwijdert, wordt alleen de koppeling naar de tabel verwijderd en niet de externe tabel zelf. In het volgende voorbeeld is klant een geïmporteerde tabel terwijl klant1 een gekoppelde dBasebestand is.

1.5.1 Koppelen en importeren van tabellen

Selecteer in het vak bestandstype het soort bestand dat geïmporteerd moet worden en/of voer in het vak bestandsnaam de naam van het op te importeren bestand in, daarbij kan men eventueel gebruik maken van jokers. Met de nu zoeken-knop wordt de huidige actieve directory (A-schijf) Prakticum Access ® - © MIG 2000 p. 10 van 64

onderzocht. Met het tekst of eigenschappen-vak kan men zoeken op bestandsinhoud. Bemerk dat men woordgroepen tussen aanhalingstekens moet plaatsen. Het laatst gewijzigd-vak laat opzoeken op datum toe. Met de zoekcriteria-knop kan men geavanceerde zoekprocedures uitvoeren. Eénmaal het bestand gevonden volstaat na selectie de importeren-knop aan te slaan. Afhankelijk van het bestandstype kunnen een aantal parameters ingevoerd worden. Een overzicht van de voornaamste bestandstypes. • import.mdb als voorbeeld van een access MDB

Het volstaat de accessobjecten te selecteren en de OK-knop aan te slaan bijvoorbeeld klant. Als u importeert en u alleen de definities van de geselecteerde tabellen wilt importeren en niet de tabelgegevens, klikt u op Opties en vervolgens op Alleen definitie in de kolom Tabellen importeren. Als u importeert en de relaties, aangepaste werkbalken of import-/exportspecificaties wilt opnemen, klikt u op Opties en selecteert u vervolgens in de kolom Importeren de elementen die u wilt importeren. • klant.dbf als dBase IV-bestand Hier volstaat het dbf-bestand te selecteren en de importeren-knop aan te slaan. Extra parameters zijn hier niet nodig. klant.txt als tekstbestand met scheidingstekens tussen de velden "ACKE";"Jan";"Roeselarestraat 1";"8688";"Zonnebeke" "DELANGHE";"Pol";"Kustlaan 137";"8380";"Zeebrugge" "DEWAELE";"Rony";"Akkerstraat 56";"8310";"Sint-Kruis" "DESOETE";"Rik";"Karnavalstraat 39";"8370";"Blankenberge" "DEWULF";"Ilse";"Gistelsteenweg 68";"8202";"Jabbeke" "NEUVROEN";"Koen";"Gidsenlaan 82";"9990";"Maldegem" "TIMMERMAN";"Sandra";"Torhoutsesteenweg 130";"8210";"Zedelgem" "VANCOILLIE";"Nico";"Mandellaan 290";"8800";"Roeselare" "DERYCKERE";"Karen";"Grote Weg 290";"9500";"Geraardsbergen" "VERHEECKE";"Kris";"Pontweg 45";"9880";"Aalter" De inhoud van elk veld bevindt zich tussen aanhalingstekens en elk veld wordt gescheiden door een puntkomma. Prakticum Access ® - © MIG 2000 p. 11 van 64

De "Wizard tekst importeren" toont een aantal voorbeeldgegevens uit het bestand. Met de geavanceerd-knop kan men eventueel andere veld- en tekstscheidingstekens invoeren. • klant1.txt als tekstbestand met een vaste lengte voor elk veld

In de "Wizard tekst importeren" kiest men de optie vaste breedte. Hier kan men met de geadvanceerd-knop in het beeldinformatievenster naam, gegevenstype en vooral begin - en eindpositie van elk veld ingeven. Bovendien kunnen de import/exportspecificaties met de opslaan als-knop onder een bepaalde naam bewaard worden. Zo vermijdt men dat bij een volgende importprocedure alle parameters opnieuw ingevoerd moeten worden. Een klik op de specificaties-knop volstaat de vorige instellingen te selecteren. Na het importeren verschijnen de bestanden als tabellen in de tabellenfolder met een speciaal pictogram. 1.5.2 Exporteren van tabellen U kunt gegevens uit een tabel naar verschillende andere formaten exporteren zodat ze bruikbaar zijn voor andere programma's. Bovendien kunnen database-objecten naar een andere Microsoft Access-database geëxporteerd worden. Dit heeft hetzelfde effect als wanneer u objecten van de ene naar de andere database kopieert en plakt. Via exporteren kunt u ook gegevens van een recentere accessversie als 95 en 97 gaan gebruiken in een oudere versie als 1.x en 2.0.. • Selecteer het object dat u wilt exporteren en klik vervolgens op Opslaan als/Exporteren in het menu Bestand. • Klik in het dialoogvenster Opslaan als op In extern bestand of database en klik op OK.

Klik op de pijl rechts van het vak Opslaan in en selecteer het station of de map waarnaar het object moet geëxporteerd worden.

Prakticum Access ® - © MIG 2000

p. 12 van 64

• •

Kies het bestandstype in het Bestand opslaan als-venster en naam in de vak Bestandsnaam. Klik daarna de exporteren-toets. Als u een tabel naar een andere MDB exporteert, dan geeft u in het exporteren-venster op of zowel de definitie als de gegevens van de tabel of uitsluitend de definitie geëxporteerd moeten worden. Klik op OK om het object te exporteren.

tips:
U kunt slechts één object tegelijk exporteren. Als u verschillende objecten tegelijk wilt exporteren, open dan de database waarnaar u de objecten wilt exporteren en importeer daarin de gewenste objecten. Denk eraan dat bij het exporteren naar andere programma's gegevens een andere vorm kunnen annemen of zelfs informatie kan verloren gaan door de beperkingen van bepaalde dataformaten. Sommige programma's laten voor de veldnaam een beperkt aantal karakters toe of kennen geen autonummeringsveld.

Prakticum Access ® - © MIG 2000

p. 13 van 64

2. QUERY’s 2.1 Soorten query's
2.1.1 Wat is een query Een query is in principe een vraagstelling. We zoeken selectief databasegegevens op of gaan deze bewerken. We zouden met een query bijvoorbeeld het volgende kunnen doen: • Snel een naam en adres van een personeelslid in de tabel opzoeken; • brieven en etiketten voor onze personeelsleden in een bepaalde woonplaats afdrukken; • een overzicht laten afdrukken van alleen die personeelsleden die een bepaald aantal jaren in dienst zijn. Men onderscheidt twee groepen query’s: • selectiequery’s: selectieve opvragingen; • actiequery’s: selectief gegevens bewerken,wijzigen,wissen,... Binnen elke groep zijn er verschillende soorten: 1. Selectiequery’s: gewone selectiequery’s parameter query’s totaalquery’s kruistabelquery’s 2. Actiequery’s: tabelmaakquery’s verwijderquery’s toevoegquery’s bijwerkquery’s Selectiequery’s helpen ons bij het weergeven van gegevens met één of meerdere tabellen als basis, maar veranderen de gegevens in de basistabel(len) niet. Actiequery’s daarentegen veranderen de tabelgegevens wel. 2.1.2 Selectiequery's 2.1.2.1 Gewone selectiequery’s • Een selectiequery maken en uitvoeren Kies uit de lijst van de database-objecten de knop Query’s. Kies de knop "Nieuw". Vervolgens verkrijg je het volgende dialoogvenster:

Prakticum Access ® - © MIG 2000

p. 14 van 64

Net zoals bij het maken van een nieuwe tabel kan je ook hier weer kiezen tussen "begeleid" ontwerpen (verschillende Query Wizard’s) of "zelfstandig" werken (Ontwerpweergave). Wij opteren voor de keuze "ontwerpweergave". Elke query is gebaseerd op één — of meerdere — tabellen. Logisch dus dat je eerst het volgende venster verkrijgt:

Kies de tabel en klik op toevoegen. Je kan ook dubbelklikken. Let op: je mag enkel maar die tabellen aan het ontwerpvenster van je selectiequery toekennen die je ook effectief voor het selecteren van de gegevens nodig hebt. Indien je bijvoorbeeld alleen een lijst van de klassen wenst, mag je maar enkel de tabel tblKlassen toevoegen aan het onwerpvenster. Wens je daarentegen de titels van de boeken per klas dan moet je zowel de tabel tblKlassen, tblBoeken als tblBoekenperklas aan het ontwerpvenster van je selectiequery toevoegen. Selecteer in dit geval met <CTRL><ENTER>. Het query- venster is horizontaal verdeeld in twee delen. Bovenaan vind je de tabellen, onderaan de query-informatie. De grenslijnen kun je met de muiscursor verplaatsen. Zo vergroot of verklein je de delen. • Kiezen van de velden Selecteer bij de bestanden de velden die je in de query wenst op te nemen. Met <SHIFT> en/of <CTRL> in te drukken is het mogelijk meerdere velden ineens te selecteren. Sleep de geselecteerde velden naar het query-venster (het onderste gedeelte), naar de rij van de veldnamen. De veldnamen van de geselecteerde velden komen in het query-venster in de Prakticum Access ® - © MIG 2000 p. 15 van 64

volgorde van de selectie (één per één selecteren) of in de volgorde van de bestandsstructuur (meerdere velden ineens selecteren). Deze volgorde is wel van belang als je later wilt sorteren. Naast slepen van de velden kun je ook dubbelklikken op de velden of kiezen uit de lijstknop in de rij VELD. Wens je alle velden op te nemen kies dan voor het sterretje uit de lijst van veldnamen (slepen of dubbelklikken). In het query-venster zie je dan alleen bestandsnaam.* . Bij het uitvoeren zie je alle velden. Het query-venster geeft maximaal 5 zichtbare kolommen weer. Heb je meer velden dan kun je deze altijd terugvinden via de onderste schuifbalk. • Verplaatsen van velden Selecteer het veld dat je wenst te verplaatsen en sleep het in de rij van veldnamen naar de kolom waar je het veld wil hebben. Vanaf deze kolom schuiven alle velden naar rechts op zodat de gevraagde kolom vrij komt voor een nieuw veld. • Een query bewaren Je bewaart de query via Bestand, opslaan. Je kan ook gewoon de query sluiten, dan wordt automatisch gevraagd om op te slaan. • Een query uitvoeren Nadat je een aantal velden in de query toegevoegd hebt (minstens één) kun je het resultaat opvragen via de knop gegevensblad of via starten .

Tips:
• Het is nu duidelijk dat een query geen nieuwe tabel is maar een programma dat bij het opvragen telkens opnieuw uitgevoerd wordt. De gegevens worden afgedrukt zoals bij het raadplegen van bestandsgegevens. Je kan de gegevens (kolombreedte, verlaatsen,...) dan ook op dezelfde manier bewerken zoals in een bestand. De naam van een query mag niet gelijk zijn aan de naam van een tabel, anders wordt de tabel overschreven.

• sorteren van gegevens In de rij "Sorteervolgorde" bepaal je de volgorde waarin de gegevens voorkomen. Sorteer je op meerdere velden, dan heeft de sortering in een linkse kolom altijd prioriteit op de sortering in een kolom rechts ervan. Om de sorteervolgorde te wijzigen, kan je eventueel kolommen van plaats veranderen. Oefening We wensen bijvoorbeeld bij het begin van het schooljaar een lijst van alle klassen, met de onderwijsvorm, de klasomschrijving, de klascode en het aantal leerlingen per klas, te starten vanaf het eerste jaar. De oplossing is als volgt:

Prakticum Access ® - © MIG 2000

p. 16 van 64

• enkelvoudige voorwaarden Om voorwaarden te formuleren kan je deze bij het juiste veld in de criteria-zone typen. Willen we alleen de gegevens van het BSO dan lossen we dit op als volgt:

Voor het opstellen van voorwaarden kunnen we beschikken over relationele operatoren. = < > <= >= ...is gelijk aan... ... is kleiner dan... of komt alfabetisch voor... ...is groter dan ... of komt alfabetisch na... ...is kleiner of gelijk aan... of komt alfabetisch voor of is gelijk aan... ...is groter of gelijk aan... of komt alfabetisch na of is gelijk aan...

Bij numerieke velden worden alleen de cijfers en het decimaal teken getypt, geen formaatsymbolen zoals BEF of het scheidingsteken van de duizendtallen.

tips:
Wil je alle velden zien die aan een bepaalde voorwaarde voldoen: • Kies dan voor bestandsnaam.* • Voeg het veld met de voorwaarde toe • Zet weergave af bij het veld met de voorwaarde • samengestelde voorwaarden De criteria-zone bestaat uit meerdere rijen, dit voor het invoeren van samengestelde voorwaarden. Bij samengestelde voorwaarden spelen de logische operatoren EN en OF een belangrijke rol. EN betekent dat alle voorwaarden moeten voldaan zijn, terwijl OF betekent dat slechts één van de voorwaarden voldaan moet zijn, om het record te mogen afdrukken. Prakticum Access ® - © MIG 2000 p. 17 van 64

Alle voorwaarden die je in dezelfde rij van de criteria-zone schrijft worden automatisch met de logische operator EN gekoppeld. Voorwaarden die je in verschillende rijen van de criteria-zone schrijft worden met de logische operator OF gekoppeld. Zoek je alle klassen uit het BSO waar er meer dan 10 leerlingen zijn ( EN) dan los je dit als volgt op:

Zoek je echter ofwel de klassen BSO OF de klassen waarvan er meer dan 10 leerlingen zijn, dan is de oplossing zo:

• gebruik van wildcards in de voorwaarden Net zoals in DOS zijn in ACCESS de jokers het ? en het *. ? vervangt één willekeurig karakter. 2.1.2.2 Parameterquery’s Als je regelmatig dezelfde selectiequery uitvoert maar elke keer de bijbehorende criteria wijzigt, kun je tijd besparen door een parameterquery te maken. Het voordeel van een parameterquery is dat je niet telkens het query-ontwerpraster hoeft te wijzigen om andere criteria op te geven. Nadat de query wordt gestart, worden de opgegeven criteria automatisch gevraagd. Je kunt meerdere parameters opgeven voor een veld. Als je een parameterquery uitvoert, word je gevraagd criteria in te voeren in het dialoogvenster <Parameterwaarde invoeren>. Een parameterquery maken en uitvoeren We wensen het adres te weten van een bepaalde uitgeverij. Om deze query op te lossen gaan we als volgt te werk: - Maak een selectiequery . Sleep in de query-ontwerpweergave de velden die je wilt gebruiken uit de lijst met velden naar het query-ontwerpraster. - Typ in de rij "Criteria" onder elk veld dat je als parameter wilt gebruiken, een aanwijzing tussen vierkante haakjes (vb. [Welke gemeente?]).

Prakticum Access ® - © MIG 2000

p. 18 van 64

Deze aanwijzing wordt automatisch weergegeven wanneer de query wordt uitgevoerd. De tekst van de aanwijzing mag niet dezelfde zijn als de veldnaam, maar mag deze veldnaam wel bevatten. Wens je ook gegevens op te vragen met jokers dan moet je voor de vraag het woordje zoals typen (vb. zoals[ Welke uitgeverij?]. Zo kun je bijvoorbeeld alle uitgeverijen die starten met van* terugvinden. Wens je het de gebruiker nog gemakkelijker te maken dan stel je de volgende vraag: zoals [welke uitgeverij?]&*. In dit geval is het voldoende als je het eerste karakter van de uitgeverij kent. (&=ampersand en wordt gebruikt om tekstgegevens aan elkaar te plakken). Oefening We wensen het adres te vinden van een uitgeverij.

2.1.2.3 Totaalquery’s • Een totaalquery maken en uitvoeren Een totaalquery gebruik je om op gegevens uit je tabel één van de volgende bewerkingen uit te voeren: Group By Som Gem Min Max Aantal Stdev Var Eerste laatste Expressie Where groepeert de gegevens per categorie berekent het totaal (enkel bij numerieke velden en valutavelden) berekent het gemiddelde (enkel bij numerieke velden en valutavelden) haalt de laagste waarde uit een reeks waarden haalt de hoogste waarde uit een reeks waarden telt het aantal geselecteerde records berekent de standaardafwijking van een aantal waarden (voor statistiek) berekent de variantie van een aantal waarden (voor statistiek) haalt de waarde uit het eerste record in een query haalt de waarde uit het laatste record in een query opgeven expressie waarmee berekening wordt uitgevoerd geeft criterium op waaraan de gegevens getoetst worden

Om van een selectiequery een totaalquery te kunnen maken, moet een totaalrij aan het queryontwerp toegevoegd worden. Dit kan op verschillende manieren gebeuren: - via <Beeld> <Totalen> via de knop <Totalen> via het snelmenu (rechter muisknop)

We willen weten hoeveel uitgeverijen er in elke gemeente zijn.

Prakticum Access ® - © MIG 2000

p. 19 van 64

Hiervoor moeten we groeperen per gemeente en binnen elke groep dan het aantal records tellen: • kolomtitels wijzigen Als we met een totaalquery werken krijgen we bovenaan de kolom een titel weer die het gevraagde totaal weerspiegelt. Toch past deze niet altijd. Om nu een eigen titel toe te voegen moeten we gewoon bovenaan in de veldkolom de gewenste tekst toevoegen met daarna een dubbele punt. 2.1.2.4 Een kruistabelquery maken en uitvoeren Een kruistabelquery berekent resultaten aan de hand van minimum twee veranderlijke gegevens (variabelen). De waarden van die variabelen worden in tabelvorm uitgezet waarbij de eerste variabele als kolomkop uitgezet wordt en de overige variabelen als rijkoppen. Het resultaat ziet er algemeen uit als volgt: KOLOMKOP Variabele 2 Variabele 2 Variabele 2 Variabele 3 Variabele 3 Variabele 3 Variabele 1 Berekende waarde Berekende waarde Berekende waarde Variabele 1 Berekende waarde Berekende waarde Berekende waarde

We gaan als volgt te werk: • Maak een selectiequery en voeg de nodige velden in het ontwerpvenster toe. • Verander van selectiequery naar kruistabelquery via het menu <Query> <Kruistabelquery> of via de knop <Querytype>. Aan het queryontwerp zijn nu twee rijen toegevoegd. Een rij "Totaal" (zie totaalquery’s hiervoor) en een rij "kruistabel". • Bij een kruistabel heb je minimum drie velden nodig: − een kolomkop (veld met de eerste variabele) − een rijkop (veld met de tweede variabele) − een waarde (veld dat als basis van de berekening dient) eventueel kun je meerdere rijkoppen in de kruistabel opnemen (bijvoorbeeld een rij die de totalen van elke rij telt). Pas op: Je kunt altijd maar 1 veld als "kolomkop" en 1 veld als "Waarde" instellen. In de rij "Kruistabel" plaats je deze waarden bij de juiste velden. • In de rij "Totaal" kies je: − Voor de kolomkop en de eerste rijkop: Group By (groeperen per kolomkop en rijkop) − De bewerking die je op de waarde wilt uitvoeren (in ons voorbeeld is dit <aantal> — het aantal records tellen die aan de voorwaarde voldoen). Oefening We willen weten hoeveel boeken er hetzij te koop hetzij te huur zijn per vakgebied. Oplossing:

Prakticum Access ® - © MIG 2000

p. 20 van 64

2.1.3 Action query's Hiervoor besproken query’s helpen ons bij het weergeven en berekenen van gegevens met één of meerdere tabellen als basis, maar veranderen de gegevens in de basistabel(len) niet. Actiequery’s daarentegen veranderen de tabelgegevens wel.

Tips:
Maak dus altijd eerst een kopie van de tabel die je met een actiequery wilt veranderen. De wijzigingen zijn immers definitief. Het is dan ook veiliger eerst de query uit te testen via gegevensblad en pas indien de wijzigingen goed zijn, uit te voeren via .

2.1.3.1 Verwijderquery's Met een verwijderquery verwijder je een aantal volledige records uit een tabel. Het is niet mogelijk om alleen veldinhouden te wissen. Bij het uitvoeren van een verwijderquery worden de records onmiddellijk gewist en deze kunnen niet meer hersteld worden tenzij je ze eerst in een ander bestand bewaard hebt. • Een verwijderquery maken en uitvoeren Maak een selectiequery en verander deze query in een verwijderquery (via de knop "Querytype)

Je verkrijgt vervolgens in het ontwerpvenster een nieuwe rij "verwijderen". Breng in het queryraster de selectiecriteria aan waaraan de te verwijderen records moeten voldoen. Klik op op de werkbalk om te bekijken welke records er zullen verwijderd worden). Breng eventueel nog wijzigingen aan. Klik op ontwerpweergave van de query. op de werkbalk om terug te gaan naar de

Klik op op de werkbalk om de records effectief uit de tabel te verwijderen. Je verkrijgt de volgende waarschuwing:

Prakticum Access ® - © MIG 2000

p. 21 van 64

Klik op "Ja" als je de records wilt verwijderen. Oefening: Alle boeken wiskunde "Levensecht rekenen" (diverse leergangen ) worden tijdelijk uit de handel gehaald. Verwijder ze uit de tabel.

2.1.3.2 Tabelmaakquery's De tabelmaakquery maakt uit een (gedeelte van een) tabel, een nieuwe, aparte tabel. Met een tabelmaakquery maak je dus een nieuwe tabel waarin je een aantal welbepaalde records uit de actieve tabel kopieert. Dit kan interessant zijn : - als je gegevens wilt exporteren naar een andere database; - als je gegevens wilt wegschrijven in een historiek bestand; - als je een situatie op een bepaalde datum of tijd wilt bewaren om evoluties te volgen; - als je bepaalde bewerkingen vlugger wilt laten verlopen. • Een tabelmaakquery maken en uitvoeren Maak een selectiequery door de tabellen of query's te selecteren met de records die je wilt opnemen in de nieuwe tabel. Neem vervolgens de nodige velden in je selectiequery op. Klik vervolgens op "Tabelmaakquery". Het dialoogvenster <Tabelmaakquery> verschijnt:

Typ in het vak "Tabelnaam" de naam van de tabel die u wilt maken of klik in de lijst op de naam van de tabel die u wilt vervangen. Klik op "Huidige database" als u de nieuwe tabel wilt opnemen in de database die momenteel is geopend. Je kunt ook op "Andere database" klikken en de naam typen van de database waarin je Prakticum Access ® - © MIG 2000 p. 22 van 64

de nieuwe tabel wilt opnemen. Typ indien nodig ook het pad. Klik op "OK". Klik op op de werkbalk als je de nieuwe tabel eerst wilt bekijken (vooraleer ze effectief aan te maken). Breng eventueel nog wijzigingen aan. Klik op op de werkbalk om terug te gaan naar de ontwerpweergave van de query. Klik op verkrijgt de volgende waarschuwing: op de werkbalk om de nieuwe tabel te maken. Je

Indien je op "Ja" klikt, wordt de tabel aangemaakt in onze databank. Dit kun je controleren door in het databasevenster te klikken op het tabblad "Tabellen". Eén van je tabellen is nu de nieuwe tabel. Opmerkingen: Met CTRL+BREAK kunt je de uitvoering van een actiequery stoppen. Nadat je een tabelmaakquery hebt uitgevoerd, kun je naar de ontwerpweergave van de nieuwe tabel gaan en een primaire sleutel en tabeleigenschappen instellen. De gegevens in de nieuwe tabel nemen niet automatisch de veldeigenschappen van de oorspronkelijke tabel over. In elk geval mag de query niet dezelfde naam hebben als de tabel. Het volgende dialoogvenster verschijnt bij het toekennen van eenzelfde naam:

Oefening: Maak een nieuwe tabel aan waarin je alle te huren boeken opneemt. Oplossing: We maken een gewone selectiequery waarin we alle velden opnemen nl.tblBoeken.*. We voegen het veld Huren_of_Kopen toe, maar zorgen ervoor dat "Weergeven" af staat. Daarna voeren we als Criteria "H" in. We We testen even via gegevensblad. We maken nu een tabelmaakquery en geven als naam tblHuren. We voeren uit via starten. Om te zien of de oefening gelukt is gaan we kijken bij tabellen. tblHuren werd aan de lijst toegevoegd.

Prakticum Access ® - © MIG 2000

p. 23 van 64

2.1.3.3 Toevoegquery's Je gebruikt een toevoegquery om records uit je actieve tabel aan een andere tabel toe te voegen. Een toevoegquery maken en uitvoeren Het spreekt vanzelf dat de structuur van beide tabellen zoveel mogelijk met elkaar moet overeenkomen. Enkel gegevens uit velden die in beide bestanden voorkomen en van hetzelfde gegevenstype zijn worden aan de tabel toegevoegd. Als bij tekstvelden de veldlengte in het bestand waaraan je records wenst toe te voegen kleiner is dan de veldlengte van de toe te voegen records in de actieve tabel, dan zal het toevoegen uitgevoerd worden, maar de eventuele karakters die niet meer in het veld passen gaan verloren. Om een toevoegquery te maken kan je als volgt te werk gaan: Maak een selectiequery en selecteer de tabel waaruit je gegevens wil halen. Verander deze query in een toevoegquery (via de knop "Querytype). Het volgende dialoogvenster verschijnt: •

Bij "Tabelnaam" vul je de naam in van de tabel waaraan je de gegevens wil toevoegen. Dit doe je het best door de naam van de tabel te selecteren uit het lijstje dat je verkrijgt door op het pijltje te klikken. Selecteer "Huidige database" omdat we de records willen toevoegen aan een tabel uit dezelfde databank. Met de keuze "Andere database" kunnen we records toevoegen aan een tabel uit een andere databank — je moet dan wel de naam (en eventueel het pad) van deze andere databank bij "Bestandsnaam" intypen. In je query-ontwerpvenster verkrijg je een nieuwe rij "Toevoegen aan". Selecteer de velden waarvan je de gegevens wil opnemen in de andere tabel. Met de asterisk (*) geef je aan dat alle velden moeten toegevoegd worden. Je kan natuurlijk ook veld per veld opgeven als je niet alle velden wil toevoegen. Via selectiecriteria beperk je het toevoegen tot een bepaalde groep records. Klik op op de werkbalk om te bekijken welke records er zullen toegevoegd worden. Breng eventueel nog wijzigingen aan. Klik op op de werkbalk om terug te gaan naar de

ontwerpweergave van de query. Klik op op de werkbalk om de records uit de tabel effectief aan de andere tabel toe te voegen. Je verkrijgt de volgende waarschuwing:

Prakticum Access ® - © MIG 2000

p. 24 van 64

Opmerkingen 1. Als de veldnamen in beide tabellen gelijk zijn, zullen deze automatisch in het query-raster in de "Toevoegen aan" rij ingevuld worden. 2. Indien beide tabellen verschillende veldnamen bevatten, dan kan je in het query-raster in de rij "Toevoegen aan" de corresponderende velden selecteren. 3. Als je de velden met een asterisk (*) selecteert zullen alleen de gegevens van de velden met dezelfde veldnamen toegevoegd worden. 4. Als je de velden met een asterisk (*) selecteert en nog bijkomende velden selecteert om voorwaarde te definiëren, dan mag in de "Toevoegen aan" rij niets staan, anders krijg je een foutmelding. . Bij het toevoegen van records aan een bestaande tabel moet je rekening houden met de primaire sleutel van deze tabel. 5. Bij het uitvoeren van de toevoegquery worden de geselecteerde velden en records aan het opgegeven bestand toegevoegd. In je actieve bestand verandert echter niets.

2.1.3.4 Bijwerkquery's Een bijwerkquery gebruiken we om groepen gegevens te wijzigen in een tabel. Een bijwerkquery maak je als volgt: − Activeer het query ontwerpvenster. − Selecteer de tabel waarin je de gegevens wenst te wijzigen. − Verander deze query in een bijwerkquery . Een rij met tabelnamen en een rij "Wijzigen in" verschijnt. In deze laatste rij moet je de wijzigingen typen. Selecteer de velden waarin je de wijzigingen wil aanbrengen, en ook nog de velden waarop je een voorwaarde wil definiëren. Typ de wijzigingen (formule) in de rij "Wijzigen in" bij de juiste velden. Oefening: We willen in tblBoeken de eenheidsprijs met 10% verhogen. Het query-ontwerpvenster ziet er als volgt uit:

Klik op op de werkbalk om te bekijken hoeveel records er zullen bijgewerkt worden. De "bijwerking" zelf kun je op deze manier niet zien . Klik op op de werkbalk om terug te gaan naar Prakticum Access ® - © MIG 2000 p. 25 van 64

de ontwerpweergave van de query. Klik op starten om de records uit de tabel effectief bij te werken. Je krijgt de waarschuwing dat er x-aantal recods bijgewerkt zullen worden. Je kunt nooit van vooraf het resultaat van een bijwerkquery bekijken. In het gegevensblad zie je namelijk enkel maar WELKE records er zullen bijgewerkt worden, niet HOE (of in welke nieuwe waarde) ze zullen bijgewerkt worden. Daarenboven worden de "oude" cijfers overschreven,zodat je de juistheid zelf moeilijk kan gaan controleren. Bijvoorbeeld: als je een prijsverhoging van 10% doorvoert kun je nog moeilijk gaan controleren ofdat de verhoging correct is, indien de oorspronkelijke gegevens niet meer aanwezig zijn. Daarom is het beter om voor bijwerkquery's de volgende procedure te volgen: Maak een nieuwe tabel door middel van een tabelmaakquery; plaats in deze tabel de primaire sleutel en zowel de oude als de nieuwe waarde. Deze nieuwe waarde (Bv. "Nieuwe_prijs") maak je a.d.h.v. een "Berekend veld". Op deze manier kun je goed de gebruikte expressie controleren en blijf je ook over de oude waarden beschikken. Bekijk het gegevensblad van deze query en indien het resultaat correct is mag je deze query uitvoeren, zodat ook effectief een nieuwe tabel aangemaakt wordt.

3. Relaties 3.1 Normalisatie
Een Access-database kan je definiëren als de geïnformatiseerde realisatie van een toepassing of een project. Een toepassing of project is een globale doelstelling binnen een organisatie. Zo kan je het maken van rapporten binnen een school, het voorraadbeheer in een bedrijf en het bijhouden van voetbaluitslagen met de klassering toepassingen of projecten noemen. De basis van een database wordt uiteraard gevormd door gegevens. In Access zitten deze in tabellen. Deze kunnen echter op velerlei manieren gecombineerd en/of bewerkt worden in query's, formulieren en rapporten. Tabellen zijn namelijk meestal geen geïsoleerde gegevensverzamelingen. In een database hou je uiteraard de gegevens bij die je nodig hebt. Nu komt het er op aan ook niet méér te doen dan dat. Zo vermijd je best om één gegeven op meerdere plaatsen te stockeren of gegevens te bewaren die van andere kunnen afgeleid worden. Om tot een efficiënte opbouw van een database te komen wordt uitgegaan van bestaande documenten. Stel je dus in ons geval voor dat het beheer der handboeken op school (= onze toepassing) moet geautomatiseerd worden. Je verzamelt de bestaande documenten in verband met het handboekenbeheer: boekenlijsten per klas, bestellijsten per uitgeverij, voorraadfiches, etcetera. Elk van deze documenten moet vervolgens genormaliseerd worden. Dit betekent dat je vastlegt hoe de gegevens van het document in een database zullen worden bijgehouden. Dit hoef je niet met de natte vinger te doen. Je kan de regels van CODD volgen. Met de regels van CODD normaliseer je een document. Dit wil zeggen: je legt vast in welke tabel(len) de gegevens van het document terechtkomen. De gegevens van één document kunnen inderdaad in meerdere tabellen opgeslagen zijn! Tussen deze tabellen bestaan dan relaties. Nadat alle documenten genormaliseerd zijn moeten de bekomen tabellen geïntegreerd worden. Dit betekent gewoon dat je alle overlappingen moet wegwerken.

Prakticum Access ® - © MIG 2000

p. 26 van 64

Vooraf enkele definities: Elementaire gegevens zijn gegevens die niet meer kunnen of moeten gesplitst worden. Naargelang de informatiebehoefte kan bijvoorbeeld de naam van een persoon gesplitst worden in voornaam en familienaam of als één gegeven behandeld worden. Procesgegevens zijn deze die uit andere kunnen afgeleid worden. Bijvoorbeeld de prijs inclusief BTW van een product wanneer de prijs exclusief en de BTW-voet gegeven zijn. Herhalende deelverzamelingen: items die meerdere waarden kunnen krijgen op een document zijn herhalende deelverzamelingen of 'repeating groups'. Functionele afhankelijkheid: een gegeven is functioneel afhankelijk van een ander wanneer je door toepassing van een functie op het eerste steeds bij het andere uitkomt. Het begrip 'functie' komt uit de wiskunde en betekent zoveel als 'een bepaalde relatievorm'. Enkele voorbeelden:
functie afhankelijk gegeven

90°
5 BI 9000 België

sinus
klastitularis woonplaats hoofdstad

1
A. De Schrijver Gent Brussel

Regels van CODD
Inventariseer alle elementaire gegevens. Verwijder alle procesgegevens. Kies een primaire sleutel. Zonder herhalende deelverzamelingen af en voeg er de primaire sleutel van de originele gegeensreeks bij. Deze items worden in de lijst met elementaire gegevens reeds met een sterretje aangeduid. Deze moeten nu een afzonderlijke reeks vormen omdat uiteraard niet vast te leggen is hoe dikwijls deze gegevens op hetzelfde document herhaald zullen worden. In termen van tabelstructuur uitgedrukt: je weet niet hoeveel velden je moet aanmaken. De punten c en d moeten herhaald worden tot er geen herhalende groepen meer zijn. De gegevens staan dan in de eerste normaalvorm. • Verwijder de items die slechts afhankelijk zijn van een deel van de sleutel en plaats ze samen met het deel van de sleutel waarvan ze afhankelijk zijn in een nieuwe gegevensreeks. Pas daarop de regels toe vanaf de eerste normaalvorm. De gegevens staan dan in de tweede normaalvorm. • Verwijder de attributen die afhankelijk zijn van andere niet-sleutel attributen en plaats ze samen met het deel van het attribuut waarvan ze afhankelijk zijn in een nieuwe gegevenstreeks. Pas daarop de regels toe vanaf de eerste normaalvorm. De gegevens staan dan in de derde normaalvorm. De gegevensreeksen krijgen nu een naam en overal waar een herhalende groep of een functioneel afhankelijk gegeven is afgeplitst worden relaties gelegd. Opmerking: Soms zijn er meerdere mogelijkheden om een primaire sleutel te kiezen. Het verloop van het normalisatieproces kan dan naargelang de gekozen sleutel verschillen, doch je komt in elk geval bij hetzelfde eindresultaat terecht. Prakticum Access ® - © MIG 2000 p. 27 van 64 a. b. c. d.

3.2 Een-op-veel relaties: Voorbeeld 1
Per uitgeverij wordt een lijst bijgehouden van de boeken die door de school kunnen besteld worden. Deze ziet er als volgt uit:

Het document wordt als volgt genormaliseerd: 1e normaalvorm (1NV) • Inventariseer alle elementaire gegevens naam adres postcode gemeente boeknummer vakcode isbn titel auteur eenh_prijs

* * * * * * • •

Verwijder alle procesgegevens. In ons voorbeeld zijn er geen procesgegevens. Kies een primaire sleutel: de naam van de uitgeverij zou een goede keuze kunnen zijn. Je kan eventueel de uitgeverijen ook een nummer toekennen. In de lijst met elementaire gegevens wordt de primaire sleutel onderstreept. uitgeverijnummer naam adres postcode gemeente boeknummer vakcode isbn titel auteur eenh_prijs

* * * * * * •

Zonder herhalende deelverzamelingen af. Wanneer herhalende deelverzamelingen Prakticum Access ® - © MIG 2000 p. 28 van 64

afgezonderd zijn moet natuurlijk de band met de originele gegevensreeks blijven bestaan. Daarom wordt de primaire sleutel bij de herhalende groep gevoegd. Dit proces moet herhaald worden tot er geen herhalende groepen meer zijn. uitgeverijnummer naam adres postcode gemeente boeknummer uitgeverijnummer vakcode isbn titel auteur eenh_prijs

De gegevens staan nu in de eerste normaalvorm. 2e normaalvorm (2NV) • Indien er geen samengestelde primaire sleutels zijn is hier niets te doen. 3e normaalvorm (3NV) • Het gegeven 'gemeente' is functioneel afhankelijk van het gegeven 'postcode'. 'gemeente' wordt daarom overgebracht naar een nieuwe reeks samen met 'postcode' opnieuw om de band met de originele reeks niet te verliezen. In de nieuwe reeks neem je 'postcode' als primaire sleutel. uitgeverijnummer naam adres postcode postcode gemeente boeknummer uitgeverijnummer vakcode isbn titel auteur eenh_prijs

De gegevens staan nu in de derde normaalvorm.

3.3 Aanmaken relaties in Access
Je kan het resultaat nu in Access implementeren. De gegevensreeksen worden tabellen. Ieder gegeven wordt dus een veld waarvan je bij de creatie van de tabelstructuur de eigenschappen moet instellen (alleszins het gegeventype). Je geeft vervolgens elke tabel een naam. Het resultaat ziet er zo uit: tblUitgeverijen Veldnaam Type uitgeverijnr Auto-num. naam Tekst adres Tekst postcode Tekst tblPostnummers Veldnaam Type postcode Tekst gemeente Tekst tblBoeken Veldnaam boeknummer uitgeverijnr vakcode isbn titel auteur

Type Auto-num. numeriek Tekst Tekst Tekst Tekst

Prakticum Access ® - © MIG 2000

p. 29 van 64

eenh_prijs

numeriek

Op de lijst die je eigenlijk wilde maken staan gegevens die uit de 3 tabellen afkomstig zijn. Het komt er dus op aan om een verbinding tussen deze tabellen aan te leggen. Zo kan dan de gemeente waarin een uitgeverij is gevestigd opgezocht worden aan de hand van het postnummer. Er wordt dan in de tabel 'tblPostnummers' gezocht naar het postnummer dat bij een bepaalde uitgeverij in de tabel 'tblUitgeverijen' staat. De combinatie van een postnummer en een gemeente wordt dus maar één keer opgeslagen in je database. Dit is erg handig wanneer er tikfouten te verbeteren zijn of wanneer een postnummer verandert. De nodige gegevens worden dus 'samengeraapt' om het gewenste document samen te stellen. Zo ver ben je echter nog niet. Eerst de relaties... is de knop om in het relatiescherm te komen. Druk op de rechtermuisknop en kies 'Tabel weergeven'. Selecteer de tabellen waartussen relaties te leggen zijn. In dit voorbeeld dus tblUitgeverijen, tblPostnummers en tblBoeken.

De primaire sleutels zijn vetgedrukt. Je kan de tabellen verplaatsen door te slepen in de titelbalk (zoals een venster in Windows). Je sleept nu het veld 'uitgeverijnr' uit 'tblUitgeverijen' naar het veld uitgeverijnr' uit 'tblBoeken'. Bij het loslaten van de muisknop zie je dit scherm:

Hier geef je een aantal kenmerken van de gelegde relatie op. • De door jou aangeduide velden waartussen de relatie moet gelegd worden zijn reeds ingevuld linksboven in het venster. Je kan desgewenst verbeteringen aanbrengen. Deze velden mogen maar moeten niet dezelfde naam hebben. Ze moeten uiteraard wel van hetzelfde type zijn. Voor numerieke velden moet ook het subtype gelijk zijn! • Linksonder zie je het type relatie. In dit voorbeeld 'één-op-veel' of '1:n'. Dit betekent dat de waarde voor het veld 'Uitgeverijnr' in de tabel 'tblUitgeverijen' slecht éénmaal Prakticum Access ® - © MIG 2000 p. 30 van 64

kan/mag voorkomen terwijl dezelfde waarde in de tabel 'tblBoeken' meermaals kan voorkomen. De tabellen waartussen een relatie wordt gelegd worden 'primaire' (tblUitgeverijen) en 'secundaire' (tblBoeken) tabel genoemd. De tabel aan de `een'-kant van twee gerelateerde tabellen in een één-op-veel-relatie is de primaire tabel. Een primaire tabel moet een primaire sleutel hebben en elke record moet uniek zijn. Dwing steeds referentiële integriteit af ! Hiermee maak je immers gebruik van een bijzonder nuttige mogelijkheid die in Access geboden om aan invoercontrole te doen. 'referre' is een Latijns werkwoord dat o.a. 'verwijzen' kan betekenen. Het voltooid deelwoord ervan is 'relatum'. Zo zie je dat 'refereren' en 'relatie' verwante woorden zijn. Integriteit versta je hier best als correctheid of geldigheid. Door het afdwingen van referentiële integriteit is het onmogelijk om in het gerelateerde veld van de secundaire tabel waarden te gebruiken die in de primaire tabel niet voorkomen. Je kan dus bij het invoeren/wijzigen van boekgegevens niet verwijzen naar een uitgeverij die niet bestaat. Doe je dit toch dan krijg je een passende foutboodschap. 'Gerelateerde velden trapsgewijs verwijderen/bijwerken' betekent dat alle records in de secundaire tabel automatisch verwijderd/gewijzigd worden wanneer in de primaire tabel een record wordt verwijderd of wanneer het gerelateerde veld wordt gewijzigd.

Je klikt op 'Maken' en de relatie wordt visueel voorgesteld zoals hieronder.

Verklaring: • je kan slechts één uitgeverij bijvoorbeeld het nummer 7 geven, doch de school kan meerdere boeken bij deze uitgeverij bestellen. • de zwarte blokjes aan de uiteinden van het relatielijntje geven aan dat voor deze relatie referentiële integriteit is afgedwongen. • het veld in de primaire tabel moet de primaire sleutel zijn of een unieke index. • het veld 'Uitgeverijnr' in 'tblBoeken' (de secundaire tabel) wordt een refererende sleutel genoemd omdat het verwijst naar de primaire sleutel in de primaire tabel.

3.4 Joins
Je kan terugkeren naar het venster met de eigenschappen van de relatie door op het lijntje te dubbelkliken. Je kan dan o.a. het 'jointype' instellen. Wanneer een relatie gelegd wordt tussen twee tabellen kunnen de gegevens uit die tabellen samengebracht worden in een query. Hierop kan je dan een formulier of rapport baseren. De vraag is echter welke records uit die beide tabellen moeten opgenomen worden in de query. Je hebt -toegepast op ons voorbeeld- de volgende mogelijkheden: • inner join: toon enkel die uitgeverijen waarvoor ook boeken ingevoerd zijn Prakticum Access ® - © MIG 2000 p. 31 van 64

• left outer join: toon alle uitgeverijen, ook deze waarvoor géén boeken zijn ingevoerd • right outer join: toon alle boeken, ongeacht het nummer van de uitgeverij Je stelt het join-type in door bij het gewenste nummer te klikken in onderstaand venster. Het standaard jointype is 1 of 'inner join'.

Je maakt nu een query met de tabellen 'tblUitgeverijen' en 'tblBoeken'. Je ziet dat de relatie die je vroeger hebt gelegd hier terug te vinden is. Je kan nu naar believen velden uit beide tabellen in de query opnemen. Bij een relatie van het type 'inner-join' worden enkel die records getoond waarbij in beide tabellen dezelfde waarde wordt gevonden in het veld waarmee de relatie is gelegd. Merk op dat het niet nodig is het relatieveld zelf in de query op te nemen.

Je kan op de hierboven aangeduide wijze het jointype wijzigen. Keuze 2 wordt afgebeeld met een pijltje naar de tabel waaruit enkel de overeenstemmende records zullen genomen worden. Voer je de onderstaande query uit dan zie je dus alle uitgeverijen, ook die waarvoor géén boeken werden ingevoerd.

Prakticum Access ® - © MIG 2000

p. 32 van 64

Jointype 3 ziet er in het ontwerpscherm van de query zo uit:

Met deze query toon je alle boeken, ongeacht of er een uitgeverijnummer is ingevuld dat in de tabel 'tblUitgeverijen' voorkomt. De woorden left en right in 'left-outer-join' en 'right-outer-join' zijn ontleend aan de syntaxis van de SQL-instructies om de bedoelde query's te maken. Het is dus niet zo dat bij een left-outer-join alle records zouden worden opgenomen uit de linker tabel in het queryontwerpscherm. Je kan de tabellen immers plaatsen waar je wil. Een 'left join' geeft alle records weer uit de tabel die in de SQL-instructie links staat, een 'right join' geeft alle records weer uit de tabel die in de SQL-instructie rechts staat. In het queryontwerpscherm is dus niet te zien met welk van de 2 soorten je te maken hebt. Je kan er wel in het venster 'Jointype' lezen welke records geselecteerd zullen worden bij de keuzen 2 of 3 doch zonder de aanduiding left of right. Volgende query's geven dus niet dezelfde records weer indien er losse records zijn. SELECT DISTINCTROW tblBoeken.Titel, tblUitgeverijen.Uitgeverij_benaming FROM tblUitgeverijen LEFT JOIN tblBoeken ON tblUitgeverijen.Uitg_Nr = tblBoeken.Uitg_nr; SELECT DISTINCTROW tblBoeken.Titel, tblUitgeverijen.Uitgeverij_benaming FROM tblBoeken LEFT JOIN tblUitgeverijen ON tblUitgeverijen.Uitg_Nr = tblBoeken.Uitg_nr; Begrijp je dat onze query in het eerste en het derde geval precies dezelfde records oplevert indien vanaf het begin referentiële integriteit werd afgedwongen? Proficiat! Je kan m.b.v. de relatie tussen 'tblUitgeverijen' en 'tblBoeken' reeds achterhalen bij welke uitgeverij een bepaald boek kan besteld worden. Meerbepaald kan je van de uitgeverij de naam, het adres en de postcode terugvinden. Blijft nog de gemeente. Je maakt hiertoe een relatie aan tussen 'tblUitgeverijen' en 'tblPostnummers'. Dwing referentiële integriteit af. Het scherm 'relaties' ziet er dan zo uit:

Prakticum Access ® - © MIG 2000

p. 33 van 64

3.7 Integratie
Je merkt dat je een tabel met gegevens over boeken zou moeten aanmaken. Eens je meerdere documenten hebt genormaliseerd, moet je er op letten geen tweemaal dezelfde gegevens te stockeren. Hier is het dus voldoende de nieuwe velden toe te voegen aan de bestaande tabel 'tblBoeken'. Deze fase wordt de integratie genoemd. Het scherm 'Relaties' ziet er nu zo uit:

Je plaatst de tabellen best zo dat de relatielijntjes mekaar niet kruisen. Dit voor de duidelijkheid.

3.8 Eén-op-één relaties
Het meest voorkomende relatietype is zeker '1:n' of 'één-op-veel'. Een tabel met veel velden per record kan gesplitst worden in 2 tabellen met een één-op-één relatie ertussen bijvoorbeeld wanneer sommige velden veel frequenter gebruikt worden dan andere. De velden die je zelden nodig hebt moeten dan niet steeds meegesleept worden bij het sorteren, indexeren etcetera.

3.9 Permanente - tijdelijke relaties
Relaties aangemaakt in het venster 'Relaties' zijn permanent te noemen omdat ze automatisch gelegd worden bij het maken van query's met de betrokken tabellen. Je kan uiteraard zelf een relatie verwijderen door op de relatielijn te klikken en Delete te drukken. In absolute zin is dus niets (?) permanent. Je kan ook in het ontwerpscherm van een query het jointype van een relatie wijzigen. Het geldt dan alleen voor die query. Ook kan je daar nieuwe relaties definiëren evenwel zonder de mogelijkheid referentiële integriteit af te dwingen. Je zou dit tijdelijke relaties kunnen noemen. Ook wanneer er geen relaties bestaan tussen tabellen worden er automatisch koppelingen gemaakt wanneer je twee tabellen toevoegt aan een query, op voorwaarde dat deze tabellen elk een veld bevatten met hetzelfde of een compatibel gegevenstype, en dat een van de koppelvelden een primaire sleutel is. Je kunt deze automatische koppelingen in- of uitschakelen via Extra, Opties, tabblad Tabellen/query's, selectievakje AutoJoin .

Prakticum Access ® - © MIG 2000

p. 34 van 64

3.10 Wizard tabelanalyse
Via de menukeuze Extra, Analyseren, Tabel kom je bij de wizard Tabelanalyse. Deze zoekt voor jou uit of een tabel kan gesplitst worden om de gegevensopslag efficiënter te maken. Zo worden herhalende deelverzamelingen ontmaskerd en afgezonderd in een tweede tabel zoals de regels van Codd voorschrijven. De wizard stelt soms voor om een tabel te splitsen zonder dat er herhalende deelverzamelingen in voorkomen. Er wordt dan -op jouw verzoek- een query gemaakt die de gegevens uit de oorspronkelijke tabel opnieuw verenigt. De originele tabel blijft bewaard. De naam wordt aangevuld met '_OLD'. In principe ben je nu klaar om een project 'op computer te zetten'. De praktijk is evenwel soms ingewikkelder dan een 'schoolvoorbeeld'. Onthoud echter: 'Ubung macht den Meister'.

4. Formulieren
Het gebruik van formulieren zorgt ervoor dat gegevens uit tabellen en query’s op een aantrekkelijke manier voorgesteld worden en efficiënt te bewerken zijn. Gegevens die je in formulieren invoert of wijzigt komen altijd in een onderliggende tabel terecht..

4.1

Een Wizard-formulier ontwerpen

Met formulier-wizards beschik je over een aantal voorgedefinieerde formulieren, waarop een aantal ontwerp-taken reeds zijn uitgevoerd. Het formulier dat je op deze manier maakt, wordt onmiddellijk gekoppeld aan een welbepaalde groep records.

1. Ontwerp m.b.v. de wizard een formulier in "kolomvorm" waarbij je alle velden van de tabel: tblUitgeverijen in het formulier opneemt. Als opmaakprofiel en titel mag je de keuze behouden die de Wizard je voorstelt. Open tenslotte het formulier met gegevens. We gaan als volgt te werk: Prakticum Access ® - © MIG 2000 p. 35 van 64

Activeer het tabblad "Formulier" in het databasevenster en kies de knop Nieuw. Je verkrijgt het dialoogvenster "Nieuw formulier", waar je in de keuzelijst mag kiezen voor Wizard Formulier. In de keuzelijst met invoervak moet je de tabel (of query) selecteren waarop het formulier moet gebaseerd zijn (in ons voorbeeld: tblUitgeverijen). 2. Klik vervolgens op "OK". Je komt dan in het volgende dialoogvenster.

Je hoeft in een formulier niet alle velden uit een tabel op te nemen. Gebruik de knop > om veld per veld te selecteren of >> om alle velden tegelijk te selecteren. Met de knoppen < en << kan je één of alle velden terug uit de veldlijst voor het formulier weghalen. De velden die in Geselecteerde velden overblijven worden in het formulier opgenomen. Klik op "Volgende" om naar een volgend scherm te gaan.

Prakticum Access ® - © MIG 2000

p. 36 van 64

De keuze In kolomvorm plaatst de velden netjes onder elkaar op het scherm met links telkens de veld-naam (=Label) en ernaast de inhoud van het veld (=Tekstvak). De keuze In tabelvorm plaatst de velden naast elkaar op het scherm. De veldnamen verschijnen als titels boven de veldkolommen. Klik op Volgende om naar een volgend scherm te gaan.

Selecteer hier het opmaak-profiel. Er zijn meerdere keuzes. De Wizard toont je bij elk van de keuzes een voorbeeld. Eénmaal beslist, klik je op Volgende om naar een volgend scherm over te schakelen. In het laatste scherm geven we het formulier een naam ("Invoeruitgeverijen") Klik op Voltooien als je klaar bent. Wanneer we het formulier zelf bekijken merk je op dat de tekstvakken (= de vakken die de inhoud van de velden weergeven) kunnen ingevuld worden. Deze vakken veranderen naar een als we via de recordaanwijzer volgend record gaan. De tekst die voor elk record gelijk blijft zijn de labels. Een label wordt bijvoorbeeld ook gebruikt om een titel aan het formulier toe te voegen. In het formulier naar een volgend veld gaan kan door gebruik te maken van de enter-toets of de Tab-toets of door met de muis in het desbetreffende veld te klikken. Sluit je formulier. Het formulier wordt in je databasevenster bewaard onder de naam "Invoeruitgeverijen". 3. Het formulier kun je nu gebruiken om nieuwe records toe te voegen. Pas op: het formulier houdt rekening met de veldeigenschappen van de tabelstructuur (bijvoorbeeld de standaardwaarde, invoermasker, notatie, validatieregel,...). Als je dus gegevens intikt die niet voldoen aan de veldeigenschappen van het tabel-ontwerp kun je in je formulier nooit naar een ander record vooraleer je de gegevens correct ingevoerd hebt. Prakticum Access ® - © MIG 2000 p. 37 van 64

4. Ga naar een nieuw record in je formulier en voeg deze uitgeverijen toe (via de knop of via <Invoegen> <Records>: Uitg_nr Uitgeverij_benaming Straatnr Postnr Plaats Land Tel_nr Fax_nr Email Rek_nr AutoNummering Easy Computing NV Alsembergsesteenweg 610 1180 Brussel B 023/5258404 023/5256405 Info@easycomputing.com AutoNummering Ced.samsom Kouterveld 14 1831 Diegem B 02/7231111 02/7231050 310-0033540-64

Je kunt een formulier in 3 weergaven bekijken (via de knop formulierweergave ): • ontwerpweergave • formulierweergave • gegevensbladweergave Vanaf het databasevenster (te activeren via de functietoets F11) kom je rechtstreeks in de ontwerpweergave, door het formulier te selecteren en te klikken op de knop Ontwerpen; je komt in de formulierweergave door te klikken op de knop Openen. Bekijk het formulier: frmInvoeruitgeverijen in deze 3 weergaven.

4.2 Zelf een formulier samenstellen: basisprincipes
4.2.1 De verschillende delen van een formulier Nadat we een formulier bekeken hebben zullen we nu zelf een formulier opbouwen. Het maken van een nieuw formulier — op basis van een tabel of een query — start zoals aangegeven in "Een Wizard-formulier" ontwerpen Kies als onderliggende tabel of query: tblBoeken en opteer nu voor Ontwerpweergave i.p.v. Wizard Formulier. Bewaar regelmatig je formulier (naam: frmInvoerboeken) Formulieren worden onderverdeeld in 5 secties: • de formulierkoptekst, die de titel van het formulier bevat; • paginakoptekst; • de detailsectie, die de eigenlijke gegevens bevat; • paginavoettekst; • de formuliervoettekst. De kern van een formulier is de detailsectie: deze is altijd aanwezig. Je kan de detailsectie vergroten/verkleinen door de randen ervan te verslepen in de gewenste richting. Prakticum Access ® - © MIG 2000 p. 38 van 64

De kop- en de voetteksten verkrijg je via het menu Beeld Formulierkoptekst/-voettekst en Beeld paginakoptekst/-voettekst. 4.2.2 4.2.2.1 Besturingselementen in je formulier opnemen Soorten besturingselementen

Formulieren bestaan uit afzonderlijke besturingselementen. Sommige besturingselementen dienen voor de weergave van de informatie in de tabellen (bijvoorbeeld in tblUitgeverijen: de naam van een uitgeverij, wat voor elke record verandert) terwijl andere besturingselementen statische informatie weergeven (bijvoorbeeld de titel van je formulier). Elk besturingselement kun je selecteren door erop te klikken. Elk type besturingselement beschikt ook over een eigen verzameling eigenschappen. (zie verder). Besturingselementen kunnen afhankelijk, niet-afhankelijk of berekend zijn. Afhankelijk besturingselement Een besturingselement dat zijn oorsprong heeft in een bepaalde gegevensverzameling (tabel of query), is een afhankelijk besturingselement. Met zo'n besturingselement kun je velden in de gegevensverzameling weergeven of bijwerken. Voorbeelden hiervan zijn tekstvakken, keuzerondjes, selectievakjes, ... Niet-afhankelijk besturingselement Een besturingselement dat volledig zelfstandig is van een tabel is een nietafhankelijk besturingselement. Dergelijke elementen worden voornamelijk gebruikt om informatie op het formulier weer te geven of om de lay-out van het formulier te verbeteren. Voorbeelden hiervan zijn labels, rechthoeken, lijnen, ... Berekend besturingselement Een besturingselement waarvan de inhoud berekend werd door middel van een expressie (rekenkundige of logische formules) is een berekend besturingselement. 4.2.2.2 Een label toevoegen Met een label kun je beschrijvende tekst toevoegen aan het formulier. Hiermee voeg je bijvoorbeeld een titel, een bijschrift of een korte instructie toe. Een label is altijd niet-afhankelijk. De tekst in het label is voor alle records identiek ("Statisch"). Maak een label met als tekst "Invoer van boeken" in de formulierkoptekst.

De kleine blokjes gebruik je om de tekst-vakken te vergroten of te verkleinen door een klein blokje te slepen. Het groter blokje in de linkerbovenhoek dient om het besturingselement te verplaatsen. Plaats hiervoor de muispointer op het blokje (de muispointer verandert in een hand met een uitgestoken wijsvinger) en sleep het naar een andere plaats.

4.2.2.3 Een tekstvak toevoegen dat gekoppeld is aan een veld in een tabel (= afhankelijk tekstvak).

Prakticum Access ® - © MIG 2000

p. 39 van 64

Om een afhankelijk tekstvak te maken moet je vanaf de beginfase van het formulierontwerp opgeven vanuit welke gegevensverzameling (tabel of query) de velden moeten worden geselecteerd. Hiervoor moet je in het dialoogvenster "Nieuw formulier", de naam opgeven van de tabel of query die als basis dient voor het formulier. Wij hebben reeds als gegevensverzameling tblBoeken gekozen. Klik in de werkbalk op de knop Lijst met velden (of via Beeld Lijst met velden...). Het venster met de veldenlijst verschijnt. Kies het eerste veld (Volgnummer) en sleep het naar de linkerbovenhoek van de detailsectie van het formulier. De positie van het symbool dat aan de muisaanwijzer "hangt" geeft de linkerbovenhoek van het tekstvak aan (niet de label), indien je de muisknop loslaat. Naast het tekstvak wordt automatisch een label toegevoegd, met de naam van het veld of het bijschrift. Probeer vervolgens Vakcode ongeveer op dezelfde hoogte van Volgnummer in de detailsectie van het formulier te plaatsen. Meerdere velden kun je selecteren met de Shift-toets of de Ctrl-toets. Selecteer de overige velden en plaats ze onder Vakcode. Om alle velden te selecteren kun je dubbelklikken op te titelbalk. 4.2.2.4 Een berekend besturingselement toevoegen In een formulier kan je allerlei berekeningen (expressies) opnemen die niet als een veld in de tabel of query opgenomen zijn maar die gewoon in het formulier zelf berekend worden. Hiervoor gebruik je de knop Tekstvak uit je Werkset en je duidt de plaats aan in het formulier waar de berekende waarde moet komen. Een tekstvak krijgt automatisch ook een label mee, dat je kan verplaatsen of verwijderen. Je kan de naam van het label ook veranderen. In het tekstvak verschijnt "Niet-afhankelijk" om aan te duiden dat de berekening niet uit een onderliggende tabel of query afkomstig is. Net als in queries kan de expressie veldnamen bevatten (tussen vierkante haken), rekenkundige operatoren, functies en constanten (bvb. 21%). Je kan ook het & teken gebruiken. Met deze operator kun je verschillende operanden die uit tekens bestaan aan elkaar voegen. Hou er rekening mee dat expressies met een = teken beginnen! In plaats van rechtstreeks in je tekstvak de expressie in te tikken kan je ook de eigenschappen van het tekstvak openen en naast de eigenschap: Besturingselementbron de expressie intikken. De bestelling van een te kopen boek is gelijk aan het verschil tussen de minimumvoorraad en de voorraad. Voeg in frmInvoerboeken een teksvak toe om dit te berekenen

Prakticum Access ® - © MIG 2000

p. 40 van 64

Maak een berekend tekstvak om de huidige datum en tijd van de systeemklok weer te geven. Verander de label van het nieuwe tekstvak in Datum/tijd. 4.2.3 4.2.3.1 Opmaak van het formulier Aanpassen van de kleuren, randen, Lettertype en Lettergrootte . Het label dat je als titel in de formulierkoptekst hebt geplaatst moet als lettertype "Times New Roman", puntgrootte 26 krijgen. Pas vervolgens de grootte van je label aan het nieuwe lettertype aan. Als achtergrond kiezen we de kleur geel en als tekstkleur rood. Je mag ook een zwarte dikke rand rond het besturingselement plaatsen. Tenslotte moet je het label centreren in de formulierkoptekst (door het te verplaatsen). Maak hierbij gebruik van de werkbalk "Opmaak":

Bespreking van de werkbalk "opmaak": Nr 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Knop Object selecteren Lettertype Tekengrootte Vet Cursief Onderstrepen Links uitlijnen Centreren Rechts uitlijnen Achtergrondkleur Voorgrondkleur Randkleur Randbreedte Speciaal effect Voor het toepassen van de volgende opmaak Labels, Tekstvakken, secties, ...selecteren Het lettertype van de geselecteerde besturingselementen aanpassen De tekengrootte van de geselecteerde besturingselementen aanpassen Tekst in de geselecteerde besturingselementen in het vet plaatsen. Tekst in de geselecteerde besturingselementen in het cursief plaatsen. Tekst in de geselecteerde besturingselementen links onderstrepen. Tekst in de geselecteerde besturingselementen links uitlijnen. Tekst in de geselecteerde besturingselementen centreren Tekst in de geselecteerde besturingselementen rechts uitlijnen. Achtergrondkleuren van de geselecteerde besturingselementen of sectie wijzigen De lettertypekleur van de geselecteerde besturingselementen wijzigen De randkleur van de geselecteerde besturingselementen wijzigen De randbreedte van een besturingselement Een normaal, verhoogd of verlaagd effect voor een besturingselement of een sectie.

Om het lettertype van meerdere besturingselementen tegelijk aan te passen moet je ze eerst allemaal selecteren. Pas nu de volgende lay-out toe op de besturingselementen van je formulier:

Prakticum Access ® - © MIG 2000

p. 41 van 64

Achtergrondkleur Lettertype: Rand:

LABELS Lichtblauw Times New Roman, 12 + Cursief dikke rand in het zwart

TEKSTVAKKEN Lichtgroen Times New Roman, 12 + Vet fijne rand in het zwart

Kleur vervolgens naar keuze de verschillende secties in je formulier (achtergrondkleur). 4.2.3.2 Besturingselementen uitlijnen Je kan de besturingselementen op het raster uitlijnen en je kan ze op elkaar uitlijnen. • Besturingselementen op het raster uitlijnen. Via het menu Beeld Raster bepaal je of het raster zichtbaar of onzichtbaar is. Via het menu Opmaak Op raster uitlijnen bepaal je of nieuwe besturingselementen automatisch op het raster uitgelijnd zullen worden. • Besturingselementen horizontaal op elkaar uitlijnen. Selecteer een Tekstvak en verplaats het naar beneden, zodat het Label horizontaal niet meer op dezelfde hoogte als het Tekstvak staat. Selecteer vervolgens zowel het Label als het tekstvak en kies het menu opmaak uitlijnen: boven is bovenkant van het hoogste besturingselement (namelijk het label); onder is onderkant van het laagste besturingselement (namelijk het tekstvak). Voorbeeld: resultaat van opmaak uitlijnen boven:

oorspronkelijk

uitgelijnd • Besturingselementen verticaal op elkaar uitlijnen We kunnen besturingselementen ook verticaal op elkaar uitlijnen door de objecten die je wil uitlijnen te selecteren en Links of Rechts te kiezen uit het menu Opmaak uitlijnen. Er wordt telkens uitgelijnd op het meest linkse, respectievelijk rechtse besturingselement.

Velden uitlijnen: schots en scheef

Velden uitlijnen: netjes onder elkaar Prakticum Access ® - © MIG 2000 p. 42 van 64

Lijn de Labels rechts uit en de Tekstvakken links. 4.2.3.3 Formaat en afstand tussen besturingselementen aanpassen • Het formaat van de besturingselementen wijzigen menukeuze: Opmaak formaat wijzigen
Passend Op raster Op grootste Op kleinste Op breedste Op smalste Past de hoogte van de geselecteerde besturingselementen aan het gebruikte lettertype aan Lijnt de geselecteerde besturingselementen op de dichtsbijzijnde rasterpunten uit (als je bv. Eerst zonder de optie "Op raster uitlijnen" (menu opmaak) geplaatst hebt). Alle geselecteerde besturingselementen krijgen dezelfde hoogte. Het hoogste besturingselement bepaalt hoe hoog alle besturingselementen zijn. Alle geselecteerde besturingselementen krijgen dezelfde hoogte. Het laagste besturingselement bepaalt hoe hoog alle besturingselementen zijn. Alle geselecteerde besturingselementen krijgen dezelfde breedte. Het breedste besturingselement bepaalt hoe breed alle besturingselementen zijn. Alle geselecteerde besturingselementen krijgen dezelfde breedte. Het smalste besturingselement bepaalt hoe breed alle besturingselementen zijn.

Maak alle labels samen even breed en alle tekstvakken samen even breed. Zorg er wel voor dat alle tekst in het formulier zichtbaar blijft. • De verticale en horizontale afstand wijzigen menukeuze: Opmaak Horizontale afstand of Opmaak Verticale afstand. Met deze keuzen maak je de horizontale afstand of de verticale afstand tussen meerdere geselecteerde besturingselementen overal even groot. Je kan ook de horizontale of verticale afstand tussen de geselecteerde besturingselementen vergroten of verkleinen. Maak de verticale afstand tussen de besturingselementen gelijk. 4.2.4 Eigenschappen van besturingselementen, secties of formulieren

Elk onderdeel van een formulier heeft bepaalde eigenschappen. Ze bepalen hoe het onderdeel er op het scherm of op papier zal uitzien, of welke waarden in een bepaald veld zijn toegelaten. Om eigenschappen aan te passen, werk je in de ontwerp-weergave. Afhankelijk van het onderdeel dat je wil aanpassen (een volledig formulier, sectie of besturingselement) klik je in de volgende gebieden: een volledig formulier een sectie een besturingselement klik buiten de secties, dus buiten het raster op de grijze achtergrond klik binnen de sectie of in de titel van de sectie klik in het besturingselement

Selecteer het eerste besturingselement in de detail-sectie van frmInvoer_boeken en klik (of via het menu Beeld dan in de werkbalk op de knop Eigenschappen eigenschappen of via het snelmenu). Plaats het venster met de eigenschappen rechts van de besturingselementen. De titelbalk van het venster Eigenschappen vertelt ons welk soort besturingselement je geselecteerd hebt: een label, tekstvak, aankruisvakje, keuzerondje, lijn, ... Dit is zeer belangrijk om het soort besturingselement te "herkennen". Je kunt nu van het geselecteerde onderdeel alle mogelijke eigenschappen toevoegen of verwijderen. De eigenschappen zijn in 4 groepen verdeeld. Prakticum Access ® - © MIG 2000 p. 43 van 64

Zeer belangrijk: het onderscheid tussen volgende eigenschappen:

• Recordbron • Besturingselementbron • Naam • Bijschrift In de helpfunctie van MS Access vind je gedetailleerde informatie over de verschillende eigenschappen. Gebruik deze helpfunctie ! Een keuzelijst of een keuzelijst met invoervak maken Onderscheid tussen keuzelijst (listbox) of keuzelijst met invoervak (combobox) Een keuzelijst is een lijst met een aantal invoermogelijkheden voor een veld. De lijst is altijd open en toont de enige mogelijke invoeropties voor het tekstvak. De lijst onder txtHuren_of_kopen (tblBoeken) bevat 2 mogelijkheden voor het veld: H of K In een keuzelijst kan je geen nieuwe waarden toevoegen (bvb. L(enen))

4.2.5 4.2.5.1

Een keuzelijst met invoervak is een keuzelijst die als optie een afrollijst heeft. Als je een keuzelijst met invoervak gebruikt, kan je iets in het invoervak intypen (je kan dus nieuwe waarden toevoegen) of je kan de afrollijst gebruiken en een invoeroptie selecteren uit de afrollijst. Het veld txtPlaats hieronder gebruikt een keuzelijst met invoervak. Als je wil dat de keuzelijst (met invoervak) records uit een bestaande tabel of query toont, kun je het best een query ontwerpen die velden en records toont zoals je ze in de afrollijst wil hebben. Nadat je de Query gedefinieerd hebt, kan je deze het beste ook uitvoeren om te zien of je inderdaad de resultaten krijgt die je in de afrollijst wil zien. Sluit de Query af en sla hem op zodat je hem later aan de keuzelijst met invoervak kan toevoegen. 4.2.5.2 Enkele kenmerken van een keuzelijst of een keuzelijst met invoervak Type Rijbron Tabel/Query: De rijen in de lijst zijn afkomstig uit de records in een tabel of query. Als je deze optie kiest, moet het kenmerk Rijbron de naam hebben van een tabel of een query. Waardenlijst: De rijen in de lijst komen uit de eigenschap Rijbron. Als je deze optie kiest, moet het kenmerk Rijbron de waarden bevatten die in de lijst getoond moeten worden. Lijst met velden: De gegevens bestaan uit een lijst met veldnamen uit de tabel of de query die is opgegeven bij Rijbron. Deze optie wordt gebruikt in combinatie met macro's. • Rijbron De instellingen voor de eigenschap Rijbron zijn afhankelijk van het brontype dat Prakticum Access ® - © MIG 2000 p. 44 van 64 •

is opgegeven bij Type Rijbron. Als je Tabel/query als Type Rijbron neemt, kies dan de naam van de query of de tabel waarin de records staan die je in de lijst wilt tonen. Als je Waardenlijst kiest, typ dan hier de waarden in die je in de lijst wil tonen, gescheiden door puntkomma's (;). 4.2.5.3 Een keuzelijst maken.

We zullen in ons formulier frmInvoerboeken een keuzelijst maken van het veld txtHuren_of_kopen. Hetgeen in txtHuren_of_kopen moet ingevuld worden, moet door de gebruiker geselecteerd worden uit een keuzelijst Huren_of_kopen die zich onder het tekstvak bevindt. Het tekstvak zelf zullen we beveiligen, zodat je er niets meer kan aan wijzigen. De gebruiker wordt op die manier verplicht de optie te selecteren uit de keuzelijst (zodat hij zelf geen "nieuwe" opties kan toevoegen). De keuze verschijnt vervolgens automatisch in het tekstvak. 4.2.5.4 Een keuzelijst met invoervak maken.

In frmInvoeruitgeverijen maken we het volgende keuzelijst met invoervak: 4.2.6 Wisselknoppen, keuzerondjes en selectievakjes Op de werkset vind je de volgende knoppen terug: Deze besturingselementen kan je gebruiken om ja/nee-keuzes aantrekkelijk weer te geven. De ja-keuze wordt weergegeven door: een wisselknop die ingedrukt is een keuzerondje met zwarte stip een aangekruist selectievakje Ga naar het ontwerp van frmInvoerboeken en maak op de volgende manier van txtUit_assortiment een selectievakje: • Selecteer txtUit_assortiment en verwijder dit veld uit je formulier. • Selecteer de knop selectievakje uit de werkset. • Selecteer het veld txtUit_assortiment uit de lijst met velden en sleep dit veld in je formulier. • Verander het selectievakje en label van plaats. Bij een wisselknop staat de omschrijvende tekst op de knop (i.p.v. een Label). Wisselknoppen kan je ook opvullen met (zelfgemaakte) figuren. Klik hiervoor bij de eigenschap Figuur op de knop met de drie puntjes (…). Vervolgens kom je in het volgende dialoogvenster terecht:

Prakticum Access ® - © MIG 2000

p. 45 van 64

Je kan kiezen uit een reeks aanwezige figuren of via de knop Bladeren… kun je een eigen figuur opgeven die je bvb. met een tekenprogramma gemaakt hebt. 4.2.7 Groepsvakken Wisselknoppen, keuzerondjes en selectievakjes kunnen alleen de waarde Ja/Nee opleveren wanneer ze in hun eentje in een formulier gebruikt worden. Wanneer je deze besturingselementen echter in een groepsvak plaatst, kunnen ze een getal opleveren dat je opgeeft met de eigenschap Optiewaarde van het besturingselement. Een Groepsvak (option group) is handig om gegevens te presenteren als er enkele mogelijkheden beschikbaar zijn. Als het Groepsvak aan een veld gekoppeld is, moet het onderliggende veld in de tabel numerieke gegevens kunnen bevatten omdat de optieknoppen een numerieke waarde in het veld opslaan: 1 voor de eerste knop, 2 voor de tweede knop en zo verder. Deze numerieke waarden kun je aanpassen. Het is het groepsvak en niet de componenten (wisselknoppen, keuzerondjes of selectievakjes) ervan die moet gekoppeld worden via de eigenschap Besturingselementbron aan een "numeriek" veld. Toepassing: Maak een nieuw formulier, gebaseerd op de tblBoeken_per_leerling. Maak van txtBetalingscode een groepsvak (zie figuur). Het veld txtBetalingscode staat op 1 wanneer het boek aangerekend wordt en 2 indien het niet wordt aangerekend.

Ga hiervoor als volgt te werk: Klik op de knop Groepsvak in de werkset Sleep het veld Betalingscode uit de lijst met velden naar het formulier. Er wordt een groepsvak geplaatst met als label Betalingscode. Kies nu ofwel voor wisselknoppen, keuzerondjes of selectievakjes (in het voorbeeld is Prakticum Access ® - © MIG 2000 p. 46 van 64

gekozen voor wisselknoppen). Sleep 2 wisselknoppen in het groepsvak: voor elke mogelijke keuze één. Bij keuzerondjes en selectievakjes hoort een apart label. Het label bij wisselknoppen komt op de knop zelf te staan. Je kunt de tekst ("aan te rekenen" ; "niet aan te rekenen") rechtstreeks in de wisselknop of in de bijbehorende labels van de keuzerondjes of selectievakjes intikken. Deze tekst komt dan in de eigenschap Bijschrift te staan. Bij de eigenschappen zie je ook dat er voor elke wisselknop een Optiewaarde is ingesteld (1 voor de eerste wisselknop, 2 voor de tweede wisselknop enz.). Indien je straks één van deze wisselknoppen zult selecteren, zal deze optiewaarde in het veld Betalingscode van de tblBoeken_per_leerling ingevuld worden. In de omschrijving van ons veld optBetalingscode hebben we gezegd dat "aan te rekenen" gelijk moet zijn aan de numerieke waarde 1 en "niet aan te rekenen" aan de numerieke waarde 2. Deze waarden moeten uiteraard overeenkomen met de optiewaarden van de wisselknoppen. Controleer daarom bij de eigenschappen van elke wisselknop (niet het Label !) ofdat de eigenschap Optiewaarde de juiste numerieke waarde bevat. Indien dit niet zo is kun je het hier aanpassen. Bewaar je formulier onder de naam "Boeken_per_leerling". 4.2.8 De tabulatievolgorde in een formulier wijzigen Met de eigenschap Tabvolgorde kun je de plaats opgeven van een besturingselement in de tabvolgorde van een formulier. Je kunt de tabvolgorde van de besturingselementen in een formulier ook instellen met de opdracht Tabvolgorde in het menu Beeld. Je verkrijgt dan het volgende dialoogvenster: Hiermee stel je tegelijk de eigenschap Tabvolgorde van de besturingselementen in. Standaard krijgen nieuwe besturingselementen automatisch een positie in de tabvolgorde toegewezen op basis van de volgorde waarop ze worden toegevoegd aan een formulier. Elk nieuw besturingselement wordt als laatste in de tabvolgorde geplaatst. Als je de instelling van de eigenschap Tabvolgorde van een besturingselement wijzigt om de tabvolgorde aan te passen, wordt de instelling van de eigenschap Tabvolgorde van de andere elementen in de tabvolgorde automatisch aangepast. Open je formulier tabulatievolgorde: frmBoeken per leerling en zorg voor de volgende

Klascode Llnr Volgnummer_boek Betalingscode Ga hiervoor als volgt te werk: Kies uit het menu Beeld de optie Tabvolgorde…. De tabvolgorde wordt in de Prakticum Access ® - © MIG 2000 p. 47 van 64

Sectie Detail in het venster Aangepaste volgorde weergegeven (zie figuur). Selecteer een veldnaam door in het venster Aangepaste volgorde links van de veldnaam op de grijze balk (de kiezer) te klikken. Je kan meerdere aaneengrenzende veldnamen selecteren in combinatie met de Shift-toets. Hetgeen je geselecteerd hebt kun je nu verplaatsen door het te slepen met de muis. Op die manier zorg je voor de aangepaste tabvolgorde. Opmerking: Om de focus in je formulier terug te laten springen van linksboven naar rechtsonder pas je de tab-volgorde aan, door <Bewerken> <Tabvolgorde> te kiezen en daar de knop Automatisch (of AutoVolgorde) aan te klikken. De volgorde van de velden in het vak Aangepaste volgorde past zich dan aan aan de volgorde op het formulier. Je kan uiteraard ook zelf de velden op de juiste plaats slepen.

4.3 Werken met formulieren en subformulieren
4.3.1 Formulieren met meerdere tabellen op basis van een query Open je formulier "Invoerboeken". In je formulierweergave kun je zien bij welke Uitg_nr een bepaalde boek gekocht werd. Je kunt via dit formulier echter niet weten welke uitgeverij dit nu juist is (tenzij je alle nummers van buiten kent). Om in frmInvoerboeken ook de naam van de uitgeverij te plaatsen hebben we gegevens uit 2 tabellen nodig, namelijk tblBoeken en tblUitgeverijen We zullen het bestaande formulier aanpassen, zodanig dat ook de naam van de uitgeverij in het formulier zichtbaar is. Hiervoor gaan we als volgt te werk: • Maak eerst een query, waarin je de velden opneemt (van de 2 tabellen) die je in het formulier wenst. Bewaar deze query onder de naam "Query voor formulier".

Ga naar het ontwerp van frmInvoerboeken en maak de formulier-eigenschappen zichtbaar. Open de keuzelijst naast de eigenschap Recordbron en selecteer je query "Query voor formulier". Nu is je formulier gebaseerd op een query i.p.v. op een tabel.

Open je Lijst met velden. Je zult zien dat nu ook txtUitgeverij_benaming Prakticum Access ® - © MIG 2000 p. 48 van 64

opgenomen is. Plaats vervolgens in je formulier txtUitgeverij_benaming onder txtUitg_nr. Maak het formulier verder op.

Aangezien txtUitgeverij_benaming enkel in het formulier aanwezig is ter informatie moet er geen tabstop zijn bij dit veld. Pas hiervoor de eigenschappen van dit veld aan. Bewaar de wijzigingen in je formulier 4.3.2 Hoofd- en subformulieren Een subformulier is een formulier binnen een hoofdformulier dat gebruikt wordt om informatie uit meerdere tabellen in één formulier weer te geven. Doordat hoofdformulier en subformulier gekoppeld zijn worden in het subformulier alleen records weergegeven die betrekking hebben op de gegevens uit het hoofdformulier. Bij tabellen die met elkaar verbonden zijn via een één-op-veel relatie kun je bij één record in het hoofdformulier meerdere records in het subformulier laten tonen. Het hoofd- en subformulier worden als twee aparte formulieren gemaakt en bewaard en daarna worden ze aan elkaar gekoppeld. Voorbeeld: We wensen per uitgeverij een overzicht van de boeken die de leerlingen kunnen huren of kopen. Tussen tblUitgeverijen en tblBoeken bestaat er een één-op-veel relatie. Bij één record van de tblUitgeverijen wensen we meerdere records van de tblBoeken in gegevensbladweergave te zien. De gegevens van de tblUitgeverijen vormen dus het hoofdformulier en de gegevens van de tblBoeken het subformulier. Beide formulieren werden reeds apart gemaakt en bewaard onder de naam frmInvoer_uitgeverijen respectievelijk frmInvoerboeken. We gaan als volgt te werk om het volgende Hoofd- en subformulier te maken:

Prakticum Access ® - © MIG 2000

p. 49 van 64

• •

• •

Ga naar de formulier-eigenschappen van frmInvoerboeken (= subformulier) en wijzig de eigenschap Standaardweergave in Gegevensblad (i.p.v. Enkelvoudig formulier) Ga via het menu Beeld naar Gegevensbladweergave en verberg de kolom txtUitgeverij_benaming. De kolommen txtVolgnummer, txtVakcode, txtHuren_of_kopen, txtUitg_nr en txtTitel mag je vooraan plaatsen. Sluit het subformulier en bewaar de wijzigingen. Ga naar het ontwerp van frmInvoer_uitgeverijen (= hoofdformulier) en maak onder txtRek_nr de nodige ruimte vrij voor het subformulier. Ga naar het menu Bestand Opslaan als/exporteren…In het venster Opslaan als kies je Als object in de huidige database en geef je het formulier een nieuwe naam, namelijk frmHoofdformulier_uitgeverijen (zie figuur)

Activeer het databasevenster (via F11) en sleep frmInvoerboeken naar het hoofdformulier (onder txtRek_nr). Verander het label in "Subformulier".

Bekijk de eigenschappen van het subformulier:

Prakticum Access ® - © MIG 2000

p. 50 van 64

In plaats van de eigenschap Besturingselementbron spreekt men nu van Bronobject. De eigenschappen Subvelden koppelen en Hoofdvelden koppelen bepalen op welke manier records in een hoofdobject (hier frmInvoer_uitgeverijen)worden gekoppeld aan records in een onderliggend object (hier frmInvoerboeken). In Subvelden koppelen moet de naam getypt worden van één of meer koppelingsvelden in het onderliggende object. In Hoofdvelden koppelen moet de naam komen van één of meer koppelingsvelden in het hoofdfomulier. Aangezien txtUitg_nr zowel in tblUitgeverijen als in tblBoeken identiek is, verkrijgen we dezelfde veldnamen bij Hoofdvelden koppelen en Subvelden koppelen. Het subformulier is dus gekoppeld met het hoofdformulier via txtUitg_nr. Dit wil zeggen dat we in het subformulier enkel die records met hetzelfde uitgeverijnummer als het hoofdformulier zullen zien. Bewaar de wijzigingen in dit formulier.

5 RAPPORTEN 5.1.Het verschil tussen rapporten en formulieren
Formulieren zijn vooral bedoeld voor het invoeren, bewerken en weergeven van gegevens op scherm. Vanzelfsprekend kunnen formulieren ook worden afgedrukt. Daarvoor zijn rapporten echter veel meer geschikt. Gegevens kunnen dan worden gegroepeerd en gecomplementeerd met subtotalen en totalen. Een veelheid aan opmaakmiddelen, lijnen, figuren en lettertypen zorgt voor een representatief uiterlijk. Rapporten kunnen op zich weer onderdeel gemaakt worden van andere rapporten. Ook het afdrukken van etiketten of labels valt onder de categorie rapporten. Uiteindelijk bestaan er tussen formulieren en rapporten veel overeenkomsten. Veel van wat in het vorige hoofdstuk is besproken, geldt ook voor rapporten. Wat echter niet kan in rapporten, is het bewerken van de gegevens.

5.2. De structuur van rapporten

Prakticum Access ® - © MIG 2000

p. 51 van 64

Het rapport kent de volgende secties: Rapportkoptekst: De rapportkop wordt alleen op de eerste pagina afgedrukt en bevat gewoonlijk een titel, afdrukdatum, bedrijfsnaam en dergelijke. Paginakoptekst: De paginakop wordt op alle pagina's afgedrukt ten behoeve van kolomtitels. Detailsectie: Het hoofdbestanddeel van het rapport met de besturingselementen die de gegevens van tabel of query verwerken per record. De besturingselementen fungeren in het ontwerp als een sjabloon. Paginavoettekst: De tegenhanger van de paginakoptekst wordt ook op iedere pagina afgedrukt ten behoeve van statistische gegevens per pagina, bijvoorbeeld het aantal weergegevens rijen. Rapportvoettekst: De rapportvoettekst wordt alleen aan het einde van het rapport afgedrukt en dient bijvoorbeeld voor het weergeven van totalen. Als de gegevens in het rapport moeten worden gegroepeerd, kan de detailsectie worden onderverdeeld in groepen. Die beginnen dan met een groepskoptekst met de groepsnaam. In de detailsectie zelf staan de groepsgegevens, terwijl de groep wordt afgesloten met een groepsvoettekst voor subtotalen.

Prakticum Access ® - © MIG 2000

p. 52 van 64

5.3. Een eenvoudig rapport maken met de Rapport-wizard.
Ook voor het maken van rapporten biedt Access wizards. Dit introduceren we aan de hand van een telefoonlijst van de tabel tblUitgeverij in de vorm van een rapport. Klik in het databasevenster op het tabblaadje Rapport en de knop Nieuw.

In dit dialoogvenster zijn er 6 keuzemogelijkheden: • Ontwerpweergave, een nieuw rapport maken zonder een wizard te gebruiken. • Wizard Rapport, deze wizard maakt automatisch een rapport op basis van de velden die u selecteert. • AutoRapport: in kolomvorm, deze wizard maakt automatisch een rapport met kolommen. • Autorapport: in tabelvorm, deze wizard maakt automatisch een rapport in de vorm van een tabel. • Wizard Grafieken, deze wizard maakt een rapport met een grafiek. • Wizard Adresetiketten, deze wizard maakt een rapport dat is opgemaakt voor het afdrukken op etiketten. Kies het 'Wizard rapport', selecteer in de keuzelijst de tabel tblUitgeverij en start de Rapportwizards. In het volgende dialoogvenster moeten de velden bepaald worden die u in het rapport wilt opnemen. U kunt eventueel velden uit meer dan één tabel of query kiezen (dit doen we hier niet). Met behulp van vier knoppen kunt u daaruit velden selecteren voor het rapport. Plaats volgende velden in het rechtse venster: Uitgeverij_Benaming, Plaats en Tel_Nr.

Prakticum Access ® - © MIG 2000

p. 53 van 64

Klik op de opdrachtknop 'Volgende'. Het volgende dialoogvenster vraagt: "Wilt u groepeerniveaus toevoegen?". Dit betekent dat de gegevens in groepen worden ondergebracht en als een tabel met rijen en kolommen worden weergegeven. Bij deze vorm kunnen subtotalen per groep en totalen voor het hele rapport worden toegevoegd. Dit onderdeel wordt later besproken. Klik dus 'Volgende'. Het volgende venster vraagt: "Welke sorteervolgorde wilt u gebruiken voor de records ?".

Prakticum Access ® - © MIG 2000

p. 54 van 64

Je kan hier bepaalde geselecteerde velden rangschikken op vier niveaus, zowel alfabetisch stijgend als dalend (d.m.v. de toggleknop). Selecteer hier als eerste veld in de rangschikking voor "Uitgeverij_Benaming" en als tweede veld "Plaats". Klik daarna op "Volgende". In het pas verschenen venster wordt er gevraagd: "Hoe wilt u het rapport opmaken?". Er zijn hier twee instellingen mogelijk: - Indeling: in kolomvorm, in tabelvorm of uitgevuld - Afdrukstand: staand of liggend. - Het aankruisvakje "Veldbreedte aanpassen zodat alle velden op één pagina passen" wordt best uitgeschakeld. Klik op "Volgende". - Nu wordt er gevraagd: "Welk opmaakprofiel wilt u gebruiken?". - Kies hier voor "Compact" en klik op "Volgende". - Als laatste venster wordt de titel bepaald. Typ hier "Uitgeverijen" en klik op de knop "Voltooien" om het rapport te laten genereren. Het volgende rapport moet nu op scherm verschijnen:

Het afdrukvoorbeeld laat het rapport zien zoals het ook op papier zal komen bij het afdrukken. In de afbeelding hierboven ziet u alleen een uitvergroot deel van de eerste pagina van het rapport. Zodra u klikt met de muis wordt de pagina in zijn geheel weergegeven. Wanneer u in die paginaweergave de muiswijzer (die de vorm van een vergrootglas aanneemt) op een bepaald deel van de pagina plaatst en klikt, wordt dat deel uitvergroot. U kunt in het afdrukvoorbeeld geen wijzigingen aanbrengen. Het rapportvoorbeeld kan alleen vanuit de ontwerpmodus worden opgeroepen met de desbetreffende knop op de werkbalk of de gelijknamige optie in het menu Bestand. In het rapportvoorbeeld krijgt u snel inzicht in de effecten van de gekozen layout en lettertypen. Op het oog lijkt er weinig verschil te zijn tussen het Afdrukvoorbeeld en het Rapportvoorbeeld. Het rapportvoorbeeld laat echter niet zoals het Afdrukvoorbeeld alle records zien. Het geeft alleen records weer als nodig is om één pagina weer te geven met alles wat erop hoort te staan.

Prakticum Access ® - © MIG 2000

p. 55 van 64

5.4. Rapporten Afdrukken
Voordat u een rapport afdrukt, dient u de paginainstelling te controleren. U opent het dialoogvenster Paginainstelling vanuit het menu Bestand met gelijknamige optie. In het dialoogvenster regelt u de volgende zaken: de afdrukstand (staand of liggend), het papierformaat, de marges, het aantal kolommen, de rijafstand. U kunt kunt rapporten afdrukken vanuit één van de drie weergavemodi, maar ook vanuit het databasevenster. U kiest de optie Afdrukken in het menu Bestand, of de knop Afdrukken in het afdrukvoorbeeld of rapportvoorbeeld.

6 MACRO’s 6.1 Enkele eenvoudige macro's
6.1.1 Inleiding M.b.v. macro's kunnen heel wat handelingen die u frequent moet uitvoeren, geautomatiseerd worden. Een macro wordt uitgevoerd naar aanleiding van een gebeurtenis, bijvoorbeeld het klikken op een knop door een gebruiker. Programmeren in Ms-Access kan naast macro's ook gebeuren in Visual Basic for Applications, de programmeertaal die bij het pakket hoort. Dit komt in een volgende hoofdstuk aan bod. In dit hoofdstuk worden de basisvaardigheden behandeld voor het maken, opslaan en gebruiken van macro's. Daarnaast vindt u een reeks van voorbeelden terug. 6.1.2 Een macro creëren, bewaren en uitvoeren Om een nieuwe macro te maken en het macro-venster te openen, selecteert u in het databasevenster de macro-folder en druk vervolgens Nieuw. Het macro-venster dat nu verschijnt bestaat (voorlopig) uit drie delen.

Prakticum Access ® - © MIG 2000

p. 56 van 64

1. eerste deel: kolom Actie - hier worden de handelingen vermeld die de macro moet uitvoeren. De acties kunnen door u worden ingetikt maar ook worden geselecteerd uit een keuzelijst. 2. tweede deel: kolom Beschrijving - hier worden de acties van de macro omschreven. Deze kolom is niet verplicht, maar wel handig om de bedoeling van elke actie uit te leggen. Zeker in een complexe macro is het invullen van deze kolom aangewezen. 3. derde deel: Actie-argumenten - bij de meeste actie's horen actie-argumenten die extra informatie geven omtrent de actie. Merk op dat bij het selecteren of invullen van zowel actie's als actie-argumenten rechts onderaan het scherm telkens een helpscherm te zien is omtrent die actie of dat actie-argument (blauwe tekst). Hieronder volgt een alfabetisch overzicht van de meest voor de hand liggende macro-acties. Naast elke actie vindt u nu reeds de Engelse vertaling die ook gehanteerd wordt bij het DoCmdobject. Met de methoden van het DoCmd-object kunnen namelijk Ms-Access acties worden uitgevoerd vanuit Visual Basic For Applications. Bovendien wordt vermeld in welk gedeelte van dit hoofdstuk u een voorbeeld vindt omtrent die macro-actie. De functietoets F1 geeft natuurlijk een volledig helpscherm. macro-actie Afdrukken Afsluiten AlleRecordsWeergeven FilterToepassen FormulierOpenene Maximaliseren MenuOpdrachtUitvoeren Minimaliseren NaarBesturingselementGaan NaarRecordGaan Pieptoon QueryOpnieuwUitvoeren RapportOpenen RecordZoeken Sluiten WaardeInstellen Engelse vertaling Print Quit ShowAllRecords ApplyFilter OpenForm Maximize DoMenuItem Minimize GoToControl GoToRecord Beep Requery OpenReport FindRecord Close SetValue voorbeeld 6.1.4 voorbeeld 8 6.1.4 voorbeeld 7 6.1.4 voorbeeld 6 6.1.4 voorbeeld 6 6.1.2 6.1.2 6.1.4 voorbeeld 8 6.1.2 6.1.4 voorbeeld 5 6.1.4 voorbeeld 6 6.1.4 voorbeeld 2 6.2.2 voorbeeld 3 6.1.4 voorbeeld 3 6.2.2 voorbeeld 1

Als eerste voorbeeld creëren we een macro die een formulier met informatie omtrent klassen opent waarbij de cursor wordt geplaatst op het besturingselement Titularis (zie tabel tblKlassen). Wijzigingen aan de velden Klascode, Onderwijsvorm en Klas_omschrijving zijn namelijk weinig waarschijnlijk. Indien dit nog niet het geval is, dient u zeker vooraf een gepast formulier te maken (frmKlassen) op basis van de tabel Klassen. Wat moet m.a.w. de macro mcrKlassen doen? 1. Het formulier frmKlassen moet worden geopend Hiertoe selecteren we de actie FormulierOpenen (zie keuzelijst) en vullen het actie-argument Formuliernaam op gepaste wijze in. Kies ook hier uit de aangeboden keuzelijst! 2. De cursor moet worden geplaatst op het veldje Titularis Hiertoe selecteren we de actie NaarBesturingselementGaan (zie keuzelijst) en vullen het actie-argument Besturingselementnaam op gepaste wijze in. 3. Het geopende formulier moet in z'n grootste formaat te zien zijn. Hiertoe selecteren we de actie Maximaliseren (zie keuzelijst). Let wel, deze actie heeft Prakticum Access ® - © MIG 2000 p. 57 van 64

GEEN actie-argumenten. De kolom Beschrijving kan hier per actie de nodige uitleg verschaffen. Om uitleg te geven over de totale macro kan bijvoorbeeld voor de eerste actie een nieuwe lege rij worden ingevoegd (zie werkbalk). Op deze eerste rij kan nu opnieuw de kolom Beschrijvng worden ingevuld. Hieronder vindt u het eindresultaat.

We bewaren onze macro via Bestand - Opslaan als... Als naam kiezen we hier voor mcrKlassen. Het uitvoeren van een macro kan zowel in het macro-venster als in het database-venster. In dit database-venster merkt u de de macro mcrKlassen werd toegevoegd in de lijst. Dubbelklikken of selecteren gevolgd door Start zal de macro voor u uitvoeren. Testen maar... 6.1.3 Een macro starten vanuit een formulier Hiervoor werd vermeld dat een macro kan worden gestart vanuit zowel het macro-venster als vanuit het database-venster. Meestal echter zal een macro worden gestart vanuit een formulier dat dan dienst doet als interface tussen de gebruiker en de macro. Zo zullen we er bijvoorbeeld vaak moeten voor zorgen dat bij het klikken op een opdrachtknop een bepaalde actie of reeks van acties (m.a.w. een macro) moeten worden uitgevoerd. Onderstaande voorbeelden zullen dit verduidelijken. Een eenvoudig menusysteem moet ons de kans bieden om informatie over boeken te raadplegen (en eventueel aan te vullen en/of te wijzigen) op het scherm alsook een boekenlijst af te drukken. We moeten het menu op een eenvoudige manier kunnen verlaten. Om het voorbeeld hierna goed te kunnen volgen maakt u best op voorhand volgende objecten aan: - een formulier frmMenu_boeken dat eruit ziet als volgt:

Prakticum Access ® - © MIG 2000

p. 58 van 64

Merk op: zorg voor een correcte naamgeving wat betreft de opdrachtknoppen (bijvoorbeeld: cmdBoekeninfo, cmdBoekenlijst, cmdEinde) • een formulier frmBoeken dat alle velden uit de tabel tblBoeken laat zien • een rapport rptBoekenlijst dat een overzicht biedt van de velden volgnummer t.e.m. eenheidsprijs van alle boeken (geen groepering vereist, wel een sortering per vakcode) voorbeeld 1: uitwerken van opdrachtknop cmdBoekeninfo Vanuit het ontwerp van het menuformulier frmMenu_boeken kan via rechts klikken op de opdrachtknop cmdBoekeninfo gekozen worden voor Gebeurtenis opbouwen... Hier vindt u o.a. de mogelijkheid om macro op te bouwen (Opbouwfunctie voor macro's). In het macro-venster dat vervolgens verschijnt kunnen nu de gepaste actie('s), actie-argument(en) en/of beschrijving worden ingetikt. Als naam voor de macro kiezen we hier voor mcrBoekeninfo. Actie FormulierOpenen Actie-argument Formuliernaam frmBoeken Bekijk de eigenschappen (i.h.b. de gebeurteniseigenschappen) van de knop cmdBoekeninfo. Bij de gebeurtenis Bij klikken vindt u inderdaad de macronaam mcrBoekeninfo terug. Dit is dus bovendien een tweede manier om een macro te maken, nl. via de (gebeurtenis)eigenschappen van de knop in kwestie. voorbeeld 2: uitwerken van opdrachtknop cmdBoekenlijst Vanuit het ontwerp van het menuformulier frmMenu_boeken kan via rechts klikken op de opdrachtknop cmdBoekenlijst gekozen worden voor Gebeurtenis opbouwen... Hier vindt u o.a. de mogelijkheid om macro op te bouwen (Opbouwfunctie voor macro's). In het macro-venster dat vervolgens verschijnt kunnen nu de gepaste actie('s), actie-argument(en) en/of beschrijving worden ingetikt. Als naam voor de macro kiezen we hier voor mcrBoekenlijst.

Prakticum Access ® - © MIG 2000

p. 59 van 64

Actie RapportOpenen Actie-argument Rapportnaam Weergave

rptBoekenlijst Afdrukvoorbeeld

Controleer of de macro vermeld staat bij de gebeurteniseigenschap Bij klikken van de knop cmdBoekenlijst. voorbeeld 3: uitwerken van opdrachtknop cmdEinde Vanuit het ontwerp van het menuformulier frmMenu_boeken kan via rechts klikken op de opdrachtknop cmdEinde gekozen worden voor Gebeurtenis opbouwen... Hier vindt u o.a. de mogelijkheid om macro op te bouwen (Opbouwfunctie voor macro's). In het macro-venster dat vervolgens verschijnt kunnen nu de gepaste actie('s), actie-argument(en) en/of beschrijving worden ingetikt. Als naam voor de macro kiezen we hier voor mcrEinde. Actie Sluiten Merk op dat de actie Sluiten GEEN actie-argumenten bevat. Controleer of de macro vermeld staat bij de gebeurteniseigenschap Bij klikken van de knop cmdEinde. voorbeeld 4: automatisch laten verschijnen van het boekenmenu Willen we bij het openen van de database BOEKEN.MDB automatisch het boekenmenu (frmMenu_boeken) zien verschijnen dan creëren we daartoe een macro met als naam autoexec (denk aan de file autoexec.bat !!). Indien Ms-Access namelijk bij het openen van een database een macro ontdekt met die specifieke naam wordt deze macro eerst uitgevoerd. Wil je bij het openen van een database de werking van de eventueel aanwezige macro autoexec uitschakelen, dan houdt je de Shift-toets ingedrukt bij het openen. Actie FormulierOpenen Actie-argument Formuliernaam

frmMenu_boeken

Voor de volgende voorbeelden stappen we over naar het formulier frmBoeken. We voegen een viertal knoppen toe (in formulierkop en detailsectie) zoals hieronder aangegeven.

Prakticum Access ® - © MIG 2000

p. 60 van 64

voorbeeld 5: uitwerking van de knop cmdBoeken_toevoegen in het formulier frmBoeken Om vanuit het formulier frmBoeken snel een nieuw record toe te voegen EN de cursor reeds op het besturingselement Vakcode te plaatsen (type veld Boekcode = auto-nummering) bieden de actie's NaarRecordGaan en NaarBesturingsElementGaan een oplossing. Creëer de macro mcrBoeken_toevoegen. Actie NaarRecordGaan Actie-argument Record

Nieuw

Actie NaarBesturingsElementGaan Actie-argument Naambesturingselement

Vakcode

voorbeeld 6: uitwerken van de knop cmdBoeken_vakcode in het formulier frmBoeken De knop cmdBoeken_vakcode moet ons de kans bieden om enkel die boeken van een door de gebruiker opgegeven vakcode te tonen op het scherm. Alle boeken moeten dus als het ware Prakticum Access ® - © MIG 2000 p. 61 van 64

"gefilterd" worden zodat enkel de gewenste boeken overblijven. De actie die we hier leren kennen is m.a.w. FilterToepassen. De actie-argumenten bieden de kans om de aard van de filter op te stellen. Dit kan aan de hand van een query of via aan WHERE-voorwaarde. In onderstaand voorbeeld werd gekozen voor de laatste mogelijkheid. De WHERE-voorwaarde ziet er dan als volgt uit: [tblBoeken]![Vakcode] = [geef vakcode : ] Links van het gelijkheidsteken staat de veldnaam Vakcode (uit de tabel tblBoeken) vermeld. Rechts van het gelijkheidsteken staat de vraag die bij het uitvoren van de macro aan de gebruiker zal worden gesteld. Creëer de macro mcrBoeken_vakcode. Actie FilterToepassen Actie-argument WHERE-voorwaarde

[tblBoeken]![Vakcode] = [geef vakcode : ]

Om bij actie-argumenten te verwijzen naar objecten van de database, kan hiervoor worden gebruik gemaakt van de opbouwfunctie voor expressies. Klik hiervoor op de knop Opbouwen, rechts van de WHERE-voorwaarde. Via selecteren van de juiste objecten en plakken kan de vergelijking worden opgebouwd.

Eventueel kan de macro-actie Pieptoon de aandacht van de gebruiker vestigen op het feit dat hij nu effectief een gegeven (vakcode) moet intikken! Actie FilterToepassen Pieptoon Voorbeeld 7: uitwerken van de knop cmdAlle_boeken in het formulier frmBoeken Na een selectie zoals gemaakt in voorbeeld 6 is het terug opvragen van alle boeken zeker aangewezen. Dit kan bijvoorbeeld met een passende knop cmdAlle_boeken waaraan een macro mcrAlle_boeken wordt gekoppeld. De actie die hier kan worden gebruikt is AlleRecordsWeergeven. Voorbeeld 8: uitwerken van de knop cmdAfdrukken_boekinfo in het formulier frmBoeken Prakticum Access ® - © MIG 2000 p. 62 van 64

Via de knop cmdAfdrukken_boekinfo moet het mogelijk zijn het huidig actief record af te drukken. Zonder het gebruik van macro's selecteren we daarvoor eerst het actief record en drukken we daarna deze selectie af. Het selecteren van het actief record kan via het menu Bewerken en de opdracht Record selecteren. De keuze van een dergelijke menu-opdracht kan worden geautomatiseerd via de macro-actie MenuopdrachtUitvoeren. Via de argumenten kan de gebruiker de menunaam (in ons geval Bewerken) en de menu-opdracht (in ons geval Record selecteren) aanduiden. Het afdrukken van dit geselecteerd record wordt uitgevoerd via de macro-actie Afdrukken. Let op het actie-argument afdrukbereik ( ! selectie ). Creëer de macro mcrBoeken_afdruk Actie MenuopdrachtUitvoeren Actie-argument menubalk menunaam opdracht Actie Afdrukken Actie-argument Afdrukbereik

Formulier Bewerken Record selecteren

selectie

BEDENKING BIJ VOORBEELDEN 5, 6, 7 en 8: Activeer het macro-tabblad in het databasevenster. Je vindt daar o.a. de macro's mcrBoeken_toevoegen (voorbeeld 5), mcrBoeken_vakcode (voorbeeld 6), mcrAlle_boeken (voorbeeld 7) en mcrBoeken_Afdruk (voorbeeld 8). Indien we nog meer knoppen toevoegen aan dit formulier frmBoeken en daar opnieuw macro's aan koppelen zal dit vlug leiden tot een onoverzichtelijk geheel. Welke macro heeft dan te maken met welk formulier? Een oplossing wordt geboden door het gebruik van macrogroepen. Hiermee worden alle macro's die betrekking hebben op één formulier in één macrogroep gebundeld. We voeren die even uit voor het formulier frmBoeken. We creëren een nieuwe macro(groep) via de knop Nieuw. Op de macrowerkbalk bevindt zich een knop Macronamen. Bij klikken verschijnt een extra kolom in het macrovenster. Hieronder ziet u hoe de vier macro's nu in één macrogroep worden ingetikt (gebruik eventueel knippen en plakken vanuit de oorspronkelijke macro's). De blanco lijnen tussen de divers macro's werden enkel toegevoegd voor de leesbaarheid. Deze macro(groep) wordt bijvoorbeeld bewaard als mcrBoeken (macrogroep gekoppeld aan frmBoeken).

Prakticum Access ® - © MIG 2000

p. 63 van 64

Hoe worden de macro's uit de macrogroep mcrBoeken nu gekoppeld aan de knoppen cmdBoeken_toevoegen, cmdBoeken_vakcode en cmdAlle_boeken? Bekijk hiervoor de gebeurteniseigenschappen van de knop cmdBoeken_toevoegen. Opnieuw vindt u hier de eigenschap Bij klikken terug. Vermeld hier nu de gepaste macro, nl. mcrBoeken.Toevoegen. Voor de knop cmdBoeken_vakcode wordt dit mcrBoeken.Vakcode, voor de knop cmdAlle_boeken is dit mcrBoeken.alle en voor de knop cmdAfdrukken _boekinfo is dit mcrBoeken.Afdrukken_boekinfo.

Prakticum Access ® - © MIG 2000

p. 64 van 64