Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Anmeldeform

Begonnen von yaya3, Mai 11, 2015, 16:07:30

⏪ vorheriges - nächstes ⏩

yaya3

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  :-\

MaggieMay

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.
Freundliche Grüße
MaggieMay

yaya3

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

DF6GL

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

yaya3

Nochmals vielen Dank an euch beide.
Da sind noch einige Fehler vorhanden die ich noch überarbeiten werde. Falls Probleme auftauchen melde ich mich nochmal.

::)

yaya3

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

MaggieMay

#6
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?   ???
Freundliche Grüße
MaggieMay

yaya3

Sorry  :o

So hat funktioniert. Hab mit einem Dlookup gearbeitet.

Vielen Dank!

MaggieMay

Was genau hast du geändert - auch die Leseschleife?
Freundliche Grüße
MaggieMay