Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: AMB am September 17, 2013, 13:36:36

Titel: Passwort-Abfrage
Beitrag von: AMB am September 17, 2013, 13:36:36
Hallo Zusammen!

Ich würde gerne die meine Access-Datenbank über eine Passwortabfrage starten. Ich habe schon das Netz durchforstet, aber da ich keine große Leuchte in Sachen VBA bin, bekomme ich das nicht wirklich hin.

Die Datenbank wird mit einem Formular (frmLogin) geöffnet. Im Formular sind ein Kombinationsfeld (cboBenutzer), ein Textfeld (txtPasswort) und zwei Schaltfächen (cmdAbbrechen, cmdLogin) verbaut. Das Kombinationsfeld ist an eine Tabelle (tblPasswort) geknüpft. Die Tabelle besteht aus ID, Benutzer und Passwort.
Nach Klicken der Schaltfläche "Login" soll also geprüft werden, ob das richtige Passwort eingegeben wurde und dann ein Formular öffnen.

Ich bekomme allerdings die entsprechende If-Anweisung nicht hin. Also der Abgleich des Passwortes:
Mein bisheriger Gedankengang:

Private Sub cmdLogin_Click()

    If Administrator (ID=1) Then
        DoCmd.Close acForm, Screen.ActiveForm.Name
        DoCmd.OpenForm "Formular1", acNormal
    ElseIf andere Benutzer (ID>1) Then
        DoCmd.Close acForm, Screen.ActiveForm.Name
        DoCmd.OpenForm "Formular2", acNormal
    Else
        DoCmd.Quit
    End If
   
End Sub


Die zweite Frage:
Wie kann ich den eingeloggten Benutzer namentlich auf anderen Formblättern anzeigen lassen?

Ich hoffe es ist verständlich und bitte um Eure Hilfe!
Titel: Re: Passwort-Abfrage
Beitrag von: bahasu am September 17, 2013, 14:07:23
Hi,

nach dem ersten else kommt ein zweites else?!?
Soll das zweite else verwendet werden, wenn z.B. ID=0?

Ein angemeldeter Benutzer ist per currentuser zu erhalten.

Harald
Titel: Re: Passwort-Abfrage
Beitrag von: AMB am September 17, 2013, 14:13:28
Hallo,

Wenn der Administrator sich einloggt (der ist die ID 1), dann soll sich Formular1 öffnen, bei allen anderen Benutzern soll sich dann Formular2 öffnen. Sollte das Passwort falsch sein, so sollte die Datenbank geschlossen werden.
Titel: Re: Passwort-Abfrage
Beitrag von: bahasu am September 17, 2013, 14:20:28
Hi,

Zitat von: QMB am September 17, 2013, 14:13:28
Sollte das Passwort falsch sein, so sollte die Datenbank geschlossen werden.

Wie wird festgestellt, dass das Passwort falsch ist?
{Passwort steht in Tabelle: und dann? Gibt es eine Variable (z.B. per dlookup gefüllt?), die die Entscheidung (Passwort ok/nicht ok) enthält?}

Harald
Titel: Re: Passwort-Abfrage
Beitrag von: DF6GL am September 17, 2013, 14:21:12
Hallo,


in etwa so:

Private Sub cmdLogin_Click()
If Len(nz(Me!cboBenutzer.Column(2) ,"")) =0 Then Docmd.Quit

If Me!cboBenutzer.Column(1)  = "Administrator"  Then
       If Not StrComp(Me!cboBenutzer.Column(2),  Me!txtPasswort,0)   Then

           DoCmd.OpenForm "Formular1", acNormal
           DoCmd.Close acForm, Me.Name

       Else
           Msgbox "Passwort falsch"
       End If  

Else
       If not StrComp(Me!cboBenutzer.Column(2),  Me!txtPasswort,0)   Then

       DoCmd.OpenForm "Formular2", acNormal
       DoCmd.Close acForm, Me.Name
       Else
           Msgbox "Passwort falsch"
       End If


End If

End Sub

(unchecked)



Wenn "cboBenutzer"  so eingestellt ist:

Datensatzherkunft:  Select  ID, Benutzer, Passwort from tblPasswort
Gebundene Spalte:1
Spaltenanzahl:3
Spaltenbreiten: 0cm; 3cm;0cm
Titel: Re: Passwort-Abfrage
Beitrag von: bahasu am September 17, 2013, 14:34:09
Hi,

auf die Gefahr hin, dass ich mit der nächsten Frage ein neues Fass aufmache:

Wodurch unterscheiden sich die beiden Formulare?

Wenn die Unterschiede gering sind, halte ich es für beser, nur ein Formular zu verwenden (auch Formulare können redundante Daten darstellen), das dann je nach Admin oder NormalUser angepaßt wird.

Harald
Titel: Re: Passwort-Abfrage
Beitrag von: DF6GL am September 17, 2013, 14:43:31
Hallo,

das ist kein neues Fass,   :D    sondern zeigt nur auf, dass es am Besten wäre, sich erst einmal ein genaues Konzept für eine solche Benutzersteuerung zurechtzulegen   :)
Titel: Re: Passwort-Abfrage
Beitrag von: AMB am September 17, 2013, 14:51:36
Habe gerade denn Code von Franz eingeben. Funktioniert leider nicht. Access wird immer beendet. cboBenutzer ist übrigens genauso eingestellt.

Wie festgestellt wird, ob das Passwort falsch ist? Genau das ist mein Problem!!! Ich weiß nicht, wie man diesbezüglich das "If" zusammenbaut.
Inhalt txtPasswort muss mit dem entsprechenden Datensatz und dem Passwort aus tblPasswort übereinstimmen.
Aber wie formuliere ich das richtig???
Titel: Re: Passwort-Abfrage
Beitrag von: bahasu am September 17, 2013, 14:59:41
Hi,

und hier der nächste nicht getestete Code.

If Me.Name_vom_Steuerelement_in_dem_das_Passwort_eingetragen_wird <> nz(dlookup("Name des Feldes in der Tabelle das das Passwort enthält", "Name der Tabelle", "id = " & id_Benutzer), "") then
    hier kommen Zeilen, mit der Aufforderung das Passwort erneut einzutragen oder ggf sofort die Datenbank zu schließen

else
    hier stehen die Abfragen nach Admin bzw. NormalUser
end if

Wie ermittelst Du die ID vom Benutzer?

Ohne konkretere Infos, ist keine optimale Hilfe machbar.
"id" muß an Deinen Namen angepaßt werden, analoges gilt für die andere id.


Harald
Titel: Re: Passwort-Abfrage
Beitrag von: DF6GL am September 17, 2013, 15:13:02
Hllo,

habe meinen Code zwar immer noch nicht selber getestet, aber der geht davon aus, dass im Kombi der Benutzer ausgewählt wird (da spielt die ID gar keine Rolle mehr) und im Feld "txtPasswort" das Passwort durch den User eingegeben wird.  Mit StrComp wird diese Eingabe mit dem gespeicherten Passwort case-sensitiv verglichen und entspr. reagiert.


Wenn die Applikation immer verlassen wird, dann dürfte(n) in der Tabelle noch gar kein()e Passwört(er) hinterlegt sein...
Titel: Re: Passwort-Abfrage
Beitrag von: AMB am September 17, 2013, 16:17:45
Hallo Franz,

ich habe nochmal deinen Code eingefügt und siehe da es funktioniert einwandfrei. Danke! (Keine Ahnung was ich da vorher falsch gemacht habe!?)

Jetzt nochmal zum Benutzer anzeigen lassen. Wenn ich currentuser benutze, dann zeigt er mir immer "Admin" an!
Gibt es eine Möglichkeit, wie ich den Benutzer (aus meiner Tabelle) in dem Formular anzeigen lassen kann? Ich möchte das verwenden um Änderungen zu protokollieren.
Titel: Re: Passwort-Abfrage
Beitrag von: DF6GL am September 17, 2013, 16:45:41
Hallo,

1)  Currentuser zeigt den im Moment an der Access-DB-Anwendung angemeldeten Benutzer an.  Der ist IMMER Admin, wenn das Access-Sicherheitssystem nicht aktiviert ist (--> aktiviert: Der Benutzer "Administrator" hat ein Passwort verpasst bekommen).  Dieser Benutzer ist NICHT identisch mit dem Windows-Anmeldenamen.  Das Access-Sicherheitssystem wird nur noch bei MDB-Dateien unterstützt, und da auch nur rudimentär ab Version A2007.

2) Den "Benutzer aus Deiner Tabelle" siehst Du doch im Kombifeld...  Wenn Du Änderungen protokollieren willst, muss das ja in einer separaten Tabelle passieren, und dort kannst Du den ID-Wert des akt. Benutzers (der , der sich über die Komibiauswahl identifiziert hat) mit ablegen.

Titel: Re: Passwort-Abfrage
Beitrag von: AMB am September 17, 2013, 16:56:52
Dann darf aber das Formular frmLogin nach dem Login nicht geschlossen werden, sondern muss unsichtbar werden. Richtig?
Oder kann der eingeloggte Benutzer anders "gemerkt" werden?
Titel: Re: Passwort-Abfrage
Beitrag von: DF6GL am September 17, 2013, 19:13:16
Hallo,

es gibt weitere Möglichkeiten..


Abspeichern der Benutzer-ID in einer Temp-Tabelle (oder gleich mit einen zusätzlichen Ja/Nein Feld "eingeloggt" in der User-Tabelle)
Ablegen der ID in einer globalen Variablen, besser aber in einem Collection-Element
Erzeugen und Abspeichern in einer benutzerdefinierten Eigenschaft (Property)
.
.
Titel: Re: Passwort-Abfrage
Beitrag von: AMB am September 18, 2013, 08:05:08
OK, danke. Ich werde mich dann erstmal einlesen!