Als je zelf een query maakt in het query-ontwerpscherm, dan zul je zien dat je de verschillende onderdelen van de functie scheidt met een puntkomma (

. Als je de query vervolgens bekijkt in het SQL scherm, zul je zien dat de puntkomma's zijn vervangen door komma's.... Dat is dus nogal verwarrend!
De code die Tardis en ik hebben geplaatst, komt uit het SQL venster. Het voordeel van het aanleveren van code vanuit het SQL venster is, dat je de code kunt kopieëren, en zo in het SQL venster kunt plakken. De query moet het dan gelijk doen. Wil je de query zelf opbouwen, wat uiteraard ook kan, dan moet je dus, waar je een komma ziet staan, een puntkomma gebruiken.
Je komt overigens in het SQL scherm via <Beeld>, <SQL>.
Nu de vraag over de Nz functie:
Dit is een Visual Basic functie, waarmee je controleert of een veld leeg is niet. Bij een tekstveld gebruik je normaal gesproken een oproep als: IIF([Veld]="";"";[Veld] & " "). In dit voorbeeld zou je Veld bijvoorbeeld kunnen vervangen door Tussenvoegsel; het is dan een formule waarmee je een tussenvoegsel in een samengevoegd veld Voornaam+Tussenvoegsel+Achternaam kunt zetten. Je krijgt dan geen dubbele spatie als iemand geen tussenvoegsel heeft. Ga je met
getallen werken (en een datum is een getal) dan werkt dat niet. Een getal kan Nul zijn (het getal 0), een waarde bevatten, of leeg zijn, in welk geval de waarde Null is. Omdat je geen vergelijking kunt maken met een veld dat de waarde Null bevat, moet je een leeg datumveld 'vertalen' naar een getal. Dat doe je dus bijvoorbeeld met de functie Nz. De formule
Nz([UitschrDatum],0) beoordeelt dus het veld [UitschrDatum], en vervangt de lege waarde door het getal Nul (0). Omdat je het getal ook nog eens als een Datum wilt verwerken, wordt het getal in [UitschrDatum] ook nog eens omgezet naar datum met de functieCDate. Daarom staat die functie er voor. De volledige functie is dus:
CDate(Nz([UitschrDatum],0)).
Overigens is het technisch mooier om de functie Nz niet te gebruiken, omdat het, zoals gezegd, een VB functie is. En dat maakt de query trager. Beter is dus eigenlijk deze formule:
CDate(IIF([UitschrDatum] Is Null,0;[UitschrDatum]))
Code:
SELECT tblLedenlijst.Nummer, tblLedenlijst.Naam, tblLedenlijst.InschrDatum, CDate(nz([UitschrDatum],0)) AS UitDatum
FROM tblLedenlijst
WHERE CDate(IIF([UitschrDatum] Is Null,0;[UitschrDatum])) >#2/1/2009# ;
Je krijgt de code als code in je tekst met de knop <Code> die je als
# in de werkbalk ziet staan.