Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Login Protokoll

Begonnen von mad, November 05, 2019, 00:41:44

⏪ vorheriges - nächstes ⏩

mad

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


DF6GL

#1
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.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mad

#2
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

DF6GL

#3
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
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mad

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

DF6GL

#5
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

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mad

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


Beaker s.a.

#7
Hallo,
Die hinzugefügte Klammer gehört vor das letzte Komma; funzt bei dir IntelliSense nicht?
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

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

(Im Beitrag korrigiert)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mad

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

DF6GL

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 ..  :(
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mad

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

DF6GL

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

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mad

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


mad

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