2016-12-27 6 views
2

Ich schreibe diese kleine Login-Validierung-Anwendung als ein Schritt meines VBA-Lernprozesses. Die Anwendung sollte prüfen, ob der Anmeldename "sa" und das Passwort "XEL" lautet. Die Anwendung sollte es dem Benutzer erlauben, den Benutzernamen und das Passwort maximal dreimal einzugeben. Wenn bei allen drei Versuchen ein falscher Benutzername und ein falsches Passwort eingegeben werden, sollte die Anwendung einen Fehler anzeigen und schließen. Und blasen ist mein Code:Zugriff VBA Login-Anwendung

Private Sub Command6_Click() 
Me.Text0.SetFocus 
cID = Text0.Text 
Me.Text4.SetFocus 
cPswd = Text4.Text 

For i = 1 To 3 
validpswd = False 
If cID = "sa" And cPswd = "XEL" Then 
validpswd = True 
MsgBox "Successful" 
Exit For 
Else 
MsgBox "Try again" 
Exit For 
End If 
Next i 
'MsgBox ("byebye") 
'DoCmd.Close acForm, "Used Car Sales", acSaveYes 

End Sub 

Jetzt ist es die Überprüfung/Validierung Teil. Aber es macht nicht die dreifache Maximalbegrenzung, ich bin irgendwie verwirrt, wie man den letzten Nachrichtenboxcode und den Schließbefehl in die gesamten Codeblöcke einfügt. Irgendwelche Hilfen werden geschätzt.

Vielen Dank.

Antwort

1

Was ich falsch sehe ist, dass Sie sie den Benutzernamen/das Passwort eingeben, dann klicken Sie auf eine Schaltfläche. Dieser Knopf prüft dann, ob der Benutzername/das Passwort dreimal hintereinander den vordefinierten Werten entspricht. Das ist ein Problem, weil der Benutzer dreimal nicht wirklich versuchen könnte.

Um dies zu beheben, erstellen Sie eine Modul/Form-Level-Variable und initialisieren sie im Formular laden auf 0. Dann überprüfen Sie die Schaltfläche klicken, wenn diese Variable größer als 2 ist. Wenn ja, dann führen Sie Ihre schließen Verfahren. Wenn dies nicht der Fall ist, überprüft es Ihren Benutzernamen und Ihr Passwort, um zu sehen, ob sie korrekt sind. Wenn dies nicht der Fall ist, erhöht es die Modul-Level-Variable um 1. Beispiel unten.

EDIT: hinzugefügt einen Scheck, da es nicht nach dem 3. Versuch es nicht ganz erwischt. Fühlt sich ein bisschen hässlich an, aber es funktioniert.

EDIT2: Dyslexie Moment, desto größer ist dann fixiert, weniger als Zeichen für die if-Anweisungen und die zugehörigen Werte

Dim Tries as Long 

Private Sub Form_Load() 
Tries = 0 

End Sub 

Private Sub Command6_Click() 
If Tries < 3 Then 
    cID = Text0.Text 
    cPswd = Text4.Text 
    validpswd = False 
    If cID = "sa" And cPswd = "XEL" Then 
     validpswd = True 
     MsgBox "Successful" 
    Else 
     Tries = Tries + 1 
     If Tries > 2 Then 
      MsgBox ("byebye") 
      DoCmd.Close acForm, "Used Car Sales", acSaveYes 
     else 
     MsgBox "Try again" 
     end if 
    End If 
    'MsgBox ("byebye") 
    'DoCmd.Close acForm, "Used Car Sales", acSaveYes 
End If 
End Sub 
+0

Vielen Dank. Das hilft tatsächlich. Auf der anderen Seite, sagen wir, ich habe falsche Informationen für zweimal eingegeben, dann wird alles, was ich in der dritten Zeit eingegeben habe, die App schließen mit If try <3 Dann validpswd = False Wenn cID = "sa" Und cPswd = " XEL "Dann validpswd = True MsgBox "Erfolgreich" Else MsgBox "versuchen Sie es erneut" try = versuchen + 1 End If Else MsgBox ("Zu viele versuche") DoCmd.Close acForm," Login-Test ", acSaveYes End If –

+1

Hinzugefügt eine Sache, die dieses Problem erfasst. – KySoto

+2

Versuchen Sie, den Test vor der Überprüfung der Anzahl der Versuche auf korrekten Benutzernamen/Passwort zu verschieben. Pseudocode: If {Benutzername/Password Correct} Dann {Erfolgscode} ElseIf Tries> = 2 Dann {fehlgeschlagener Code} Else {erneut versuchen code; enthält Tries = Tries + 1} Ende Wenn – Skippy

0

Dank alle. Das habe ich schließlich getan. Ich bin sicher, es gibt andere bessere Möglichkeit, dies zu tun und bitte kommentieren, um mich auch zu wissen

If try < 3 Then 


If cID <> "sa" Or cPswd <> "XEL" Then 
try = try + 1 
MsgBox "Try again" 
Else 
MsgBox "Successful" 
try = 0 
End If 

If try = 3 Then 
MsgBox ("Too many tries") 
DoCmd.Close acForm, "Login Test", acSaveYes 
End If 

End If