PDA

Vollständige Version anzeigen : Problem mit If Not or If Not...


attendorn
28.04.2011, 09:06
Hallo zusammen,
ich bin mal wieder auf eure Hilfe angewiesen ;)

Mein Problem ist folgendes:

Ich habe mir eine Benutzersteuerung gebastelt, welche beim Öffnen eines Formulares die Benutzerrechte prüft und und darauf hin bestimmte mölichkeiten zulässt oder eben auch nicht.
Der Testnutzer hat die Berechtigung "Bearbeiten", welche auch im nachfolgenden code zu finden ist.
Ich benutze folgenden code:

Private Sub Form_Open(Cancel As Integer)
Dim lngAktuellerBenutzerID As Long
lngAktuellerBenutzerID = CLng(OptionLesen("CurrentUserID"))
If Not BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Or Not BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten") Then
Me.Schalter1.Enabled = False
If Not BerechtigungLesen(lngAktuellerBenutzerID, "Kataloge lesen") Then
Me.Befehl81.Enabled = False
Else
Me.Befehl81.Enabled = True
End If
Else
Me.Schalter1.Enabled = True

End If
End Sub

Leider funktioniert das so irgendwie nicht.
Wenn nur ein Kriterium prüfen lasse wie im folgenden code dann klappt es:
Private Sub Form_Open(Cancel As Integer)
Dim lngAktuellerBenutzerID As Long
lngAktuellerBenutzerID = CLng(OptionLesen("CurrentUserID"))
If Not BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Then
Me.Schalter1.Enabled = False
If Not BerechtigungLesen(lngAktuellerBenutzerID, "Kataloge lesen") Then
Me.Befehl81.Enabled = False
Else
Me.Befehl81.Enabled = True
End If
Else
Me.Schalter1.Enabled = True

End If
End Sub

Gebe ich dem User auch noch die Berechtigung "Verwalten" dann funktioniert der ober Code komischer Weise.....
Was mache ich falsch???:(

CptChaos
28.04.2011, 09:11
Zeig uns doch mal die Funktion BerechtigungLesen.
Evtl. wird hier bei nicht vorhandensein der gesuchten Berechtigung ein NULL-Wert geliefert der ggf. berücksichtigt werden müsste.
Z.B. mit NZ

Josef P.
28.04.2011, 09:12
Hallo!

Ich vermute, du willst folgendes:
If Not BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") AND Not BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten") Then

Also
if not False AND not True
'=>
If True AND False
statt
if not False OR not True
'=>
If True Or False

bzw.
If Not (BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") OR BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten")) Then



mfg
Josef

attendorn
28.04.2011, 09:18
Hallo Josef P.

Daaaaanke
Das war die Lösung.
Manchmal hat man wirklich ein Brett vor dem Kopf:cool:
If Not BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Or BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten") Then
If Not BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Or Not BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten") Then


ist ja ein'nicht' im 'nicht' :grins:

If Not BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Or BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten") Then


funktioniert einwandfrei

Besten Dank nochmal :p

Josef P.
28.04.2011, 09:20
If Not BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Or BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten") Then

funktioniert einwandfrei
Bist du sicher?
Ich hätte auf eine fehlende Klammer getippt. ;)

mfg
Josef

attendorn
28.04.2011, 09:27
....habs gerade in allen Forms probiert und es funzt einwandfrei :grins:

Josef P.
28.04.2011, 09:32
Dann hab ich dein Vorhaben falsch verstanden. :)

Zum Ausprobieren:
Private Sub test()

Dim lngAktuellerBenutzerID As Long

If Not BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Or BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten") Then
Debug.Print "Soll das so sein?"
End If

If Not (BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Or BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten")) Then
Debug.Print "Oder ist es so besser?"
End If

End Sub

Private Function BerechtigungLesen(ByVal BenutzerID As Long, ByVal Modus As String) As Boolean
BerechtigungLesen = True
End Function

mfg
Josef

attendorn
28.04.2011, 11:57
Habe es gerade noch mal getestet....

Ihr habt natürlich recht....

If Not (BerechtigungLesen(lngAktuellerBenutzerID, "Bearbeiten") Or BerechtigungLesen(lngAktuellerBenutzerID, "Verwalten")) Then

..so muss es sein :grins:

Besten Dank noch einmal.