Achtergrondinformatie
De afgelopen tijd ben ik bezig geweest met het ontwikkelen van applicatie voor PABO-studenten. Met behulp van deze applicatie kunnen studenten van de PABO lesvoorbereidingen maken in het kader van stages die zij moeten lopen bij een basisschool. De applicatie zelf is volledig functioneel.
Het enige onderdeel wat nog ontbreekt is een zoekfunctie. Deze wil ik nu gaan maken. Het is de bedoeling dat er een willekeurige waarde (tekenreeks) wordt gezocht in een van de aanwezige tabellen. Hiervoor wil ik gebruik maken van SQL.
In een hiervoor gemaakt zoekformulier kan de gebruiker een zoekterm invullen, waarna er in de onderliggende tabel wordt gezocht naar alle records waarin de zoekterm voorkomt.
Opbouw van de applicatie
De applicatie is gemaakt in Access XP. Er wordt veelvuldig gebruik gemaakt van queries en Visual Basic for Applications (VBA).
Er moet gezocht worden in de volgende tabellen:
- Stageschool
- Stageperiode
- Les
Het zoekformulier heb ik onderverdeeld in drie gedeeltjes: een voor elke tabel waarin gegevens gezocht moeten worden. Dit is ook duidelijk voor de gebruiker(s).
Ik wil voor elk van de onderdelen een aparte zoekquery maken. Het is de bedoeling dat elke query een aparte tabel doorzoekt. Met andere woorden: als een gebruiker iets wil zoeken in de tabel Les, dan wordt de query aangeroepen die de tabel Les doorzoekt. De zoekquery moet de waarde opdoeken die in het daarvoor bestemde invoerveld is gegeven.
Probleem
Ik beperk me hier nu even tot de tabel Les. Het zoekformulier heeft een invoerveld met de naam "Txt_les_zoek". Ik wil nu dat de query alle records weergeeft waarin de waarde in het vak "Txt_les_zoek" voorkomt. Om de waarde uit het invoerveld te gebruiken gebruik ik de volgende variabele:
De bedoeling is nu dat de query uit de tabel Les alle records weergeeft waarin deze variabele voorkomt. De query moet daarbij alle velden doorzoeken en daarbij de volledige records weergeven.
Ik probeer daarvoor het volgende:
Als ik deze query wil uitvoeren, krijg ik echter de foutmelding dat ik een subquery heb gemaakt die meer dan één veld kan weergeven zonder dat ik gebruik heb gemaakt van het EXISTS commando. Het is juist de bedoeling dat er meerdere velden weergegeven kunnen worden.
Als ik mijn boeken raadpleeg omtrent het EXISTS commando, komt het er op neer dat ik in WHERE-clausule van de subquery moet aangeven in welke kolommen van de tabel Les gezocht moet worden. Ik wil echter de hele tabel doorzoeken (dus alle kolommen). Hoe kan ik dit oplossen? Ik wil dus dat alle kolommen doorzocht moeten worden, maar het is geen doen om alle kolomnamen in te geven. Het is bijvoorbeeld niet mogelijk om het volgende aan te geven:
De afgelopen tijd ben ik bezig geweest met het ontwikkelen van applicatie voor PABO-studenten. Met behulp van deze applicatie kunnen studenten van de PABO lesvoorbereidingen maken in het kader van stages die zij moeten lopen bij een basisschool. De applicatie zelf is volledig functioneel.
Het enige onderdeel wat nog ontbreekt is een zoekfunctie. Deze wil ik nu gaan maken. Het is de bedoeling dat er een willekeurige waarde (tekenreeks) wordt gezocht in een van de aanwezige tabellen. Hiervoor wil ik gebruik maken van SQL.
In een hiervoor gemaakt zoekformulier kan de gebruiker een zoekterm invullen, waarna er in de onderliggende tabel wordt gezocht naar alle records waarin de zoekterm voorkomt.
Opbouw van de applicatie
De applicatie is gemaakt in Access XP. Er wordt veelvuldig gebruik gemaakt van queries en Visual Basic for Applications (VBA).
Er moet gezocht worden in de volgende tabellen:
- Stageschool
- Stageperiode
- Les
Het zoekformulier heb ik onderverdeeld in drie gedeeltjes: een voor elke tabel waarin gegevens gezocht moeten worden. Dit is ook duidelijk voor de gebruiker(s).
Ik wil voor elk van de onderdelen een aparte zoekquery maken. Het is de bedoeling dat elke query een aparte tabel doorzoekt. Met andere woorden: als een gebruiker iets wil zoeken in de tabel Les, dan wordt de query aangeroepen die de tabel Les doorzoekt. De zoekquery moet de waarde opdoeken die in het daarvoor bestemde invoerveld is gegeven.
Probleem
Ik beperk me hier nu even tot de tabel Les. Het zoekformulier heeft een invoerveld met de naam "Txt_les_zoek". Ik wil nu dat de query alle records weergeeft waarin de waarde in het vak "Txt_les_zoek" voorkomt. Om de waarde uit het invoerveld te gebruiken gebruik ik de volgende variabele:
code:
1
| [Forms]![Zoeken]![Txt_les_zoek] |
De bedoeling is nu dat de query uit de tabel Les alle records weergeeft waarin deze variabele voorkomt. De query moet daarbij alle velden doorzoeken en daarbij de volledige records weergeven.
Ik probeer daarvoor het volgende:
code:
1
2
3
4
5
| SELECT l.* FROM Les l WHERE [Forms]![Zoeken]![Txt_les_zoek] = (SELECT q.* FROM Les q) |
Als ik deze query wil uitvoeren, krijg ik echter de foutmelding dat ik een subquery heb gemaakt die meer dan één veld kan weergeven zonder dat ik gebruik heb gemaakt van het EXISTS commando. Het is juist de bedoeling dat er meerdere velden weergegeven kunnen worden.
Als ik mijn boeken raadpleeg omtrent het EXISTS commando, komt het er op neer dat ik in WHERE-clausule van de subquery moet aangeven in welke kolommen van de tabel Les gezocht moet worden. Ik wil echter de hele tabel doorzoeken (dus alle kolommen). Hoe kan ik dit oplossen? Ik wil dus dat alle kolommen doorzocht moeten worden, maar het is geen doen om alle kolomnamen in te geven. Het is bijvoorbeeld niet mogelijk om het volgende aan te geven:
code:
1
| WHERE EXISTS ( SELECT q.* FROM Les q WHERE q.* = [Forms]![Zoeken]![Txt_les_zoek]) |
Who is General Failure and why is he reading my hard drive?