Ik heb je een klein beetje om het tuintje geleid, want het antwoord zou goed kunnen zijn als het op een formulier stond, maar de regel komt uit de functie, niet uit het formulier. Me.Disc is daarom fout. Dus ik pak de functie er weer even bij.
Code:
Function fncDiscNummer(Disc As Integer) As Integer
strSQL = "SELECT TOP 1 DISC_INFO.DISC_FOLLOW " _
& "FROM CDS INNER JOIN DISC_INFO ON CDS.CD_NR = DISC_INFO.CD_NR " _
& "WHERE (CDS.CD_NR = " & Disc & ") "
Hier zie je achter Function tussen de haakjes (Disc As Integer) staan. Hierbij is Disc de parameter die je meegeeft als je de functie aanroept. Dat kan een formulierveld zijn met de naam [PietjePuk], of het veld kan [Disc_NR] heten, dat maakt voor de functie zelf allemaal niet uit. In de functie wordt de waarde in de parameter DISC gezet. En die wordt dus verder in de query gebruikt die wordt opgebouwd in de functie.
Als je de hele query in de variabele tmp zou zetten
Code:
tmp = Inputbox("","",strSQL)
en je voert de functie uit, dan stopt hij even met de inputbox, waar de opgebouwde SQL in staat. Die kun je kopiëren, en in een nieuwe query plakken. De code hierboven gebruik ik dus heel vaak om de opbouw van een SQL code te controleren. Vaak zit er een fout in (spatie te weinig bijvoorbeeld) en dan doet de functie het niet. Door de query te testen, zie je waar de fout zit.
Dus om het verhaal samen te vatten: In de functie geef je een waarde mee die in Disc wordt gezet. In de query wordt die waarde letterlijk in de WHERE constructie gezet, zodat je fysiek op een echte waarde filtert.