|
先贴一段常见的代码:
- Dim rs As New ADODB.Recordset
- Dim strSQL As String
- Dim i As Integer
- Private Sub cmd确定_Click()
- On Error GoTo err_确定_Click
- '先判断是否输入用户名
- If IsNull(Me.txt用户名) Then
- MsgBox "请输入登录名", vbCritical, "提示"
- Me.txt用户名.SetFocus
- Exit Sub
- '接着判断是否输入密码
- ElseIf IsNull(Me.txt密码) Then
- MsgBox "请输入密码!", vbCritical, "提示"
- Me.txt密码.SetFocus
- Exit Sub
- '输入用户名才开始判断密码是否正确。
- Else
- strSQL = "select * from 管理员 where 登录名='" & Me.txt用户名 & "'"
- rs.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- '如果没记录则弹出错误
- If rs.EOF Or rs.BOF Then
- MsgBox "没有该用户!", vbCritical, "提示"
- '如果有记录则判断密码是否正确
- Else
- '密码正确时打开窗体
- If rs(1) = Me.txt密码 Then
- Me.txt用户名 = Null
- Me.txt密码 = Null
- Me.Visible = False
- DoCmd.OpenForm "主页" '打开主页
- Else
- '密码错误时开始计算错误次数
- i = i + 1
- '错误次数低于三次时弹出警告
- If (i < 3) Then
- MsgBox "您输入的密码不正确", vbOKOnly + vbExclamation, "提示"
- '错误次数等于三次后关闭窗体并退出
- Else
- MsgBox "您已经连续3次错误输入密码,系统马上关闭!", vbOKOnly + vbExclamation, "警告"
- DoCmd.Close acForm, Me.Name '关闭当前窗体
- DoCmd.Quit '退出数据库
- Exit Sub
- End If
- '密码错误时设置焦点
- Me.txt密码 = Null
- Me.txt用户名 = Null
- Me.txt用户名.SetFocus
- End If
- End If
- rs.Close
- Set rs = Nothing
- End If
- exit_确定_Click:
- Exit Sub
- err_确定_Click: '错误处理
- MsgBox (Err.Description)
- Resume exit_确定_Click
- End Sub
复制代码 注释已经写得很清楚了,我这里就不再一一解释了。现在我们回归到实际应用上,先提出两个问题:
1、是否一定要区分用户输入用户名还是密码?
2、是否一定要输入三次错误就退出。
---------------------------------------
大家先想想这两个问题,分割线
---------------------------------------
---------------------------------------
现在先来看问题1:
从逻辑上来看,我们先判断是否输入用户名,如果输入,接着判断是否输入密码,都输入了再判断密码跟用户名是否匹配。然而,对于我们来说,是否可以把这两步合在一起呢?也就是说,都输入了再判断?如果那样的话,逻辑上就可以省略一个嵌套,而用一个And来判断即可。
再谈谈问题2:
输入三次错误就退出,听起来很像银行卡的玩法。例如输错三次密码就锁定银行卡,需要电话解锁等等。你可以说,也可以跟银行卡那样锁定啊。是的,从理论上讲是可以实现的,把输入错误次数写入数据表,然后每次登录前先核对是否超过规定次数…然而是否有必要,大家可以自行斟酌。而这段代码的问题在于,使用的是公共变量。输错三次退出后,重新登录时又可以输入三次。所以,在实际情况中,这段代码属于冗余的。
---------------------------------------
基于上面的考虑,我们接下来开始简化代码:
- Private Sub cmd确定_Click()
- Dim lngNum As Long
- On Error GoTo err_确定_Click
-
- strSQL = "select count(登录名) from 管理员 where 登录名='" & Me.txt用户名 _
- & "' and 密码='" & Me.txt密码 & "'"
-
- rs.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- lngNum = rs(0)
-
- If IsNull(Me.txt用户名) Then
- MsgBox ("请输入用户名!"), vbInformation, "出错"
- ElseIf IsNull(Me.txt密码) Then
- MsgBox ("请输入用户密码!"), vbInformation, "出错"
- ElseIf lngNum <> 1 Then
- MsgBox ("没有这个用户,或者密码错误,重新确认输入后还不能登陆时请通知管理员!"), vbCritical, "出错"
- Else
- DoCmd.OpenForm "主页"
- End If
-
- rs.Close
- Set rs = Nothing
-
- exit_确定_Click:
- Exit Sub
- err_确定_Click: '错误处理
- MsgBox (Err.Description)
- Resume exit_确定_Click
- End Sub
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|