Zoeken in MS Access 2010-cursus:

Selectiecriteria opstellen

1. Leerdoel

De student moet in staat zijn om aan een selectiequery de gepaste selectiecriteria en sorteringvolgorde toe te voegen.

2. Werkwijze

In de voorgaande bladzijde werd slechts de basis van een nieuwe query gelegd: wanneer de query wordt uitgevoerd, worden weliswaar enkel de geselecteerde velden getoond uit de onderliggende tabel, maar ook alle ingevoerde records in deze tabel worden in de uitkomst opgenomen.

Een query wint uiteraard aan bruikbaarheid indien hij bepaalde records selecteert (filtert) en ordent.

2.1. Criteria invoeren

In de voorgaande webpagina werd ondersteld dat een selectiequery moest worden gebouwd die enkel vrouwelijke werknemers selecteert en weergeeft in volgorde van indiensttreding.

Om dergelijk criterium in te voeren 'enkel vrouwelijke medewerkers' stelt het ontwerpraster de rij 'Criteria' ter beschikking. 

In de kolom van de veldwaarde, waarvoor het criterium geldt, kan daartoe het criterium in deze rij worden ingetikt als een zogenaamde 'expressie'.  Een expressie is een uitdrukking waarin een (selectie)voorwaarde wordt uitgedrukt. Bijvoorbeeld: 'Leeftijd=13' is een expressie die aangeeft dat het veld 'Leeftijd' gelijk moet zijn aan de waarde 13.  Klik eventueel hier om nu reeds de volgende webpagina met meer informatie over expressies te tonen.

Om enkel de vrouwelijke medewerkers uit de Personeelsdatabase te lichten, moet dus een expressie worden ingevoerd in de query die uitdrukt dat het veld 'Geslacht' de waarde 'Vrouw' moet bevatten.

Zoals je je uit een voorgaande oefening zal herinneren, werd voor het invoeren van het geslacht in het gelijknamige veld gebruik gemaakt van een keuzelijst met invoervak.  Toen werd vastgelegd dat voor de invoer van het label 'Vrouw' de code '1' zou worden gebruikt en voor 'Man' de code '2'. Werknemers waarvoor het geslacht onbekend is, verkrijgen code 9 'Onbekend'.

Thans moet bijgevolg worden ingevoerd dat in het veld 'Geslacht' de waarde '1' moet voorkomen, ten einde enkel vrouwelijke medewerkers te selecteren. 

  1. Open de query 'Werkneemsters naar datum indiensttreding' opnieuw
  2. Schakel over naar 'Ontwerpweergave'
  3. Tik in de rij 'Criteria' en in de kolom van de veldnaam 'Geslacht' de expressie: =1

  1. Voer de query opnieuw uit door op de knop te klikken en stel vast dat enkel de vrouwelijke medewerkers in de uitkomsttabel voorkomen (in de onderstelling uiteraard dat je eerder met behulp van voornoemd formulier voor elke medewerker het geslacht hebt ingevoerd).

2.2. Meerdere criteria voor eenzelfde veld invoeren

In het ontwerpraster kunnen meerdere criteria voor eenzelfde veld worden opgegeven, die allen gelijktijdig moeten worden toegepast bij het uitvoeren van de query.

Een voorbeeld: onderstel dat in de tabel 'Werknemers Adressen' voor sommige medewerkers het geslacht werd ingevoerd als 'Onbekend' (code 9) en dat we in query 'Werkneemsters naar datum indiensttreding' ook deze 'onbekenden' willen weergeven.

We moeten voor het veld dan twee mogelijke waarden invoeren: ofwel code 1 ofwel code 9

  1. Klik in de cel op het snijpunt van de rij 'Of:' en de kolom 'Geslacht'
  2. Tik als nieuw criterium het cijfer 9 in.

Voer de query opnieuw uit en bemerk dat - indien in de onderliggende tabel voor het geslacht van werknemers de code 9 werd ingevoerd - werknemers met code 1 of met code 9 als waarde voor het tabelveld 'Geslacht' worden weergegeven.

Omdat het hier slechts een oefening betreft, kan je het toegevoegde criterium best terug verwijderen.

Uiteraard kunnen meerdere criteria gelijktijdig voor eenzelfde of voor verschillende velden worden ingevoerd, zoals we straks zullen zien.

2.3. Velden in de uitkomst verbergen

Vermits in de kolom 'Geslacht' van de queryuitkomst thans overal de code één voorkomt én omdat in de titel van de query reeds is aangegeven dat het om vrouwelijke medewerkers gaat, is het tonen van het veld 'Geslacht' eigenlijk overbodig.

Om het veld uit de uitkomsttabel te verwijderen, volstaat het om in het ontwerpraster van de query in de kolom 'Geslacht' het vinkje in de rij 'Weergeven:' weg te halen door er één keer op te klikken.

Voer de query opnieuw uit en bemerk dat de kolom 'Geslacht' niet meer wordt getoond:

2.4. Uitkomst sorteren

2.4.1. Sorteren op één veld

Stel dat, zoals eerder gezegd, de uitkomst van deze query een sortering op datum van indiensttreding behoeft.

  1. Klik in de kolom van het veld 'Datum in dienst' in de rij 'Sorteervolgorde', waardoor een vervolgknop verschijnt in deze cel.

  2. Klik op de vervolgknop om een vervolgmenu te openen waarin de gewenste sorteervolgorde kan worden geselecteerd: selecteer thans 'Oplopend'.

  3. Voer de query opnieuw uit en bekijk het resultaat.

  4. Sla de query opnieuw op om de aangebrachte wijzigingen te bewaren.

2.4.2. Sorteren op twee velden

Als vanzelfsprekend kunnen in één query meerdere sorteervolgordes gelijktijdig worden ingesteld.

Stel dat je voor deze query beslist dat de uitkomst van deze query een sortering op woonplaats en - binnen elke woonplaats - een sortering op naam behoeft.

  1. Voeg aan de query 'Werkneemsters naar datum indiensttreding' het veld 'Plaatsnaam' toe.

  1. Verwijder de zojuist aangebracht sortering op 'Datum in dienst' door in de keuzelijst van de sorteervolgorde de optie 'Geen' te kiezen

  1. Sorteer, zoals in voorgaande paragraaf beschreven, het veld 'Plaatsnaam' oplopend
  2. Sorteer het veld 'Familienaam' eveneens oplopend

  1. Bekijk het resultaat en stel vast dat de sortering niet overeenstemt met wat je misschien had verwacht:

    1. De records worden in de uitkomstentabel eerst gesorteerd op 'Familienaam'
    2. en vervolgens voor elke familienaam op plaatsnaam

De sorteervolgorde in een query wordt door Access namelijk van links naar rechts uitgevoerd: eerst op het meest linkse veld in het ontwerpraster, dan op (elk) volgend.
Om dit op te lossen kan je:

    1. ofwel het veld 'Familienaam' achter het veld plaatsnaam verplaatsen (of het veld 'Plaatsnaam' vóór het veld 'Familienaam')
    2. ofwel (wanneer voorgaande oplossing niet geschikt blijkt) kan je het veld 'Familienaam' een tweede maal aan de query toevoegen, achter het veld 'Plaatsnaam'.

We kiezen in dit voorbeeld voor deze tweede oplossing.

  1. Verwijder de zojuist ingestelde sorteervolgorde voor het veld 'Familienaam'
  2. Voeg het veld 'Familienaam' een tweede maal toe aan het queryraster achter het veld 'Plaatsnaam' (dubbelklikken op de veldnaam in lijst met tabelvelden lijkt in dit geval de meest aangewezen methode)
  3. Stel de sorteervolgorde voor dit laatst toegevoegde veld in op 'Oplopend'
  4. Zorg ervoor dat het laatst toegevoegde veld niet wordt weergegeven

  1. Bekijk het resultaat opnieuw: precies wat we nodig hadden!

2.5. Een query opslaan onder een andere naam

Om de query 'Werkneemsters naar datum indiensttreding' in zijn oorspronkelijke vorm te bewaren en de gewijzigde query uit de voorgaande paragraaf eveneens te bewaren, kan je de query best opslaan onder een andere naam.

Je gaat daartoe als volgt te werk:

  1. Klik op het tabblad 'Bestand'
  2. Klik op de optie 'Object opslaan als' in de Backstage, waardoor het dialoogvenster 'Opslaan als' verschijnt
  3. Access stelt voor om de originele query 'Werkneemsters naar datum indiensttreding' op te slaan onder de naam 'Kopie van Werkneemsters naar datum indiensttreding'

    Wijzig de voorgestelde naam in een betekenisvolle naam ; bijvoorbeeld: "Werkneemsters naar datum indiensttreding sortering op plaatsnaam" (bemerk dat het aantal tekens dat je voor de naam kan invoeren beperkt is!)
  4. Klik op de 'OK'-knop

  1. Sluit de query en open opnieuw de query 'Werkneemsters naar datum indiensttreding'

2.6. Berekende velden toevoegen

In een query is een berekend veld een veld dat niet als dusdanig in de onderliggende tabel voorkomt, maar dat op basis van één of meerdere velden in de tabel wordt berekend.

Onderstel dat in de tabel onder meer twee velden voorkomen die de naam van een werknemer beschrijven: het veld 'Familienaam' en het veld 'Voornaam'.  
Onderstel verder dat in het resultaat van de query niet voor elke werknemer eerst de achternaam (Pieters) en daarachter de voornaam (Petra) moet worden weergegeven, zoals in het voorbeeld in één van de bovenstaande figuren. We willen daarentegen in het resultaat van de query elke naam weergeven zoals 'P. Pieters' in één nieuw veld (kolom) dat we bijvoorbeeld 'Volledige naam' noemen.

Om dit te realiseren moet een nieuw, zogenaamd 'berekend veld' worden gemaakt in het ontwerp van de query waarin voor elke werknemer voorkomt:

      1. de eerste letter van de voornaam uit het veld 'Voornaam'
      2. vervolgens een punt
      3. dan een spatie (blanco)
      4. en ten slotte de gehele familienaam uit het veld 'Familienaam'

Dergelijke 'expressie' invoeren gaat als volgt:

  1. Klik in de rij 'Veld' op de eerstvolgende lege cel (in onderstaande figuur is dit de cel rechts van het veld 'Datum in dienst'). Je kan de kolom eventueel wat breder maken door de muiswijzer op een kolomrand te plaatsen en met ingedrukte linkermuisknop de dubbele pijl te verslepen.

  1. Tik in als veldnaam Volledige naam (dit is de naam van het nieuwe berekende veld)

  2. Tik daarachter een dubbel punt

  3. Vervolgens moet een functie worden ingevoerd, die de beginletter van de voornaam isoleert.  Dit kan met behulp van de functie 'Left'.  Opdat deze functie correct zou werken moeten twee argumenten worden meegegeven: de naam van het veld én het aantal tekens dat moet worden overgenomen.
    Tik daartoe achter de dubbele punt Left([Voornaam];1) .  Deze functie betekent het volgende: isoleer uit het veld [Voornaam] (veldnamen moeten in functies steeds met rechte haken omsloten worden), te beginnen van links, één karakter.

  4. Op dit moment staat in dit veld dus de uitdrukking (expressie) Volledige naam:Left([Voornaam];1). Wanneer je de query thans uitvoert verschijnt in het resultaat uiterst rechts een kolom waarin de beginletter van de voornaam van alle werknemers wordt getoond.

  5. Het punt en de blanco achter deze beginletter is een tekenreeks die je pas kan toevoegen na het plaatsen van de ampersand (&).  Daarenboven moeten tekenreeksen tussen aanhalingstekens worden geplaatst.

  6. Vul dus de expressie aan met & ". " (een blanco, een ampersand, een blanco, open de dubbele aanhalingstekens, een punt, een blanco, sluit de aanhalingstekens).

  7. De expressie luidt thans: Volledige naam:Left([Voornaam];1) & ". " 
    Wanneer je de query uitvoert, verschijnt in de meest rechtse kolom voor elke werknemer de eerste letter van de voornaam, gevolgd door een punt en een blanco.

  8. Om ten slotte de familienaam aan de expressie toe te voegen vul je de uitdrukking aan met de veldnaam waarin de familienamen ingevoerd werden:

    • je plaatst deze weer tussen rechte haken

    • en laat deze veldnaam weer voorafgaan door een ampersand

    • zoals in: & [Familienaam]
      De volledige expressie luidt thans: 

    Volledige naam:Left([Voornaam];1) & ". " & [Familienaam]

  9. Wanneer je de query nu uitvoert, verschijnt in de meest rechtse kolom de beginletter van elke voornaam, gevolgd door een punt een blanco en de volledige familienaam.

Noot: Op de volgende webpagina wordt het opstellen van expressies nader toegelicht

3. Oefening

  1. Open je 'Personeelsdatabase'
  2. Bouw op basis van de tabel 'Werknemers Adressen' een nieuwe query met behulp van de knop 'Queryontwerp'
  3. Maak een namenlijst waarin enkel de namen, voornamen en de datum uit dienst van werknemers voorkomen
  4. Selecteer enkel de werknemers, die niet langer in dienst zijn
  5. Sorteer deze namenlijst op familienaam
  6. Bewaar deze query onder de naam 'Namenlijst uitgestroomde werknemers'

In de voorbeelddatabase 'PersoneelsdatabaseVoorbeeld.accdb' kan je een voorbeeld van deze query vinden.

4. Bronnen

    Helpprogramma bij Microsoft Access 2010: zoek op 'Inleiding tot query's'.