Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: derilzemer am Juni 22, 2016, 18:03:06

Titel: Formular für Passwortwechsel funktioniert nicht
Beitrag von: derilzemer am Juni 22, 2016, 18:03:06
Hallo zusammen,
ich habe mit heute ein Formular gebaut, damit der USer sein Passwort wechseln kann. Ich habe dafür auf etwas Code im Netz zugreifen müssen. Über einen Commandbutton öffnet sich das Formular. Es hat dann ein Kombifeld cboUserID und 3 ungebundene Textfelder, txtPasswortAlt, txtPasswortNeu und txtPasswortRepeat sowie den Button btnChangePW. Darauf habe ich eine Klickaktion gelegt, wöfür der Code wie folgt aussieht:

Private Sub btnChangePW_Click()
    Dim PWtocompare As String
        PWtocompare = DLookup("Passwort", "tblBenutzer", "[ID]=" & Me.cboUserID.Value)
      If txtPasswortAlt = PWtocompare Then
      If txtPasswortNeu = txtPasswortRepeat Then

    Me.txtPasswortNeu.SetFocus
    Dim strSQL As String
        strSQL = "UPDATE tblBenutzer SET Passwort = '" & Me.txtPasswortNeu.Text & "' WHERE ID = cboUserID"
    Else
        DoCmd.SetWarnings False
    End If
       
    Else
        MsgBox "Das Passwort wurde geändert!"
    End If
       
End Sub

Das Kombifeld hat folgenden Select
SELECT tblBenutzer.ID, tblBenutzer.UserID
FROM tblBenutzer;

tblBenutzer hat die Spalte Passwort, welche dem Update für das Passwort unterzogen wird.
Wenn ich nun das Passwort ändere geht das zwar ohne Fehler, jedoch ist danach auch kein Login mehr möglich für den User. Dies würde mir sagen, der SQL Befehl für das PW Update ist falsch oder aber wird nicht ausgeführt :(. Sieht jemand auf die Schnelle, wo genau ich da einen Fehler mache?

Danke für die Unterstützung
Andreas
   
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: Hondo am Juni 22, 2016, 19:19:23
Hallo,
Zitatjedoch ist danach auch kein Login mehr möglich für den User.
Ich seh keinen Code für den Login.
Funktioniert denn der Login wenn die Datenbank beendet und wieder geöffnet wird?

Andreas
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: Beaker s.a. am Juni 22, 2016, 20:36:01
Hallo Andreas,
Kann es sein, dass es

If Me!txtPasswortAlt = PWtocompare Then
If Me!txtPasswortNeu = Me!txtPasswortRepeat Then

heissen muss?

Ausserdem fehlt ein
CurrentDb.Execute strSQL, DbFailOnError
Dies bestätigt deine Vermutung
Zitatoder aber wird nicht ausgeführt

Und dies müsstest du auch noch ändern:
... & "' WHERE ID = " & Me!cboUserID

gruss ekkehard


@admin
Warum funktioniert das bei mir mit den Farben nicht zwischen Code-Tags?

Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: DF6GL am Juni 22, 2016, 20:42:05
Hallo,

ZitatWarum funktioniert das bei mir mit den Farben nicht zwischen Code-Tags?


weil es beim Zitat funktioniert....   ;) ;) ;D
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: Beaker s.a. am Juni 22, 2016, 20:57:38
Hallo,

@Franz
Also "quote" statt "code" ?

@Andreas
Gerade ist mir noch aufgefallen, dass in deinem Modulkopf die Anweisung
"Option Explicit" fehlt. Ansonsten hättest du nämlich beim Testen schon
den Laufzeitfehler "Variable nicht deklariert" erhalten.
Geh mal im VBA-Editor unter Extras in die Optionen und setze das Häkchen
bei "Variablendeklaration erforderlich". Dann wird das in alle neuen
Module automatisch eingetragen. In die bereits vorhandenen musst du es
noch manuell nachtragen.

gruss ekkehard
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: derilzemer am Juni 22, 2016, 23:48:17
Hallo Ekkehard,

@Hondo
das Login Formular ist ein anderes. Dieses Formular dient nur dem Passwortchange und ist eigenständig. Der Login funktioniert bei meinem User, sofern ich keinen Passwortwechsel durchführe.

Option Explicit hatte ich nur nicht mit kopiert im Code, sorry Ekkehard.
Richtig ist natürlich, die Me. hatten überall gefehlt :(, ebenso der execute der SQL Anweisung. Habe ich jetzt alles angepasst.
Dennoch funktioniert der Passwortwechsel nicht :(. Der Code sieht jetzt so aus:

Option Compare Database
Option Explicit

Private Sub btnChangePW_Click()
    Dim PWtocompare As String
    PWtocompare = DLookup("Passwort", "tblBenutzer", "[ID]=" & Me.cboUserID.Value)
    If Me.txtPasswortAlt = PWtocompare Then
        If Me.txtPasswortNeu = Me.txtPasswortRepeat Then
            Me.txtPasswortNeu.SetFocus
            Dim strSQL As String
            strSQL = "UPDATE tblBenutzer SET Passwort = '" & Me.txtPasswortNeu.Text & "' WHERE ID = " & Me.cboUserID
            CurrentDb.Execute strSQL, dbFailOnError
        Else
            DoCmd.SetWarnings False
        End If
    Else
        MsgBox "Das Passwort wurde geändert!"
    End If
End Sub


Keine Fehlermeldung, nichts, nur dass das PW geändert wurde, also läuft es zumindest durch. Es scheint wohl immer noch so, dass Tabelle nicht korrekt abgeändert wird. Nicht korrekt, weil das alte PW geht auch nicht mehr! Liegt es am Format, weil das Feld Passwort in der tblBenutzer als Eingabeformat Kennwort hat? Wie kann ich das debuggen?

Gruß Andreas
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: Hondo am Juni 23, 2016, 07:08:21
Hallo,
habe deinen Code mal lesbar eingerückt.
Du musst unbedingt mal Haltepunkte setzen (F9 in der betreffenden Zeile) und dir die Werte:
PWtocompare, txtPasswortNeu und txtPasswortRepeat anzeigen lassen.

Andreas
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: Hondo am Juni 23, 2016, 07:51:09
Hallo,
wenn die Meldung "Das Passwort wurde geändert!" kommt, haben doch eingegebenes Passwort und gespeichertes Passwort nicht übereingestimmt.

Ich finde diese Prüfung ist eh überflüssig, denn Passwörter speichert man z.b. als MD5, Sha2 oder ähnlich codiert.
Dann codiert man die Eingabe und überprüft die Codes.
Der Betreiber einer Datenbank braucht die Passwörter seiner Nutzer nicht zu kennen, das wäre ein Unsicherheitsfaktor - ganz zu schweige dessen dass die Passwörter offen lesbar in der Datenbank liegen.

Gruß Andreas
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: MaggieMay am Juni 23, 2016, 13:11:15
Hallo,
ZitatKeine Fehlermeldung, nichts, nur dass das PW geändert wurde
ja klar, so ist es programmiert, das ist aber leider falsch.

Versuche es mal hiermit:
Private Sub btnChangePW_Click()
On Error GoTo err_proc
    Dim PWtocompare As String     ' bisheriges Passwort
    Dim strSQL As String
    PWtocompare = DLookup("Passwort", "tblBenutzer", "[ID]=" & Me.cboUserID)
    If Me.txtPasswortAlt = PWtocompare Then      ' alt = akt -> OK!
        If Me.txtPasswortNeu = Me.txtPasswortRepeat And _
            Me.txtPasswortNeu <> PWtocompare Then     ' Wiederholung ident. und <> PW-alt -> OK!
            strSQL = "UPDATE tblBenutzer SET Passwort = '" & Me.txtPasswortNeu & "' WHERE ID = " & Me.cboUserID
            CurrentDb.Execute strSQL, dbFailOnError
            MsgBox "Das Passwort wurde geändert!"
        Else
            MsgBox "Neues Passwort ungültig!"
        End If
    Else
        MsgBox "Passwort ungültig!"
    End If
End_proc:
    Exit Sub
Err_proc:
    MsgBox Err.Description, , Err.Number
End Sub


PS:
Ganz, ganz vorsichtig solltest du mit dem Befehl DoCmd.SetWarnings Falseumgehen und diesen niemals einsetzen ohne sicherzustellen, dass er mitDoCmd.SetWarnings Trueauch wieder aufgehoben wird.
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: derilzemer am Juni 23, 2016, 15:46:06
Hallo Maggie,
danke für die Hinweise. Ich habe das jetzt mal so eingesetzt und er bringt die Meldung "Passwort ungültig", sprich das ist die Meldung aus der 2. Else Schleife nach dem Execute. Wenn gut dann Passwort geändert, wenn nicht, dann ungültig. Datensatz kann also nicht geUpdatet werden.
Ich bin jetzt echt nicht mehr sicher, ob ich im Kombifeld einen Fehler habe. Da habe ich ja folgenden Select aus der tblBenutzer.
SELECT tblBenutzer.ID, tblBenutzer.UserID
FROM tblBenutzer;


Gebunden habe ich die Spalte 0. Das ist doch richtig, oder? Wenn ja, was lässt das Update des Passwortes scheitern?

Gruß Andreas
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: MaggieMay am Juni 23, 2016, 17:05:29
ZitatGebunden habe ich die Spalte 0. Das ist doch richtig, oder?
Die Eigenschaft "gebundene Spalte" muss auf 1 eingestellt werden.

ZitatWenn ja, was lässt das Update des Passwortes scheitern?
Freunde dich mit dem Debuggen an, d.h. setze einen Haltepunkt, löse das Ereignis aus und schau dir den Inhalt der beteiligten Variablen und Textfelder im Unterbrechungsmodus an.
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: derilzemer am Juni 23, 2016, 17:21:16
Hallo Maggie,
ja das war der Fehler. Wegen debug, bedeutet ja ich setze dann z.B. in der Zeile CurrentDb.Execute strSQL, dbFailOnError
den Haltepunkt und führe den Vorgang mit dem Formular aus. Dann springt er genau in die Zeile "Passwort ungültig". Dadurch hätte ich aber nicht herausgefunden, dass die falsche Spalte gebunden ist, oder muss ich dann weitere Debugschritte ausführen?

Gruß Andreas 
Titel: Re: Formular für Passwortwechsel funktioniert nicht
Beitrag von: MaggieMay am Juni 23, 2016, 22:24:28
Hi,

setze den Haltepunkt auf die Zeile mit dem ersten ausführbaren Befehl, dann kannst du den Code komplett verfolgen. Und wenn du dir dann den Inhalt der Variablen und Textfelder anschaust - so wie ich es geschrieben hatte - kannst du nachvollziehen, warum der von dir erwartete Ablauf nicht eintritt.

Ein Haltepunkt auf dem Execute-Befehl hilft dir da nicht weiter, zumal der ja gar nicht zur Ausführung kommt, so wie du das beschrieben hattest.