Tempvars variabelen
Het is erg handig variabelen te gebruiken die buiten het formulier of rapport waar die is aangemaakt. Stel je wilt de ID van een klant in het geheugen plaatsen en die vervolgens door de hele database heen gebruiken als criteria.
Je kunt hiervoor een zogenaamd get set statement gebruiken waarmee je na een selectie de variabele in een globale variabele vastzet die je op elke gewenste plaats binnen de database weer kunt opvragen als een criteria.
Dat doe je op de volgende manier.
[codesyntax lang=”vb” container=”div” strict=”yes” blockstate=”expanded”]
Global globale_Klantid As Long Public Sub setKlantid(Klantid As Long) On Error GoTo setKlantid_Error globale_Klantid = Klantid On Error GoTo 0 Exit Sub setKlantid_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure setKlantid of Module Static_variables" End Sub Public Function getKlantid() As Long On Error GoTo getKlantid_Error getKlantid = globale_Klantid On Error GoTo 0 Exit Function getKlantid_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure getKlantid of Module Static_variables" End Function
[/codesyntax]
Wanneer je nu bij een selectie uit een combo box in de afterupdate gebeurtenis de code setKlantid(comboxnaam) zet zal de id van de klant globaal worden gedeclareerd.
In bijvoorbeeld een record source achter een formulier kun het recordset filteren doormiddel van de getclient() te gebruiken.
Zet in het query venster de volgende criteria
Er is een groot nadeel wanneer je dit gebruikt, wanneer je een runtime error krijgt in je VBA code en je hebt niet consequent een error afhandeling ingebouwd worden alle ingestelde globale variabelen in een keer leeg gegooid.
Je moet dan eigenlijk afhankelijk van de hoeveelheid variabelen die je hebt ingesteld opnieuw beginnen. Dus je applicatie opnieuw opstarten.
Om dit probleem te voorkomen kun je gebruik maken van de zogenaamde Tempvars. Tempvars zijn net zo in te stellen als een get / set statement allen veel directer en bij een runtime error worden ze niet geleegd. Ze behouden hun waarde totdat je zelf een andere toekent. Je mag zelf weten welke naam je aan je Tempvars geeft.
Wanneer je zoals boven genoemd een klant selecteert uit een combo box dan stel je Telpas als volgt in.
TempVars!Klantid = me.combobox.value
De waarde wordt dan overgenomen en is in de gehele database bekend. Je kunt die dan als criteria in het record source van je formulier gebruiken. Dit werkt het zelfde als voorgaand Getklantid(), alleen deze variabele is stabiel en wordt niet geleegd wanneer er een runtime error optreed.
[codesyntax lang=”vb” container=”div” strict=”yes” blockstate=”expanded”]
TempVars!variabele
[/codesyntax]
