Tabellen en queries

Hier wordt wat algemene informatie over het werken met MS-Access geboden. Deze informatie behandelt alleen de meest elementaire zaken. Om meer uit Access te halen, is het aan te raden om daar meer over te lezen of er een cursus in te volgen. Voor wie meer wil weten over de inhoud van de bij deze module meegeleverde Access database is elders nog wat informatie te vinden.

De voor deze tekst gebruikte Access versie was 97. Inmiddels zijn er nieuwere Access versies op de markt verschenen. Voor wat betreft de hier behandelde basisbewerkingen beperken de verschillen tussen deze versies zich voornamelijk tot een iets andere schermopmaak.

In grote lijnen zijn er binnen Access twee manieren om gegevens naar informatie om te zetten:

Beide methodes worden vooral toegepast als men op zoek is naar informatie, die men zelf nodig heeft en waarbij men geen hoge eisen stelt aan de opmaak van de informatie. Als het om informatie voor derden gaat, vormt een tabel of query vaak de basis en wordt de leesbaarheid van de informatie daarna verhoogd door deze te presenteren als rapport of formulier.

Informatie halen uit een tabel

Een tabel bestaat uit kolommen en rijen. Elke eigenschap heeft een eigen kolom en elk record heeft een eigen rij. Als men een tabel oproept, komt men in de opmaak vaak twee zaken tegen die men meteen wil aanpassen:

Aangezien een Access tabel er in veel opzichten hetzelfde uitziet als een spreadsheet, verwachten Excel gebruikers vaak dat dat dit soort elementaire opmaak bewerkingen in beide applicaties op dezelfde wijze worden afgehandeld. Dit is echter slechts deels het geval. Zo lukt het nog wel om in beide programma's de breedte van een kolom aan te passen aan de langste celinhoud door dubbel te klikken op de rechterrand van de kolomtitel. Binnen Excel kan men echter ook makkelijk de breedte voor alle kolommen passend maken en die mogelijkheid ontbreekt binnen Access.

Verder werkt het verbergen en tonen van kolommen binnen Access deels anders dan een Excel gebruiker zou verwachten.

Selectiemethode voor te verbergen kolommen
Selecteren vanMethodeVia ExcelVia Access
Eén kolomKlik op kolomtitelWerktWerkt
Aaneengesloten serie kolommenKlik op eerste kolomtitel
<shift> + klik op de laatste kolomtitel
WerktWerkt
Willekeurige kolommen<ctrl> + klik op de kolomtitelsWerktWerkt niet

In vergelijking met Excel biedt Access gelukkig een veel fraaiere manier om verborgen kolommen weer zichtbaar te maken en door daar gebruik van te maken, kan men toch snel willekeurige kolommen te verbergen. De werkwijze wordt binnen Access als volgt:

Als men kolommen verbergt, moet men oppassen met het afsluiten van de tabel. Daarbij wordt gevraagd of de gewijzigde indeling moet worden opgeslagen. Bevestigend antwoorden betekent dat de verborgen velden nog steeds verborgen zijn als de tabel de volgende keer wordt opgeroepen. Dat kan erg onhandig zijn als men op dat moment veel van die verborgen velden wel wenst te zien, omdat men ze dan allemaal van een vinkje moet voorzien. Als men regelmatig verschillende, vaste combinaties van velden uit een tabel wil bekijken, kan men beter voor elke combinatie een query maken en niet de opmaak van de basistabel telkens herzien.

Als men eenmaal de gewenste kolommen in beeld heeft en die kolommen hebben de gewenste breedte, wordt het tijd om de presentatie van de informatie nog verder te verbeteren door zich bezig te houden met de rijen van de tabel. Er zijn verschillende icoontjes in de werkbalk opgenomen om de rijen te sorteren en/of te filteren. Bij een sortering wijzigt alleen de volgorde van de rijen. Bij een filtering wordt het aantal getoonde rijen minder, omdat alleen rijen worden getoond, welke aan de opgegeven selectie voldoen.

sorteren van laag naar hoog
  • Klik een keertje op een waarde in de kolom waarop gesorteerd moet worden
  • Klik vervolgens op het icoontje

sorteren van hoog naar laag
  • Klik een keertje op een waarde in de kolom waarop gesorteerd moet worden
  • Klik vervolgens op het icoontje

filteren(= het Access woord voor selectie) via voorbeeld
  • Klik op de gewenste waarde of markeer een deel van de gewenste waarde
  • Klik vervolgens op het icoontje
Men kan een aantal keren achter elkaar een filter toepassen, zodat men men steeds minder records te zien krijgt. De onzichtbare records zijn niet verdwenen. Door op icoontje 'filteren in/uitschakelen' te drukken worden alle records weer zichtbaar.

Men kan in de bovenbeschreven werkwijze ook het klikken op het icoontje vervangen door een druk op de rechtermuisknop. Men krijgt dan een menu, waarmee men naast de gewone filtering ook een negatieve filtering uit kan voeren. Met zo'n filter worden alle records getoond die niet aan de geselecteerde waarde voldoen.

filteren via formulier
Deze methode kan worden gebruikt als men niet alleen op criterium 1 en 2 wil filteren, maar ook op criterium 1 of 2. De truc zit in de tabbladen onder aan het scherm. Elk 'OF' tabblad heeft een eigen regel waarop de 'EN' criteria kunnen worden ingegeven. Het bijwerken van een tabblad werkt als volgt:
  • Klik een keertje in de gewenste kolom zodat aan de rechterkant van de kolom een pijltje verschijnt
  • Kies de gewenste waarde
  • Klik op icoontje 'filteren in/uitschakelen' om de filtering uit te voeren
(Men kan deze mogelijkheid ook gebruiken na de vorige methode. De daar toegepaste filtering is dan al ingevuld.)

filteren in/uitschakelen
Met dit icoontje wisselt u tussen wel/niet toepassen van het filter. Als u twijfelt of u naar gefilterde gegevens zit te kijken of niet kunt u eenvoudig de waarheid achterhalen. Bij een toegepast filter geldt het volgende:
  • In de werkbalk is dit icoontje 'ingedrukt'
  • Bij de recordteller linksonder wordt gesproken over gefilterde records
  • In de statusbalk, helemaal onderaan, staat in het rechterdeel de tekst 'FLTR'

zoeken
  • Klik op een waarde in de gewenste kolom of markeer een deel daarvan. Het is makkelijk als dit de gewenste waarde bevat, maar noodzakelijk is het niet.
  • Klik op het icoontje
  • Er verschijnt een dialoog venster waar men kan ingeven waar men precies naar wil zoeken. Pas dit naar wens aan.
  • Druk op de knop om met zoeken te beginnen

Het is mogelijk om filters toe te passen die veel lijken op queries. Men is dan niet gebonden aan het zoeken naar teksten, maar kan bijvoorbeeld zoeken naar waardes die tussen 'A' en 'M' in liggen. Daar wordt hier verder niet op ingegaan. Het is in die gevallen meestal handiger om meteen een query te gebruiken in plaats van een filter.

Informatie halen uit een query

Queries bieden een aantal voordelen boven gewone filters:

Er bestaan binnen Access verschillende soorten queries. Zolang het gaat om het winnen van informatie uit de tabellen heeft men meestal genoeg aan selectie- en kruistabelqueries. Een speciale variant is de parameterquery, waarmee men eenvoudig waardes van selectiecriteria kan wijzigen. Selectiequeries vormen verder de basis van de, elders behandelde, actiequeries. Actiequeries maken het mogelijk om bewerkingen los te laten op de gegevens in tabellen. Zo kan men bijvoorbeeld records die aan een zeker criterium voldoen automatisch laten verwijderen of de verkoopprijs in een tabel met artikelgegevens met vijf procent kan verhogen.

Om een selectiequery te maken dient minimaal één tabel, of een andere query, te worden gebruikt. Vaak zal een query worden samengesteld uit meerdere tabellen. In die gevallen moet er wel een koppeling kunnen worden gelegd tussen de verschillende tabellen.

Het eindresultaat van en selectiequery is default een dynaset, maar het kan ook een snapshot zijn, welke men, in tegenstelling tot een dynaset, niet kan wijzigen. Een dynaset lijkt op een gewone tabel, maar deze tabel verdwijnt automatisch bij het sluiten van de query. Bij het opslaan van de query wordt de methode waarmee de dynaset moet worden opgebouwd vastgelegd. Als men de query een volgende keer uitvoert, worden automatisch de actuele gegevens gebruikt. Dit is ook het geval bij rapporten, welke op een query gebaseerd zijn. Als men zo'n rapport start, wordt automatisch eerst de query opnieuw uitgevoerd.

Een nieuwe selectie query wordt in grote lijnen via de volgende stappen samengesteld:

Achteraf nog tabellen toevoegen aan een query kan via de knop .

Om queries goed toe te kunnen passen zijn er meerdere onderwerpen waar men wat van af dient te weten, zoals:

Wellicht is niet direct duidelijk wat men met bepaalde bewerkingen kan bereiken. Daarom is hieronder een schema opgenomen, waarin geprobeerd wordt om een en ander te visualiseren.

Bij de uitleg van de verschillende onderwerpen worden twee tabellen als voorbeeld gebruikt. Eén tabel bevat artikelgegevens en de andere tabel bevat omzetgegevens voor die artikelen. De inhoud van beide tabellen is hieronder weergegeven:

Query eigenschappen instellen

Elke query heeft een aantal eigenschappen die men kan herzien, waarvan er een aantal in de onderstaande tabel is opgenomen.

Beschrijving Ruimte voor een korte omschrijving van het doel van de query
Topwaarde Afhankelijk van de sortering de hoogst of laagste records.
(n geeft de n hoogste/laagste records, n% geeft de n% hoogste/laagste records)
Unieke waarden Combinaties van veldwaarden, die meerdere keren in het gegevensblad voorkomen, worden maar één keer getoond
Unieke records Records, die volledig identiek zijn, worden maar één keer weergegeven
Type recordset Hier kan men kiezen tussen een dynaset of een snapshot

Om de query eigenschappen te benaderen gaat men als volgt te werk:

De opbouw van het queryscherm

Als men een query ontwerpt krijgt men een scherm te zien dat in twee delen gesplitst is:

Koppelen van tabellen

Als men velden wil koppelen, behoeven de namen van het koppelingsveld in de beide tabellen niet gelijk te zijn, maar ze moeten wel een vergelijkbaar gegevenstype bevatten. De koppeling kan men als volgt aanbrengen:

Er wordt een streep tussen de beide velden getrokken om de gelegde koppeling te tonen. Standaard wordt een zogeheten inner-join tussen de bestanden aangelegd, maar er zijn ook andere koppelingen mogelijk. Om het koppelingstype te wijzigen, klikt men met de rechtrmuisknop op de koppelingslijn en kiest in het getoonde menu het gewenste type.

Een speciaal geval vormt verder de zogeheten self join. In dat geval is de veldenlijst van een tabel tweemaal opgenomen. Access heeft de tweede veldenlijst dan van een afwijkende naam voorzien om verwarring te voorkomen. De koppeling tussen deze twee tabellen heet dan een self join.

Niet alle tabellen waartussen men een koppeling maakt behoeven ook velden te bevatten, welke op de query worden getoond. Een tabel kan ook alleen opgenomen zijn om als intermediair te dienen bij de koppeling van twee andere tabellen.

Velden in het ontwerpraster opnemen

Men kan natuurlijk de rijen 'veld' en 'tabel' vullen door de namen zelf in te tikken, maar gelukkig zijn er makkelijkere manieren waarmee de gegevens uit de veldlijsten kan overnemen.

Eén veld overnemen Men kan een veldnaam uit de veldenlijst naar de gewenste cel in het ontwerpraster slepen. De bijbehorende cel in de 'tabel' rij wordt hierbij automatisch gevuld. Men kan ook de cursor in een cel van de 'veld' rij zetten en vervolgens dubbelklikken op een naam in de veldenlijst.
Meerdere velden overnemen Als het om een aaneengesloten reeks velden gaat klikt men op de eerste en drukt men op en klikt op het laatste element van de reeks. Als het om losse velden gaat houdt men de toets ingedrukt, terwijl men op de gewenste elementen klikt. Vervolgens sleept men de zo geslecteerde velden naar het ontwerpraster.
Alle velden overnemen Dubbelklik op de titelbalk van de veldenlijst en sleep vervolgens alle nu gemarkeerde velden naar het ontwerpraster.

Men kan ook op het '*' in de veldenlijst klikken. In dat geval worden alle velden in één kolom van het ontwerpraster opgenomen. Dit heeft nadelen, omdat men geen criteria voor losse velden kan gebruiken. Dat is dan alleen nog mogelijk door zo'n veld ook op te nemen in een andere kolom van het ontwerpraster. Het '*' heeft als voordeel dat het altijd alle velden van de tabel overneemt, ook als de opbouw van de tabel wordt gewijzigd.

Men is binnen query niet beperkt tot velden uit de veldenlijst. Men kan ook nieuwe velden maken, die berekend worden met behulp van velden uit de veldenlijst. Stel bijvoorbeeld dat men bijvoorbeeld een veld 'winst' wenst te gebruiken binnen de query.

Omdat het veld 'winst' niet uit een tabel wordt gelezen, hoeft voor dit veld in de rij 'tabel' ook niets te worden ingevuld. Als men bij de berekeningd van een nieuw veld een veldnaam kiest, die in meerdere van de geselecteerde tabellen voorkomt, moet men de naam uniek maken door eerst de tabelnaam, tussen [ ] in te tikken, vervolgens een uitroepteken en tenslotte de veldnaam, die ook tussen [ ] moet staan, zoals [omzet]![aantal].

Binnen de standaard tabellen eindigen de veldnamen nooit op ':', maar als u ooit zelf tabellen aanmaakt, let dan op bij het gebruik van veldnamen, als die op ':' eindigen. De dubbele punt betekent binnen Access namelijk dat het om een te berekenen veld gaat. Om duidelijk te maken dat dit bij deze veldnaam niet de bedoeling is, moet de veldnaam, inclusief de ':' tussen [ ] worden gezet.

De volgorde van de velden in de query kan achteraf altijd gewijzigd worden. Selecteer de te verplaatsen kolom en sleep het veld vervolgens naar de gewenste positie. Een verticale zwarte streep geeft aan waar wordt ingevoegd als de muisknop zou worden losgelaten.

Men kan de query uitvoeren via de knop .

Op dezelfde plek in de werkbalk verschijnt een nieuwe knop, waarmee men weer naar de ontwerpweergave kan terugkeren.

Bij het verlaten van een aangemaakte/gewijzigde query wordt altijd gevraagd of de query moet worden opgeslagen. Op die manier is de query later nog eens te openen, waarbij dan wordt gewerkt met de meest recente gegevens.

Selectiecriteria toepassen

Het is mooi dat men binnen een query kan opgeven welke velden men wenst te zien, maar dat is meestal niet voldoende. Over het algemeen zal men ook criteria toe te voegen, zodat men alleen records te zien krijgt die aan bepaalde voorwaarden voldoen, zoals bijvoorbeeld alle debiteuren uit een bepaald land. Binnen Access zijn er verschillende manieren waarop men een selectie kan maken. Vergeet niet dat Access bij het controleren van teksten geen onderscheid maakt tussen hoofdletters en normale letters. Binnen criteria worden regelmatig speciale karakters gebruikt, zoals <, > en =. Als deze tekens en/of spaties in de te zoeken tekst zijn opgenomen, dient men de tekst door aanhalingstekens te omgeven om verwarring bij Access te voorkomen.

Men kan criteria combineren. Binnen een enkel veld is dit mogelijk met And of Or. And gebruikt men als men alleen records wenst te zien, welke aan beide criteria voldoen. Or wordt toegepast als een record voldoet als minimaal aan één van de criteria wordt voldaan. Naast deze And en Or afhandeling kent men echter nog een andere versie, waarin verschillende velden betrokken kunnen worden. Alle criteria die op dezelfde rij in het ontwerpraster worden geplaatst, worden namelijk automatisch via And gekoppeld. Als men de criteria over meerdere rijen splitst, worden die rijen via Or gekoppeld.

Hieronder een voorbeeld. Hierbij wordt de wortel omzet gegeven als de winst groter of gelijk aan 20 is. De doperwten omzet wordt altijd gegeven en de bloemkolen omzet wordt getoond wanneer de winst hoger dan 20 is.

De uitvoer komt er dan als volgt uit te zien:

Het is mogelijk om binnen expressie de waarde van een ander veld te gebruiken, door de naam van dat veld binnen de expressie tussen [ en ] te zetten. Op deze manier wordt voorkomen dat Access de naam als een gewone tekst ziet.

Eenvoudige criteria kan men zelf wel intikken. Ingewikkelde versies kan men via de opbouw functie samenstellen. Binnen die opbouwfunctie kan men alle binnen Access aanwezige functies benaderen en via de 'help' toets van het opbouw venster is een uitgebreide beschrijving van al die functies te benaderen.

Lange expressies zijn vaak niet goed te overzien, omdat de ruimte binnen de cel vaak beperkt is, zodat er stukken van de expressie buiten beeld vallen. De makkelijkste manier om het probleem op te lossen, is het gebruik maken van het zoomvenster. Dit venster is als volgt op te roepen:

Sortering instellen via het ontwerpraster

De sortering is niet beperkt tot een enkele kolom. Men kan meerdere kolommen voor de sortering opgeven. De sortering begint met de meest linkse kolom waarbij in het ontwerpraster voor sortering is gekozen. Als men in de derde kolom begint met een sortering en de query opslaat staat deze kolom bij het openen van de query helemaal links. In het query resultaat worden de velden echter nog steeds in de oorspronkelijke volgorde getoond.

Hieronder een voorbeeld, waarbij de sortering op het veld winst moet worden uitgevoerd en wel zo, dat met de hoogste winst begonnen wordt.

De uitvoer komt er dan als volgt uit te zien:

Totalen berekenen

Stel dat men per artikelgroep de verzamelde verkoopwaarde wenst over de periodes 0103 en 0203. De oplossing lijkt wellicht de volgende te zijn.

Helaas komt de uitvoer er nu als volgt uit te zien:

Access geeft elk geschikt record een eigen regel. Wat hier mist is een totalisering per artikelgroep. Access biedt gelukkig de mogelijkheid om dit soort berekeningen uit te voeren en is daarbij niet beperkt tot het optellen van veldwaardes. Er zijn namelijk meerdere functies beschikbaar, zoals:

Let op bij het gebruik van een functie als Aantal. Als men maar een paar kolommen binnen de query wenst te zien, zal men vaak alleen unieke waardes willen zien en tellen. Dit kan, zoals reeds is behandeld, worden geregeld door het aanpassen van de query eigenschappen.

Bij het berekenen van totalen gaat men als volgt te werk:

Als men alle 'Group By' teksten vervangt, houdt men alleen eindtotalen over. Als meerdere velden 'Group By' als waarde hebben worden de velden van links naar rechts gegroepeerd.

Men kan de totalen niet alleen tonen, men kan ze ook gebruiken bij het opbouwen van criteria. Hierbij zijn twee situaties te onderscheiden:

Dit geeft de volgende uitvoer:

Dit werkt beter, hoewel Access geheel op eigen initiatief de titel boven de verkoopwaarde heeft verziekt. Dat probleem is eenvoudig op te lossen door in de ontwerp weergave de kolom te markeren en de titel via de eigenschappen aan te passen.

Als men overzichten uit BBx pakketten gewend is, is het even wennen aan de manier waarop een query totaliseert. Op een BBx overzicht worden vaak zowel de afzonderlijke gegevens getoond als de (sub)totalen. Binnen een query worden de afzonderlijke gegevens getoond of de gegroepeerde gegevens, maar niet beide tegelijk.

Voor deze methode is wel wat te zeggen. Men kan nu namelijk eerst eens de subtotalen bekijken, zonder door de afzonderlijke gegevens te moeten bladeren. Als men bij de subtotalen iets ziet waar men meer van wil weten, kan met de afzonderlijke gegevens bekijken, waarbij men met behulp van de juiste criteria de totale hoeveelheid gegevens makkelijk kan beperken.

Als men echter de voorkeur geeft aan een lijst met zowel de afzonderlijke waardes en de subtotalen kan dat ook, maar via een omweg. Men begint met een query te maken met de gewenste gegevens. Die query gebruikt men vervolgens als basis voor een rapport. Op een rapport kan men namelijk zowel met afzonderlijke waardes als met (sub)totalen werken, zodat bijvoorbeeld het volgende overzicht tot de mogelijkheden behoort:

In de nieuwere Access versies is het mogelijk om een query als draaitabel (pivot table) te bekijken. Op die manier is het wel mogelijk om zowel afzonderlijke gegevens als (sub)totalen in hetzelfde venster te zien te krijgen. Het is lastiger om te begrijpen waarvoor men een draaitabel kan gebruiken dan om er eentje in Acces te maken. Vandaar dat elders kort wordt ingegaan om de mogelijkheden van een draaitabel.

Kruistabelquery

Een speciaal type query is de kruistabelquery. Bij een gewone selectiequery beschikt men alleen over kolomkoppen. Een kruistabel beschikt men daarnaast over rijkoppen. Binnen het ontwerpraster krijgt men bij dit soort query de beschikking over een extra rij, waarmee men kan aangeven of een veld als rij- of kolomkop moet worden gebruikt. Men hoeft niet noodzakelijk kruistabellen te gebruiken. Men kan de gegevens ook exporteren naar Excel om daarin vervolgens gebruik te maken van draaitabellen.



Menu