Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: mad am November 05, 2019, 00:41:44

Titel: Login Protokoll
Beitrag von: mad am November 05, 2019, 00:41:44
Hallo Zusammen,

beim öffnen meiner DB wird ein Benutzer "Username" und ein "Passwort" abgefragt. Bei richtiger Eingabe gehts entsprechend weiter.

Nun möchte ich je nach dem ob der Login "erfolgreich" war oder "fehlgeschlagen" ist, weil Falscheingabe, dieses protokollieren.

Dazu habe ich im Formular "PasswortAbfrage" zu den beiden schon vorhandenen Feldern, "Text0" für eingabe "Username" und "Text2" für die eingabe "Passwort" ein weiteres ungebundenes Textfeld "LogInStatus" hinzugefügt.
Nun habe ich dem Feld "Text2" "Nach Aktualisierung" dem bereits vorhanden Code einen weiteren Codeschnipsl hinzugefügt:
    If Me!Username = Me!Text0 And Me!Passwort = Me!Text2 Then
          '"erfolgreich" ins Textfeld schreiben
        Me!LogInStatus = "erfolgreich"

    Else
          '"fehlgeschlagen" ins Textfeld schreiben
       Me!LogInStatus = "fehlgeschlagen"
        'Log-in-Protokoll schreiben
                DoCmd.OpenQuery "abf_LogInProtokoll", acNormal, acAdd
End If

Nun sollte eigentlich folgende passieren, Username und Passwort werden mit Text0 und Text2 verglichen, wenn alles i.O. dann sollte ins Feld LogInStatus "erfolgreich" geschrieben werden. Wenn Username und Passwort nicht mit Text0 und Text2 übereinstimmen dann sollte ins Feld "LogInStatus" "fehlgeschlagen" geschrieben werden.
Im Anschluss soll das Ergebnis über eine Anfüge-Abfrage "abf_LogInProtokoll" in die Tabelle "tbl_LoginProtokoll" geschrieben werden.

Nun passiert aber folgendes. Wenn Username und Passwort i.O. sind wird ins Feld "LogInStatus" zwar "erfolreich" geschrieben aber das ganze wird nicht in die "tbl_LoginProtokoll" übertragen. Auch wenn Username und Passwort nicht passen wird ins ins Feld "LogInStatus" "erfolgreich" geschrieben und übertrag funktioniert trotzdem nicht.

Wenn ich den Code wie folgt kürze:
   If Me!Username = Me!Text0 And Me!Passwort = Me!Text2 Then
          '"erfolgreich" ins Textfeld schreiben
        Me!LogInStatus = "erfolgreich"
        'Log-in-Protokoll schreiben
                DoCmd.OpenQuery "abf_LogInProtokoll", acNormal, acAdd
End If

wird zwar das Ergebis in die "tbl_LoginProtokoll" übertragen. Aber egal ob der Vergleich des "Username" und "Passwort" i.O. oder n.i.O. sind, wird ins Feld "LogInStatus" immer "erfolgreich" eingetragen und auch so in die "tbl_LoginProtokoll" übertragen.

Wo liegt denn mein Fehler?
Hätte jemand einen Hinweis für mich?


Gruss
mad

Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 05, 2019, 08:46:14
Hallo,
unklar, was Du hier machst.

Woher kommt Me!Username und was ist das?
Woher kommt Me!Passwort und was ist das?

Welches sind die Eingabefelder, die der User ausfüllen muss?


Debuggen könnte helfen....:
Setze einen Haltepunkt auf das IF-Statement und prüfe den Inhalt der Textfelder.



btw:   Textvergleich für Passwort-Tests sollten mit StrComp() erfolgen, ein normaler "="-Vergleich berücksichtigt keine Groß-/Kleinschreibung.

Docmd.Openquery ist auch Fehl am Platz.   Führe die Insert-Abfrage mit
Currentdb.Execute "abf_LogInProtokoll", dbFailOnError
aus.

Titel: Re: Login Protokoll
Beitrag von: mad am November 05, 2019, 14:30:10
Ich hoffe ich kann es noch etwas besser erklären.

Ich habe ein Formular ,,PasswortAbfrage" mit drei ungebundenen Textfeldern:
,,Text0" für Eingabe eines Benutzers
,,Text2" für die Eingabe eines PW
,,LogInStatus"

,,Username" und ,,Passwort" sind die Felder in der ,,tbl_Benutzer" zum vergleichen.

Ich denke hier ist bereits mein erster Fehler mit Me!Username und Me!Passwort.

Debuggen führe ich immer aus, daß habe ich mir mittlerweilen angewöhnt. Es kommt aber keine Fehlermeldung.

Wenn der ,,Username" und ,,Text0" übereinstimmen und ,,Passwort" und ,,Text2" auch dann soll in Textfeld ,,LogInStatus" der Text ,,erfolgreich" eingetragen werden. Wenn Eingaben in ,,Text0" u. ,,Text2" gemacht werden die nicht zu ,,Username" und ,,Passwort" aus der Tabelle ,,tbl_Benutzer" passen dann soll ins Textfeld ,,LogInStatus" der Text ,,fehlgeschlagen" eingetragen werden.

Die Prozedur soll ,,Nach Aktualisierung" von Text2 starten:
Private Sub Text2_AfterUpdate()
   ......

Egal ob ,,erfolgreich" oder ,,fehlgeschlagen" soll am Ende der Prozedur die Inhalte aus ,,Text0" und ,,LogInStatus" per ,,Anfüge-Abfrage ,,abf_LogInProtokoll" an die tbl_LoginProtokoll" übertragen werden.

Rest kann ich erst heute Abend ausprobieren.

Gruss
Mad
Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 05, 2019, 14:50:19
Hallo,

ist das Formular an die Passwort-/Usertabelle gebunden und stehen demnach die (richtigen) Daten aus den aktuellen DS-Feldern "Username" und "Password" im Formular zur Verfügung?

Text0 und Text2 würde ich sinnvoller benennen... :o  z. B txtUsername und txtPasswort.  Ich benamse ungebundene Textfelder immer mit "txt" als Prefix.

Sub Text2_Afterupdate()
    If Me!Username = Me!txtUsername And Me!Passwort = Me!txtPasswort Then   ' hier evtl StrComp verwenden
        Me!txtLogInStatus = "erfolgreich"
    Else
       Me!txtLogInStatus = "fehlgeschlagen"
    End If

    CurrentDb.Execute "abf_LogInProtokoll", dbFailOnError

End Sub
Titel: Re: Login Protokoll
Beitrag von: mad am November 05, 2019, 16:01:39
Nur kurze Zwischeninfo,

Tabelle steht derzeit nicht mit dem Formular in Verbindung.

In die Thematik StrComp()  muß ich mich erst einlesen. Ist für mich noch völlig unbekannt.
Die Felder Text0 u. Text2 werde ich umbennen.
Wie gesagt aber erst heute Abend.


Danke schon mal.
mad
Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 05, 2019, 19:56:59
Hallo,


Sub txtPasswort_Afterupdate()

Dim  strPasswrt as String

strPasswrt=nz(Dlookup("Passwort","tbl_User", "Username = '" & Me!txtUsername & "'"),"")

    If strPasswrt = "" Then
        Msgbox "Fehler:   Es wurde kein Passwort für User " & Me!txtUsername & " vergeben.", vbOkOnly
        Exit Sub
    End If

    If  StrComp(strPasswrt, Me!txtPasswort, vbBinaryCompare) = 0  Then 
        Me!txtLogInStatus = "erfolgreich"
    Else
       Me!txtLogInStatus = "fehlgeschlagen"
    End If

    CurrentDb.Execute "abf_LogInProtokoll", dbFailOnError

End Sub

Titel: Re: Login Protokoll
Beitrag von: mad am November 05, 2019, 21:01:33
Hallo,

habe die Codezeile noch mit einer schließenden Klammer versehen, denn der Text wurde in rot angezeigt.
strPasswrt=nz(Dlookup("Passwort","tbl_User", "Username = '" & Me!txtUsername & "'",""))

Jetzt kommt aber folgende Meldung beim kompilieren:
ZitatFalsche Anzahl an Argumenten oder ungültige Zuweisung
und "DLookup" wird blau hinterlegt.

Habe dann mal im Google gesucht und bin auf folgenden Beitrag gestoßen:
https://www.enzinger.net/argserror.html
Allerdings verstehe ich das nicht.

Gruss
mad

Titel: Re: Login Protokoll
Beitrag von: Beaker s.a. am November 05, 2019, 21:51:31
Hallo,
Die hinzugefügte Klammer gehört vor das letzte Komma; funzt bei dir IntelliSense nicht?
gruss ekkehard
Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 05, 2019, 22:06:48
Hallo,

sorry, solche Fehler schleichen sich bei Luft-Codierung ein ...  8) 

(Im Beitrag korrigiert)
Titel: Re: Login Protokoll
Beitrag von: mad am November 06, 2019, 00:39:19
Hallo Zusammen,

mit der Codezeile:
CurrentDb.Execute "abf_LogInProtokoll", dbFailOnError
bekomme ich folgende Meldung:
ZitatLaufzeitfehler '3061', 2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben
mit der alten Codezeile
DoCmd.OpenQuery "abf_LogInProtokoll", acNormal, acAdd
funktionierts.
Ist das nun Gut oder eher schlecht?

Gruss
mad
Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 06, 2019, 09:54:20
Hallo,

es ist gut, dass eine Fehlermeldung kommt und es ist schlecht, wenn es mit Openquery (scheinbar) funktioniert.

Gewöhn Dir doch mal an, bei solchen Problemen den SQL-String der Abfrage oder  den entspr. kompletten Code zu posten.

Wir können nicht hellsehen ..  :(
Titel: Re: Login Protokoll
Beitrag von: mad am November 06, 2019, 10:06:35
Hallo,

kompletter Code:
Private Sub txtpasswort_AfterUpdate()

Dim strPasswrt As String

             DoCmd.SetWarnings False

    strPasswrt = Nz(DLookup("passwort", "tabPWUsergruppe_Allg", "UserName = '" & Me!txtUsername & "'"), "")
    If strPasswrt = "" Then

        MsgBox "Fehler:   Es wurde kein Passwort für User " & Me!txtUsername & " vergeben.", vbOKOnly
        Exit Sub
    End If

    If StrComp(strPasswrt, Me!txtpasswort, vbBinaryCompare) = 0 Then
        Me!txtLogInStatus = "erfolgreich"
    Else
       Me!txtLogInStatus = "fehlgeschlagen"
    End If

    CurrentDb.Execute "abf_LogInProtokoll", dbFailOnError
    'DoCmd.OpenQuery "abf_LogInProtokoll", acNormal, acAdd
   DoCmd.SetWarnings True
                         
        'DoCmd.OpenForm FormularZulassung
        'DoCmd.Close acForm, "PasswortAbfrage"
 
End Sub


SQL-String der Abfrage "abf_LogInProtokoll":
INSERT INTO tbl_LogInProtokoll ( LogInDatum, Benutzername, LogInStatus )
SELECT Now() AS LogInDatum, forms!PasswortAbfrage![txtUsername] AS Benutzername, forms!PasswortAbfrage![txtLogInStatus] AS LogInStatus;


Gruss
mad
Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 06, 2019, 10:27:13
Hallo,

die Abfrage nutzt Formularverweise, die von .Execute nicht aufgelöst werden.

Statt Openquery ist für Aktionsabfragen die Access-Methode Docmd.RunSql  zu verwenden (trotzdem eher nicht zu empfehlen).

Bei Execute müssen die Parameter mittels VBA durch Zusammensetzen des SQL-Strings übergeben werden ( oder jetzt hier nicht gezeigt, muss man auf die Parameters-Sektion der Abfrage zurückgreifen).



ZitatCurrentDb.Execute "INSERT INTO tbl_LogInProtokoll ( LogInDatum, Benutzername, LogInStatus ) " & _
                            " Values ( Now() , '" & Me![txtUsername] & "','" &  Me![txtLogInStatus]  & "')" , dbFailOnError

Titel: Re: Login Protokoll
Beitrag von: mad am November 06, 2019, 12:11:28
Hallo,

habe nun den Code, bzw. einen Teil davon in meinen produkiven Code eingebaut:

Codeausschnitt:
''''von hier
    If StrComp(strPasswrt, Me![txtpasswort], vbBinaryCompare) = 0 Then
        Me![txtLogInStatus] = "erfolgreich"
    Else
       Me![txtLogInStatus] = "fehlgeschlagen"
    End If
    CurrentDb.Execute "INSERT INTO tbl_LogInProtokoll ( LogInDatum, Benutzername, LogInStatus, Klarname ) " & _
                            " Values ( Now() , '" & Me![txtUsername] & "','" & Me![txtLogInStatus] & "','" & Me![txtKlarname] & "')", dbFailOnError
''''bis hier

und um "Klarname" erweitert.
Es wird bis auf "LogInStatus" alles richtig in die "tbl_LogInProtokoll" geschrieben.
Beim "LogInStatus" wird aber immer "fehlgeschlagen" eingetragen.
Kompilieren bringt keine Meldung und auch so kommt keine Meldung.

??????


Gruss
mad

Hier der ganze Code:
Private Sub txtpasswort_AfterUpdate()
    Dim NamenSuchstring As String
    Dim PWSuchstring As String
    Dim SQLNamenSuchstring As String
    Dim SQLPWSuchstring As String
    Dim SQLManager As String
    Dim SQLKontrolle As String
    Dim SQLEinlesen As String
    Dim SQLLogbuch As String
    Dim Sql_Loeschen As String
    Dim strPasswrt As String
    Dim FalschPW As String
    Dim FormularZulassung As String
    FalschPW = Nz(Me!txtpasswort, "")
    On Error Resume Next


NamenSuchstring = Nz(EncodeString(Me!txtUsername, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "")
PWSuchstring = Nz(EncodeString(Me!txtpasswort, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "")
SQLPWSuchstring = Nz(DLookup("passwort", "tabPWUsergruppe_Allg", "passwort = '" & PWSuchstring & "'" & _
                            " AND Username = '" & NamenSuchstring & "'"), "")




''''von hier
    If StrComp(strPasswrt, Me![txtpasswort], vbBinaryCompare) = 0 Then
        Me![txtLogInStatus] = "erfolgreich"
    Else
       Me![txtLogInStatus] = "fehlgeschlagen"
    End If
    CurrentDb.Execute "INSERT INTO tbl_LogInProtokoll ( LogInDatum, Benutzername, LogInStatus, Klarname ) " & _
                            " Values ( Now() , '" & Me![txtUsername] & "','" & Me![txtLogInStatus] & "','" & Me![txtKlarname] & "')", dbFailOnError
''''bis hier




  If SQLPWSuchstring = "" Then
       
        SQLKontrolle = "INSERT INTO tabUserPWKontrolle " & "(Falscheingabe, Zeit) " & "VALUES  ('" & FalschPW & "', now)"
        CurrentDb.Execute SQLKontrolle
       
        If DCount("[Falscheingabe]", "tabUserPWKontrolle") > 2 Then
            SQLEinlesen = "SELECT Falscheingabe, Zeit " & "FROM tabUserPWKontrolle"
            SQLLogbuch = "INSERT INTO tabUserPWLogbuch " & "(Falscheingabe, Zeit) " & SQLEinlesen
            CurrentDb.Execute SQLLogbuch
            MsgBox "Sie hatten 3 Versuche. Leider schliesst die DB jetzt."
            Sql_Loeschen = "DELETE FROM tabUserPWKontrolle "
            CurrentDb.Execute Sql_Loeschen
            DoCmd.QUIT
           
        End If
       
         Me!PW_Aendern1.SetFocus
         Me!txtUsername = ""
         Me!txtpasswort = ""
         Me!txtUsername.Visible = True
         Me!txtUsername.Visible = True
         Me!txtpasswort.Visible = False
         Dim Zaehler As String
         Zaehler = DCount("[Falscheingabe]", "tabUserPWKontrolle")
         MsgBox "Das Passwort ist unbekannt!" & Chr(13) & Chr(10) & Zaehler & ". Versuch von 3 Versuchen"
         Exit Sub
   Else
         Sql_Loeschen = "DELETE FROM tabUserPWKontrolle "
         CurrentDb.Execute Sql_Loeschen
         globalerBearbeiter = Nz(DLookup("Klarname", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
         
         TempVars.Add "Klarname", globalerBearbeiter
         
         FormularZulassung = Nz(DLookup("FormularZulassung", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
         If Nz(EncodeString(Me!txtUsername, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "") = Nz(DLookup("Username", "tabPWUsergruppe_Allg", "Username ='" & NamenSuchstring & "'"), "") Then
                  globalerBearbeiter = Nz(DLookup("Klarname", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
               
                  DoCmd.OpenForm FormularZulassung
                  DoCmd.Close acForm, "PasswortAbfrage"
       End If
    End If
End Sub

Titel: Re: Login Protokoll
Beitrag von: mad am November 06, 2019, 12:59:18
Hallo,

habs auch mal so versucht, habt aber den gleichen negativen Effekt.

Codezeile:
If DLookup("[passwort]", "tabPWUsergruppe_Allg", "[Username] = '" & Me!txtpasswort & "'") = Me!txtUsername Then
statt:
If StrComp(strPasswrt, Me![txtpasswort], vbBinaryCompare) = 0 Then

es wir wieder nur "fehlgeschlagen" eingetragen.


Gruss
mad
Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 06, 2019, 13:03:03
Hallo,


was macht dies für einen Sinn?:

ZitatSQLPWSuchstring = Nz(DLookup("passwort", "tabPWUsergruppe_Allg", "passwort = '" & PWSuchstring & "'" & _
                            " AND Username = '" & NamenSuchstring & "'"), "")


Sollte eher doch so aussehen:

ZitatstrPasswrt = Nz(DLookup("passwort", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")


Und wenn "strPasswrt" (als ausgelesener Passwort-Wert) auch verschlüsselt ist, muss der hier zunächst entschlüsselt werden. In "txtpasswort"   dürfte Klartext drinstehen.

Der Else-Zweig wird allem Anschein nach immer durchlaufen, weil es keine Übereinstimmung zwischen "strPasswrt" und "txtpasswort" gibt.


Und wie gesagt:  Haltepunkt am Codeanfang setzen und Schritt für Schritt die Variableninhalte auf Plausibilität prüfen...
Titel: Re: Login Protokoll
Beitrag von: mad am November 06, 2019, 15:12:02
Hallo,

ZitatUnd wie gesagt:  Haltepunkt am Codeanfang setzen und Schritt für Schritt die Variableninhalte auf Plausibilität prüfen...

Wo kann man dazu was nachlesen, wie das funktioniert, wie man vorgeht? Möglichst was Anfängertaugliches.
Ich habe keine Ahnung.

Gruss
mad
Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 06, 2019, 15:35:59
Hallo,
siehe Bild.
Titel: Re: Login Protokoll
Beitrag von: mad am November 06, 2019, 20:15:09
Hallo,

sitze schon wieder Stunden über dem Thema. Habe einiges ausprobiert und wieder verworfen. Habe das mit dem Haltepunkt woweit als möglich angewendet, und dachte das alles soweit unverschlüsselt ist was für das "erfolgreich" bzw. "fehlgeschlagen" notwendig ist.
Aber irgendwie stoße ich deutlich an meine Grenzen.
Ich lasse jetzt einfach den LogInStatus weg.
dann sieht der Codeso aus:
Private Sub txtpasswort_AfterUpdate()
Dim NamenSuchstring As String
Dim PWSuchstring As String
Dim SQLNamenSuchstring As String
Dim SQLPWSuchstring As String
Dim SQLManager As String
Dim SQLKontrolle As String
Dim SQLEinlesen As String
Dim SQLLogbuch As String
Dim Sql_Loeschen As String
'Dim strPasswrt As String
Dim FalschPW As String
Dim FormularZulassung As String
FalschPW = Nz(Me!txtpasswort, "")
On Error Resume Next


NamenSuchstring = Nz(EncodeString(Me!txtUsername, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "")
PWSuchstring = Nz(EncodeString(Me!txtpasswort, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "")
SQLPWSuchstring = Nz(DLookup("passwort", "tabPWUsergruppe_Allg", "passwort = '" & PWSuchstring & "'" & _
                            " AND Username = '" & NamenSuchstring & "'"), "")
''''von hier
    'DoCmd.SetWarnings False
    CurrentDb.Execute "INSERT INTO tbl_LogInProtokoll ( LogInDatum, Benutzername, Klarname ) " & _
                            " Values ( Now() , '" & Me![txtUsername] & "','" & Me![txtKlarname] & "')", dbFailOnError
    'DoCmd.SetWarnings True
''''bis hier
  If SQLPWSuchstring = "" Then
       
        SQLKontrolle = "INSERT INTO tabUserPWKontrolle " & "(Falscheingabe, Zeit) " & "VALUES  ('" & FalschPW & "', now)"
        CurrentDb.Execute SQLKontrolle
       
        If DCount("[Falscheingabe]", "tabUserPWKontrolle") > 2 Then
            SQLEinlesen = "SELECT Falscheingabe, Zeit " & "FROM tabUserPWKontrolle"
            SQLLogbuch = "INSERT INTO tabUserPWLogbuch " & "(Falscheingabe, Zeit) " & SQLEinlesen
            CurrentDb.Execute SQLLogbuch
            MsgBox "Sie hatten 3 Versuche. Leider schliesst die DB jetzt."
            Sql_Loeschen = "DELETE FROM tabUserPWKontrolle "
            CurrentDb.Execute Sql_Loeschen
            DoCmd.QUIT
           
        End If
       
         Me!PW_Aendern1.SetFocus
         Me!txtUsername = ""
         Me!txtpasswort = ""
         Me!txtUsername.Visible = True
         Me!txtUsername.Visible = True
         Me!txtpasswort.Visible = False
         Dim Zaehler As String
         Zaehler = DCount("[Falscheingabe]", "tabUserPWKontrolle")
         MsgBox "Das Passwort ist unbekannt!" & Chr(13) & Chr(10) & Zaehler & ". Versuch von 3 Versuchen"
         Exit Sub
   Else
         Sql_Loeschen = "DELETE FROM tabUserPWKontrolle "
         CurrentDb.Execute Sql_Loeschen
         globalerBearbeiter = Nz(DLookup("Klarname", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
         
         TempVars.Add "Klarname", globalerBearbeiter
         
         FormularZulassung = Nz(DLookup("FormularZulassung", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
         If Nz(EncodeString(Me!txtUsername, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "") = Nz(DLookup("Username", "tabPWUsergruppe_Allg", "Username ='" & NamenSuchstring & "'"), "") Then
                  globalerBearbeiter = Nz(DLookup("Klarname", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
               
                  DoCmd.OpenForm FormularZulassung
                  DoCmd.Close acForm, "PasswortAbfrage"
       End If
    End If
   
End Sub


Wenn sich noch jemand an dem Thema versuchen will, gerne. Mein aktueller Stand liegt im Anhang.
User (Name)         PW
user1                   user1
user2                   user2
user3                   user3
sind angelegt.

Ich muß leider passen. Manchmal verliert man halt. :-\
Bedanke mich aber an der Stelle für die super Unterstützung.


Gruss
mad
Titel: Re: Login Protokoll
Beitrag von: DF6GL am November 06, 2019, 22:34:59
Hallo,

anbei das angepasste FE.   Die Tabellenverknüpfungen musst Du neu erstellen, bzw. anpassen.

Änderungen im Code sind mit '----------------------------  gekennzeichnet.

Im Admin-Form habe ich das Load-Ereignis mit den Visible-Zuweisungen ergänzt.

Die Zähl-Logik für Einlogversuche im Login-Form habe ich nicht weiter analysiert.

Du versinkst vermutlich in den verwirrenden (nicht aussagekräftigen) Benamsungen und übermäßigen Deklarationen der Variablen.

Das Ganze hat sich halt zu schwer durchschaubaren Spagetticode entwickelt....   :)

Wozu eigentlich die dauernden Ver- und Entschlüsselungen?

M.E. reicht es aus, den User (warum den eigentlich verschlüsseln?) und das PW einmalig zu entschlüsseln und Variablen als Klartext zuzuweisen.

De
Titel: Re: Login Protokoll
Beitrag von: mad am November 07, 2019, 20:56:41
Hallo Zusammen,

ihr habt doch nochmals einen Ergeiz geweckt. Der "Spagetticode" ist zwar naoch etwas länger geworden, aber es funktioniert jetzt so wie ich es möchte.

Hier nochmals der aktuelle Code:
Private Sub txtpasswort_AfterUpdate()
Dim NamenSuchstring As String
Dim PWSuchstring As String
Dim SQLNamenSuchstring As String
Dim SQLPWSuchstring As String
Dim SQLManager As String
Dim SQLKontrolle As String
Dim SQLEinlesen As String
Dim SQLLogbuch As String
Dim Sql_Loeschen As String
Dim FalschPW As String
Dim txtPW As String
Dim FormularZulassung As String
FalschPW = Nz(Me!txtpasswort, "")
On Error Resume Next

NamenSuchstring = Nz(EncodeString(Me!txtUsername, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "")
PWSuchstring = Nz(EncodeString(Me!txtpasswort, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "")
SQLPWSuchstring = Nz(DLookup("passwort", "tabPWUsergruppe_Allg", "passwort = '" & PWSuchstring & "'" & _
                            " AND Username = '" & NamenSuchstring & "'"), "")
                           
    Me!txtNeuPW = EncodeString(Me!txtpasswort, _
                              "A" & "l" & "l" & "e" & Chr(&H20) & _
                               Chr(Asc("k")) & Chr(Asc("I")) & _
                              Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l")))
                           
If StrComp(SQLPWSuchstring, Me!txtNeuPW, vbBinaryCompare) = 0 Then
        Me!txtLogInStatus = "erfolgreich"
    Else
       Me!txtLogInStatus = "fehlgeschlagen"
    End If
 
       CurrentDb.Execute "INSERT INTO tbl_LogInProtokoll ( LogInDatum, Benutzername, LogInStatus, Klarname ) " & _
                            " Values ( Now() , '" & Me![txtUsername] & "','" & Me![txtLogInStatus] & "','" & Me![txtKlarname] & "')", dbFailOnError

  If SQLPWSuchstring = "" Then
       
        SQLKontrolle = "INSERT INTO tabUserPWKontrolle " & "(Falscheingabe, Zeit) " & "VALUES  ('" & FalschPW & "', now)"
        CurrentDb.Execute SQLKontrolle
       
        If DCount("[Falscheingabe]", "tabUserPWKontrolle") > 2 Then
            SQLEinlesen = "SELECT Falscheingabe, Zeit " & "FROM tabUserPWKontrolle"
            SQLLogbuch = "INSERT INTO tabUserPWLogbuch " & "(Falscheingabe, Zeit) " & SQLEinlesen
            CurrentDb.Execute SQLLogbuch
            MsgBox "Sie hatten 3 Versuche. Leider schliesst die DB jetzt."
            Sql_Loeschen = "DELETE FROM tabUserPWKontrolle "
            CurrentDb.Execute Sql_Loeschen
            DoCmd.Quit
           
        End If
       
         Me!PW_Aendern1.SetFocus
         Me!txtUsername = ""
         Me!txtpasswort = ""
         Me!txtUsername.Visible = True
         Me!txtUsername.Visible = True
         Me!txtpasswort.Visible = False
         Dim Zaehler As String
         Zaehler = DCount("[Falscheingabe]", "tabUserPWKontrolle")
         MsgBox "Das Passwort ist unbekannt!" & Chr(13) & Chr(10) & Zaehler & ". Versuch von 3 Versuchen"
         Exit Sub
   Else
         Sql_Loeschen = "DELETE FROM tabUserPWKontrolle "
         CurrentDb.Execute Sql_Loeschen
         globalerBearbeiter = Nz(DLookup("Klarname", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
         
         TempVars.Add "Klarname", globalerBearbeiter
         
         FormularZulassung = Nz(DLookup("FormularZulassung", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
         If Nz(EncodeString(Me!txtUsername, "A" & "l" & "l" & "e" & Chr(&H20) & Chr(Asc("k")) & Chr(Asc("I")) & Chr(Asc("n")) & Chr(Asc("D")) & Chr(Asc("l"))), "") = Nz(DLookup("Username", "tabPWUsergruppe_Allg", "Username ='" & NamenSuchstring & "'"), "") Then
                  globalerBearbeiter = Nz(DLookup("Klarname", "tabPWUsergruppe_Allg", "Username = '" & NamenSuchstring & "'"), "")
               
                  DoCmd.OpenForm FormularZulassung
                  DoCmd.Close acForm, "PasswortAbfrage"
       End If
    End If
   
End Sub


Danke nochmals an alle.


Gruss
mad