Je hebt twee soorten modules: Modules en KlassenModules. De Modulepagina die bij een formulier hoort is een Klassenobject. Code die op dat formulier staat, werkt alleen op dat formulier. Heb je een functie die je algemeen wilt inzetten, dan moet je de code dus verplaatsen naar een eigen module, zoals je gedaan hebt met de functie
mySetSec die op de modulepagina modGlbVars staat. Het
aanroepen van een functie op een modulepagina gebeurt op exact dezelfde manier alsof de functie op de formulier-eigen module staat, alleen werkt hij dan dus overal. Je kunt wel functies gebruiken die op een ander formulier staan, maar dan moet dat formulier geopend zijn, en je moet naar het volledige pad verwijzen. Is allemaal dus niet handig. Functies zet je dus best in een aparte module. Meestal moet je dan de
aanroep wel veranderen, omdat je dan niet meer met Me.Objectnaam.Value kunt werken, want Me. werkt alleen op de formulierpagina. Maar dat is simpel op te lossen door het formulier als parameter mee te geven. Jij doet dat zo:
Code:
Public Function mySetSec(Switchboard As String)
Select Case (TempVars!strSecLvl)
Case "Developer"
With Forms(Switchboard)
.DataEntry = True
.AllowEdits = True
.AllowDeletions = True
.AllowAdditions = True
.AllowFilters = True
End With
DoCmd.Close acForm, "Switchboard"
DoCmd.OpenForm "frmlogin"
DoCmd.Quit
End Select
Ik doe het zo:
Code:
Public Function mySetSec(frm As Form)
Select Case (TempVars!strSecLvl)
Case "Developer"
With frm
.DataEntry = True
.AllowEdits = True
.AllowDeletions = True
.AllowAdditions = True
.AllowFilters = True
End With
DoCmd.Close acForm, "Switchboard"
DoCmd.OpenForm "frmlogin"
DoCmd.Quit
End Select
Maar laten we het eens over je tabel "tblSecurity_Sec" hebben, want die vind ik erg vreemd... Je hebt daar 5 selectievakjes waarin je de rechten vastlegt. Maar dat kán nooit goed werken, omdat er (zonder stevig programmeren) geen check kan zijn op het aanklikken van meerdere opties, die elkaar derhalve acuut tegenspreken! Waarom niet één veld [access_level] met daarin een keuzelijst met waarden en ("Alleen lezen";"Alleen data";"Supervisor";"Administrator";"Developer") als rijbron? Het controleren op de gewenste rechten doe je dan zo op je login formulier:
Code:
Else
TempVars.Add "strSecLvl", DLookup("[access_level]", "tblSecurity_Sec", "[userID]='" & Me.txtUserID.Value & "'")
Me.cmdLogIn.Enabled = True
Me.cmdChngPW.Visible = True
Me.cmdLogIn.SetFocus
End If
En zeg nu zelf: da's een stuk simpeler! En veiliger, want met één veld met één keuzelijst kun je maar één waarde selecteren (mits je dat uiteraard instelt; in 2010 kun je multi-keuzelijsten maken. Maar dat is hier zinloos).