Hi,
ich habe folgendes Problem... bei mir kommt immer das username oder psw nicht übereinstimmt. Obwohl ich das in der Datenbank hinterlegte username+psw reinschreibe.
Hier der Code
Private Sub btnlogin_Click()
Dim User As String
Dim psw As String
Dim sqlstring As String
Dim rs As DAO.Recordset
Dim db As DAO.Database
If IsNull(Me.txtuname) Or IsNull(Me.txtKennwort) Then
MsgBox "Please enter a password and/or username"
Else
User = Me.txtuname.Value
psw = Me.txtKennwort.Value
sqlstring = "Select UserID, User, psw from Benutzer Where User = [User] And psw = [psw];"
Set db = CurrentDb()
Set rs = db.OpenRecordset(sqlstring)
Dim success As Boolean
success = False
Do While Not rs.EOF
Dim recorduserID As String
Dim recordpsw As String
recorduserID = rs!userid
recordpsw = rs!psw
If StrComp(recorduserID, User) = 0 And StrComp(recordpsw, psw) = 0 Then
success = True
'Success and login
'zwei Optionen USer oder Admin
'check if user oder admin
If rs!isAdmin Then
'zeige admin menu
DoCmd.Close acForm, "Anmeldung"
DoCmd.OpenForm "Admin_Form"
Else
'zeige user menu
DoCmd.Close acForm, "Anmeldung"
DoCmd.OpenForm "User_Form"
End If
Else
'Not working
End If
rs.MoveNext
Loop
If Not success Then
MsgBox "Incorrect password or username "
Me.txtuname = ""
Me.txtKennwort = ""
txtuname.SetFocus
End If
rs.Close
End If
End Sub
wäre wirklich sehr freundlich, wenn einer mir weiterhelfen könnte.
Vielen Dank :-\
Hi,
sqlstring = "Select UserID, User, psw from Benutzer Where User = [User] And psw = [psw];"
Du musst den SQL-String mit den Variablen verketten, sonst vergleichst du (wegen der Namensgleichheit) die Datenfelder mit sich selbst. Das Recordset enthielt also nicht nur einen Datensatz sondern alle.
Besser wäre es gewesen, den Variablen andere Namen zu geben, dann wärst du vielleicht von selbst auf den Zusammenhang gestoßen.
So sollte es klappen mit der Abfrage:
sqlstring = "Select UserID, User, psw from Benutzer Where User = '" & User & "' And psw = '" & psw & "';"
PS:
Code-Auszüge bitte ohne störende Leerzeilen und lesbar formatiert in Code-Tags einfügen.
vielen Dank für die schnelle Rückmeldung.Ich habe es eingefügt, jedoch kommt wieder die Fehlermeldung "Incorrect password or username" .
Ich sitze schon eine ganze weile daran. Leider ohne Erfolg :(
:-[ :( trotzdem vielen Dank für deine Mühe
HAllo,
hier dürfte ein Fehler vorliegen:
If StrComp(recorduserID, User) = 0 And StrComp(recordpsw, psw) = 0 Then
ein Vergleich der UserID (Datentyp Text ??) mit dem Usernamen ist nicht zweckmäßig....
Zudem wird auf rs!isAdmin Bezug genommen, wobei dieses Feld im Recordset nicht vorkommt.
Die Recordset-Geschichte leuchtet mir nicht so ganz ein...
Nochmals vielen Dank an euch beide.
Da sind noch einige Fehler vorhanden die ich noch überarbeiten werde. Falls Probleme auftauchen melde ich mich nochmal.
::)
jetzt klappt es, jedoch öffnet sich immer nur das User_Form, leider nicht das Admin_Form. Obwohl in der Tabelle Benutzer bei einem Benutzernamen das Kontrollkästchen bei isadmin angeklickt ist . Vielleicht könnt Ihr mir nochmal weiterhelfen. LG
Private Sub btnlogin_Click()
Dim User As String
Dim psw As String
Dim sqlstring As String
Dim rs As DAO.Recordset
Dim db As DAO.Database
If IsNull(Me.txtuname) Or IsNull(Me.txtKennwort) Then
MsgBox "Please enter a password and/or username"
Else
User = Me.txtuname.Value
psw = Me.txtKennwort.Value
sqlstring = "Select UserID, User, psw from Benutzer Where User = '" & User & "' And psw = '" & psw & "';"
Set db = CurrentDb()
Set rs = db.OpenRecordset(sqlstring)
Dim success As Boolean
success = False
Do While Not rs.EOF
Dim recorduser As String
Dim recordpsw As String
recorduser = rs!User
recordpsw = rs!psw
If StrComp(recorduser, User) = 0 And StrComp(recordpsw, psw) = 0 Then
success = True
'Success and login
'zwei Optionen USer oder Admin
'check if user oder admin
Dim isAdmin As Boolean
If isAdmin = True Then
'zeige admin menu
DoCmd.Close "Anmeldung"
DoCmd.OpenForm "Admin_Form"
Else
'zeige user menu
DoCmd.Close acForm, "Anmeldung"
DoCmd.OpenForm "User_Form"
End If
Else
'Not working
End If
rs.MoveNext
Loop
If Not success Then
MsgBox "Incorrect password or username "
Me.txtuname = ""
Me.txtKennwort = ""
txtuname.SetFocus
End If
rs.Close
End If
End Sub
Hi,
ich hatte dich doch darum gebeten, die Code-Tags zu benutzen, oder...?
Dim isAdmin As Boolean
If isAdmin = True Then
Was denkst denn du, welchen Wert die Boolean-Variable "isAdmin" unmittelbar nach ihrer Deklaration hat?! ::)
Ich vermute, du musst die Abfrage um dieses Feld erweitern, damit es im Recordset zur Verfügung steht.
Eine Variable wird hierzu nicht benötigt.
PS:
Wieso liest du das Recordset in einer Schleife aus, gibt es mehrere Datensätze pro UserID? ???
Sorry :o
So hat funktioniert. Hab mit einem Dlookup gearbeitet.
Vielen Dank!
Was genau hast du geändert - auch die Leseschleife?