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
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
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, DbFailOnErrorDies 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?
Hallo,
ZitatWarum funktioniert das bei mir mit den Farben nicht zwischen Code-Tags?
weil es beim Zitat funktioniert.... ;) ;) ;D
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
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
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
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
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 SubPS:
Ganz, ganz vorsichtig solltest du mit dem Befehl
DoCmd.SetWarnings Falseumgehen und diesen niemals einsetzen ohne sicherzustellen, dass er mit
DoCmd.SetWarnings Trueauch wieder aufgehoben wird.
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
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.
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
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.