Dan heb je vermoedelijk toch iets niet hetzelfde gedaan

De OpenRecordset regel opent een query, en in mijn voorbeeld wordt die zo opgebouwd:
Code:
strSQL = "SELECT TOP 1 Gewicht, Datum FROM Gewichtlogboekdetails " _
& "WHERE (GewichtID = " & Forms![Fitness]![Subformulier Gewichtlogboek].Form![GewichtID] & ") " _
& "ORDER BY Datum DESC;"
Hierbij haal ik de laatste waarden van de velden [Gewicht] en [Datum] uit de tabel [Gewichtlogboekdetails] op, gebaseerd op een aflopende datum. Met TOP 1 geef je aan dat je 1 record wilt zien, en door aflopend op datum te sorteren, pak je automatisch het laatste record. Vervolgens wordt in de code het gewicht toegekend aan de variabele <MaxGewicht> (de functienaam dus).
Als je een foutmelding krijgt, dan komt dat doordat de query geen resultaat oplevert. Dat kan als oorzaak hebben dat er geen record is gevonden. En dat komt dan ofwel doordat de tabel niet bestaat (kan je hem ook niet openen) ofwel doordat het criterium niks oplevert. Dat criterium is:
WHERE (GewichtID = " & Forms![Fitness]![Subformulier Gewichtlogboek].Form![GewichtID] & ")
Je zoekt dus in de tabel naar een GewichtID van een record op het subformulier. De reden dat er niks gevonden wordt kan zijn: je hebt een nieuwe klant ingevoerd, en nog geen gewichtmeting gedaan. Dan kun je het GewichtID ook niet opzoeken in de tabel <Gewichtlogboekdetails>. Overigens loopt hij, als ik dat naboots, dan vast op de regel MaxGewicht en niet op OpenRecordset. En dat neigt dan weer naar de conclusie dat de tabel bij jou anders heet.
Het tweede probleem kun je simpel oplossen door een aanpassing van de functie:
Code:
Function MaxGewicht() As Double
Dim strSQL As String
strSQL = "SELECT TOP 1 Gewicht, Datum FROM Gewichtlogboekdetails " _
& "WHERE ((GewichtID = " & Forms![Fitness]![Subformulier Gewichtlogboek].Form![GewichtID] & ")) " _
& "ORDER BY Datum DESC;"
With CurrentDb.OpenRecordset(strSQL)
If .RecordCount = 0 Then
MaxGewicht = 0
Else
MaxGewicht = .Fields(0).Value
End If
End With
End Function
Daarbij moet ook het tekstvak een andere formule krijgen:
Besturingselementbron:
=IIf(MaxGewicht()=0;0;[txtStartgewicht]-MaxGewicht())