2016-12-27 73 views
2

我寫這一點登錄驗證的應用程序作爲我的VBA學習過程中的一個步驟。應用程序應檢查登錄名是否爲「sa」,密碼是否爲「XEL」。應用程序應允許用戶輸入用戶名和密碼最多三次。如果在三次嘗試中都輸入了錯誤的用戶名和密碼,則應用程序應顯示錯誤並關閉。而且是我的代碼:訪問VBA登錄應用

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 

現在它做了檢查/驗證部分。但是它沒有執行最大限制的三倍,我對如何將最後一個消息框代碼和關閉命令放入整個代碼塊感到困惑。任何幫助表示讚賞。

非常感謝。

回答

1

我看到的錯誤是您有他們的用戶名/密碼類型,然後點擊一個按鈕。該按鈕然後檢查以查看用戶名/密碼是否與預定義值連續匹配三次。這是一個問題,因爲用戶無法真正嘗試三次。

爲了解決這個問題,你需要創建一個Module/Form級別的變量,並將其初始化爲0形式,然後在該按鈕點擊時檢查該變量是否大於2.如果是,則運行close程序。如果它不是,那麼它會檢查你的用戶名和密碼,看看它們是否正確,如果它們不是,那麼它將模塊級別變量遞增1。

編輯:增加了一個檢查,因爲它並不完全捕捉它的第三次嘗試後。感覺有點難看,但它有效。

EDIT2:誦讀困難的時刻,固定越大然後,再少的if語句和關聯值

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

非常感謝。這確實有幫助。在另一方面,假設我已經進入了兩次不正確的信息,那麼無論我在第三次進入將關閉與如果應用程序嘗試<3然後 validpswd =假 如果CID =「SA」和cPswd =「 XEL 「然後 validpswd =真 MSGBOX 」成功「 否則 MSGBOX 」再試一次「 試=嘗試+ 1 結束如果 否則 MSGBOX( 」太多的嘗試「) DoCmd.Close acForm,」 登錄測試」 acSaveYes 結束如果 –

+1

增加,捕捉這個問題的事情。 – KySoto

+2

嘗試在檢查嘗試次數之前移動正確的用戶名/密碼測試。僞代碼:如果{用戶名/密碼正確}然後{成功代碼} ElseIf嘗試> = 2然後{失敗代碼}否則{再次嘗試代碼;包括嘗試次數=嘗試次數+ 1}結束如果 – Skippy

0

感謝所有的跡象。這是我最終做的。我相信還有其他更好的方法可以做到這一點,請發表評論讓我知道

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