Hi. Ich habe in meiner Datenbank eine Rechte-Verteilung eingebaut. Normalen Usern soll das Ribbon und das seitliche Menü mit den ganzen Formularen, Abfragen usw. verborgen bleiben. Hierfür nutze ich folgenden Code:
Option Compare Database
Private Sub Befehl24_Click()
Dim UserPass As String
UserPass = DLookup("Passwort", "Vertrieb", "ID_Vertrieb=" & Me.LogUser)
If Me.txtPass = UserPass Then
Call SetVars
DoCmd.OpenForm "Zentrale"
DoCmd.Close acForm, "Login"
Dim UserState As String
UserState = DLookup("Rolle", "Vertrieb", "ID_Vertrieb=" & p_UserloginID)
If UserState = "User" Then
DoCmd.NavigateTo "acNavigationCategoryObjectType"
RunCommand acCmdWindowHide
DoCmd.ShowToolbar "Ribbon", acToolbarNo
Else
DoCmd.SelectObject acTable, , True
DoCmd.ShowToolbar "Ribbon", acToolbarYes
End If
Else
MsgBox "Falsches Passwort!!! Eingabe wiederholen!!!"
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.NavigateTo "acNavigationCategoryObjectType"
RunCommand acCmdWindowHide
DoCmd.ShowToolbar "Ribbon", acToolbarNo
End Sub
Ich habe nun das Problem, dass sich bei den "Usern" das Formular "Zentrale" nicht öffnet sondern diese nur einen weißen Bildschirm sehen. Wo ist im Code denn das Problem?
Hi,
ich hätte dazu noch drei Fragen:
- was macht die Prozedur "SetVars"?
- was ist bzw. woher kommt "p_UserloginID"?
- was passiert im Formular "Zentrale", gibt es Code dazu?
Hi MaggieMay,
die Prozedur "SetVars" setzt öffentliche Variablen, angepasst an den sich anmeldeten User. Also z.B. Pfadangaben für Verzeichnisse in die die Datenbank Dateien ablegen soll.
p_UserloginID ist die ID des sich anmeldeten Users. Die Variable wird ebenfalls mit SetVars festgelegt. Hierbei übergibt die Prozedur den Wert aus dem Steuerelement LogUser des Login-Formulars an diese Variable.
Zentrale ist ein einfaches Formular, welches im wesentlichen Schaltflächen enthält. Es enthält außer "Bei Klick" Anweisungen keinen weiteren Code.
Das scheint aber alles soweit ok zu sein. Wenn Userstate = User ist (also die vergebene Rolle), dann tritt das Problem auf. Ist die Rolle z.B. Admin, tritt der Fehler nicht auf und Zentrale wird geladen und angezeigt.
Der Code unterscheidet sich an der IF Abfrage. Für "User" werden die Befehle
DoCmd.NavigateTo "acNavigationCategoryObjectType"
RunCommand acCmdWindowHide
DoCmd.ShowToolbar "Ribbon", acToolbarNo
ausgeführt um den "User" keinen Zugriff auf die Formulare, Abfragen, Berichte usw. zu geben. Einer davon scheint das öffnen oder das anzeigen von Zentrale zu verhindern..
Das überzeugt mich nicht, das Formular müsste sich doch auch ohne Ribbon öffnen lassen. Das könntest du aber doch einfach mal schrittweise im Unterbrechungsmodus austesten.
Ich hab es umgeschrieben.. Jetzt läufts:
Option Compare Database
Private Sub Befehl24_Click()
Dim UserPass As String
Dim UserState As String
UserPass = DLookup("Passwort", "Vertrieb", "ID_Vertrieb=" & Me.LogUser)
If Me.txtPass = UserPass Then
Call SetVars
DoCmd.OpenForm "Zentrale"
DoCmd.Close acForm, "Login"
UserState = DLookup("Rolle", "Vertrieb", "ID_Vertrieb=" & p_UserloginID)
If UserState = "Admin" Then
DoCmd.SelectObject acTable, , True
DoCmd.ShowToolbar "Ribbon", acToolbarYes
End If
Else
MsgBox "Falsches Passwort!!! Eingabe wiederholen!!!"
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.NavigateTo "acNavigationCategoryObjectType"
RunCommand acCmdWindowHide
DoCmd.ShowToolbar "Ribbon", acToolbarNo
End Sub
Warum auch immer...
Ich vermute es kommt darauf an, worauf sich dieser Befehl zum Zeitpunkt der Ausführung bezieht:
RunCommand acCmdWindowHide
denn du kannst ja nicht explizit angeben, welches Fenster du meinst.
Vielleicht fühlte sich ja das gerade geöffnete Formular angesprochen? ;-)
Ja, so wird es wohl sein. Nach der Umstellung läuft alles gut. Dennoch vielen Dank.