Het volgende voorbeeld heb ik vertaald vanuit een Delphi code; hierbij wordt de uitkomst van de functie-aanroep CheckBSN als Waar of Niet-waar beoordeeld; bij Waar levert-ie -1 terug, bij Onwaar 0.
Het verschil met het vorige voorbeeld is, dat je As Boolean achter de functienaam zet, om aan te geven dat je een Ja/Nee antwoord wilt hebben.
Code:
Function CheckBSN(BSN As Long) As Boolean
Dim i As Integer, Check As Integer, Product As Integer
Product = 0
' Laatste cijfer opslaan en strippen. Dit is de verificatie
Check = BSN Mod 10
BSN = BSN / 10
i = 2
Do While BSN > 0
' Volgende cijfer vermenigvuldigen met steeds 1 meer
Product = Product + (BSN Mod 10) * i
BSN = BSN / 10
i = i + 10
Loop
CheckBSN = (Product Mod 11)
End Function
Je zet de functie(s) bij voorkeur in een Modules blad, dat je vanuit het VBA venster kunt maken met Invoegen, Module.
In een query kun je de functies dan terugvinden in de Opbouwfunctie voor Expressies (<Ctrl>+<F2>, in de groep Functies, en dan de groep onder Ingebouwde functies.
Je kunt een functie ook direct intypen in een queryveld, is vaak een stuk sneller. Als je veld Sofienummer heet luidt de formule: CheckBSN([Sofienummer]). Evenzo voor de andere functie.
Je kunt dit in de functie als volgt terugherleiden:
Function BSN(SOFI As Long)
Betekent: de functienaam (BSN heeft een invoerwaarde nodig van de gebruiker. De functie noemt deze invoer in het voorbeeld: SOFI
Zoals je ziet, zijn het twee totaal verschillende manieren van berekenen, in ik krijg als ik ze zelf uitprobeer, ook verwarrende gegevens terug....
Niettemin, de bedoeling is nu hopelijk wat duidelijker.
Michel