|
我这儿有本秘笈,想学吗?
武功秘笈之所以成为秘笈,主要在于里面有招式,也就是说,它会告诉你怎么用。用什么招式可以对付对手的哪一招。也就是说,这是一个含有使用方法的东西。这也就提到了我们接下来要解决的问题:如何使用这个类模块。例如,登录时,我们应该怎么把用户名和密码传进来,进行验证并实现登录的步骤。
说到这个,我们开始考虑,应该放在哪个“箱子”里。——说是“哪个”,是因为在Access里,比武侠小说里的箱子要有更多的选择。例如,我们可以创建一个集合(collection)用来存储数据,也可以把数据存储在表里。但是考虑到登录数据,固化下来更适合实际情况,因此这里使用了表来存储。
创建一个表(tblLogin)定义至少4个字段(userName、password、question、answer)备用。
确定了这一点,我们就可以开始写第一个方法:登录。
我们知道,登录要判断两样东西,第一:这个用户是否存在,第二:密码是否正确。虽然可以两个一起来判断。不过,考虑到后面还有一个注册功能,需要判断用户名是否存在,因此,这里还是先写一个判断用户的模块供调用。
一般来说,判断登录可以用DLookup之类,也可以用ADO。考虑到性能问题,这里选择了后者。而由前面所知,我们将会有多次使用ADO的情况(登录、注册、忘记密码、重置密码),那么写一个通用模块显然可以偷下懒。
- Private Function GetRS(ByVal strQuery As String) As ADODB.Recordset
- Dim rs As New ADODB.Recordset
- Dim conn As New ADODB.Connection
-
- On Error GoTo GetRS_Error
-
- Set conn = CurrentProject.Connection
- rs.Open strQuery, conn, adOpenKeyset, adLockOptimistic
- Set GetRS = rs
- GetRS_Exit:
- Set rs = Nothing
- Set conn = Nothing
- Exit Function
-
- GetRS_Error:
- MsgBox (Err.Description)
- Resume GetRS_Exit
-
- End Function
复制代码 这个模块将会返回一个记录集,用于各种和登录相关的方法。完成这一点之后,我们接下来写一个模块用于判断用户是否存在:
- Private Function getUser() As Boolean
- Dim rst As ADODB.Recordset
- Dim lngCount As Long
- Dim blnExist As Boolean
-
- Set rst = GetRS("select count(*) from tblLogin where userName='" & locUserName & "'")
- lngCount = rst(0)
- rst.Close
-
- If lngCount > 0 Then
- blnExist = True
- Else
- blnExist = False
- End If
-
- getUser = blnExist
-
- End Function
复制代码 这个模块的作用就不赘述了。最后才是我们的登录模块:
- Function Login() As Boolean
- Dim rst As ADODB.Recordset
- Dim lngCount As Long
- Dim blnLogin As Boolean
-
- If getUser Then
- Set rst = GetRS("select count(*) from tblLogin where userName='" & locUserName & "' and password='" & locPassword & "'")
- lngCount = rst(0)
- rst.Close
- If lngCount = 0 Then
- MsgBox "用户名或密码错误,请重试", vbInformation, "提示"
-
- blnLogin = False
-
- Exit Function
- Else
- blnLogin = True
- End If
- Else
- MsgBox "用户名不存在,请重试或注册", vbInformation, "提示"
- blnLogin = False
- Exit Function
- End If
-
- Login = blnLogin
-
- End Function
复制代码 也许你留意到,这个登录模块用的是function,返回一个布尔值。为什么要这样写呢?因为往往登录后,我们都会让用户进入主界面,当你还没确定主界面用哪个文件时,这样写会给以你更大的灵活性,或者说是操作空间。
我们可以看得出,这些函数的写法和标准模块的写法并没有什么不同。所以,从这一点来说,类模块的方法并不是那么难。接下来,我们来看看,这个类模块是否可以用。创建一个窗体,输入在登录的点击事件中输入以下代码:
- Private Sub cmdLogin_Click()
- Dim loginObj As clsLogin
-
- If IsNull(Me.combUser) Or IsNull(Me.txtPassword) Then
- MsgBox "请输入用户名和密码", vbInformation, "提示"
- Me.txtPassword.SetFocus
- Else
- Set loginObj = New clsLogin
- loginObj.userName = Me.combUser
- loginObj.password = Me.txtPassword
-
- If loginObj.Login Then
- DoCmd.OpenForm "frmMain"
- Set loginObj = Nothing
- DoCmd.Close acForm, Me.Name, acSaveNo
- Else
- Me.txtPassword = Null
- Me.txtPassword.SetFocus
- End If
- End If
-
- End Sub
复制代码 至此,一个简单的登录功能完成了。那么我们来验证下,是否有问题~~
没输入用户名或者密码时是这个样子:
密码出错后,是这个界面:
登录成功后,则会跳转到主界面。这里就不截图了。
接下来,我们把剩下的代码写好即可。这里就不贴代码了。详细请留意附件。
浅谈类模块之一——从一口箱子谈起
浅谈类模块之二——确定要装的B
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|