Enkel resultaten in query tonen die een waarde bevatten

Status
Niet open voor verdere reacties.

dextro2000

Gebruiker
Lid geworden
21 sep 2011
Berichten
6
Ik zoek me suf op iets wat op het eerste gezicht eenvoudig lijkt. Voor onze school heb ik een tabel gemaakt met onze leslokalen in. Je kan dan voor een bepaalde dag per lokaal de naam van de les ingegeven die op dat moment doorgaat.

Nu wil ik een query die mij zegt op welke dag welke opleidingen doorgaan. Het probleem is dat in het resultaat van mijn query alle leslokalen zitten, ook diegene waar er geen les doorgaat en er dus geen waarde in dat veld staat.

Iemand een idee hoe ik dit kan oplossen ?
 
Filteren.... Alleen weet ik nog niet precies hoe jouw query er uit ziet, dus ik kan er nog weinig van zeggen. Gebruik je bijvoorbeeld een Outer Join? Tel je lessen?
 
Hierbij een screenshot, mss helpt dit ...

ss1.jpg


Ik heb al bij de criteria = Not Null of = Not "" gezet doch dit lukt niet.
 
Ik zie maar één tabel, en geen criterium. Bovendien zie ik van die tabel heel veel dezelfde namen; ik mag hopen dat je de kolommen te smal hebt staan om de volledige naam te laten zien... Maar het belangrijkste: ik zie de velden niet die de lesgegevens zouden moeten bevatten. Wat ik eigenlijk verwachtte te zien, is een record met een veld [Datum], en een veld [lokaal] en een veld [Les].
 
Hier een screenshot van de indeling van records en velden.
tabel.jpg


Ik wil dus een query die me toont wat er op 10 oktober doorgaat, dus voor het veld [Blok B vergaderzaal AV] mag er niets getoond worden.

voorbeeld: (dit komt dan op infopaneel aan de ingang gebouw)
10 oktober 2011: voormiddag:
Blok B vergaderzaal: evaluatiegesprekken
Blok B docentenkamer: evaluatiegesprekken

In de namiddag en avond worden dan andere schermen weergegeven op het paneel.
 
Daar was ik al bang voor.... Dit is een heel onhandige manier van werken, omdat je dus nooit in één keer kan tellen hoeveel zalen bezet zijn of niet, om maar eens een nadeel te noemen ;) Je database is op dit moment niet genormaliseerd, en dat zou ik dus eerst doen. Dat houdt in: maak een aparte tabel met alle lokaalnamen. Die noem je dan bijvoorbeeld tLokalen. Die tabel krijgt minstens twee velden: LokaalID en LokaalNaam. Ik kan mij voorstellen dat je ook nog gegevens als [Verdieping], en [Aantal personen] wilt opslaan, zodat je met planning heel makkelijk groepen op basis van het aantal personen in de juiste lokalen kunt indelen, maar dat is een heel ander verhaal.... Hetzelfde doe je voor de lessen, dus een tabel [tLessen] met [LesID] en [LesOmschrijving]
Om op de vraag terug te komen: je tabel LokaalIndeling bevat dan de velden [Datum], [LokaalID] en [LesID], eventueel nog [DagDeel] als je 's ochtends en 'smiddags andere lessen hebt in een lokaal. De records vul je dan op basis van ingeplande lessen.
Je krijgt dus records met één datum, één lokaal en één les.
Op basis van deze gegevens maak je dan een Totalen query, waarbij je groepeert op Datum en telt op LokaalID. En dan heb je dus je overzicht.... Op basis daarvan kun je een formulier maken, waarbij je heel makkelijk lokalen en lessen kunt indelen, en in de keuzelijsten daarvoor alleen lokalen kunt selecteren die nog vrij zijn.

Op basis van je huidige tabel is het overigens nog wel te doen, maar dat valt in de categorie monnikenwerk, en zelf zou ik daar never nooit niet aan beginnen...
 
Bedankt Michel voor je uitgebreide uitleg. Ik ga die proberen toe te passen, ik laat de afloop weten!

Thx !
 
Om je wat typwerk te besparen: met deze code kun je de veldnamen van je tabel [Lokaalindeling] toevoegen aan een tabel [tLokalen]

Code:
    With CurrentDb.OpenRecordset("Lokaalverdeling")
        For i = 0 To .Fields.Count - 1
            With CurrentDb.OpenRecordset("tLokalen", dbOpenTable)
                .AddNew
                .Fields("Lokaal").Value = .Fields(i).Name
                .Update
                .Close
            End With
        Next i
        .Close
    End With

Als je een knop op een formulier maakt, (mag elk type knop zijn) en de code die in VBA wordt gemaakt vervangt door deze code, zou het moeten werken. Enige maar: de tabel tLokalen moet wel bestaan, met bijvoorbeeld een veld LokaalID van het type Autonummering, en een tekstveld [Lokaal] voor de lokaalnaam.
 
OK, ik heb al heel wat gelezen over genormaliseerde databases. Dat zal al een heel verschil uitmaken qua opbouw en snelheid van de database.

Waar ik vastloop is de totalenquery. Ik groepeer volgens datum maar kan niet optellen via lokaalID, dat veld komt niet voor in de wizard van access 2003...

Ook het formulier zag er al netjes uit, is nu wel weer weg omdat er fouten in zaten doordat die query niet goed was. Ik heb de database eens geupload, mss kan je me nog verder op de goede weg zetten.

database

Alvast bedankt
 
Eerst even wat over de opzet (ik kijk vanavond wel verder...) (Lees ondertussen trouwens ook de cursus Access voor beginners; te vinden in de handleidingen sectie!) . Je relaties zijn namelijk niet het je van dat; op dit moment is geen enkele tabel te koppelen aan de hoofdtabel [Lokaalindeling]. Bovendien (je leest in de cursus waarom...) heb ik een gruwelijke hekel aan opzoeklijsten in tabellen, dus die heb ik er alvast voor je uitgegooid :)

En je query doet inderdaad nog niks, omdat je de verkeerde functie gebruikt om te tellen. Maar daar kijk ik vanavond wel verder naar. Maar zoiets kun je al vrij snel draaien:

Datum D1 D2 D3 D4 D5
18-4-2011 1
18-12-2011 1
19-12-2011 1 1 1
20-12-2011 1 1
21-12-2011 1
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan