设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2620|回复: 3
打印 上一主题 下一主题

[其它] 浅谈类模块之三—我这儿有本秘笈

[复制链接]
跳转到指定楼层
1#
发表于 2018-8-17 12:30:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      我这儿有本秘笈,想学吗?

      武功秘笈之所以成为秘笈,主要在于里面有招式,也就是说,它会告诉你怎么用。用什么招式可以对付对手的哪一招。也就是说,这是一个含有使用方法的东西。这也就提到了我们接下来要解决的问题:如何使用这个类模块。例如,登录时,我们应该怎么把用户名和密码传进来,进行验证并实现登录的步骤。

      说到这个,我们开始考虑,应该放在哪个“箱子”里。——说是“哪个”,是因为在Access里,比武侠小说里的箱子要有更多的选择。例如,我们可以创建一个集合(collection)用来存储数据,也可以把数据存储在表里。但是考虑到登录数据,固化下来更适合实际情况,因此这里使用了表来存储。
      创建一个表(tblLogin)定义至少4个字段(userName、password、question、answer)备用。

      确定了这一点,我们就可以开始写第一个方法:登录。
      我们知道,登录要判断两样东西,第一:这个用户是否存在,第二:密码是否正确。虽然可以两个一起来判断。不过,考虑到后面还有一个注册功能,需要判断用户名是否存在,因此,这里还是先写一个判断用户的模块供调用。
      一般来说,判断登录可以用DLookup之类,也可以用ADO。考虑到性能问题,这里选择了后者。而由前面所知,我们将会有多次使用ADO的情况(登录、注册、忘记密码、重置密码),那么写一个通用模块显然可以偷下懒。
  1. Private Function GetRS(ByVal strQuery As String) As ADODB.Recordset

  2.     Dim rs As New ADODB.Recordset
  3.     Dim conn As New ADODB.Connection
  4.    
  5.    On Error GoTo GetRS_Error
  6.    
  7.     Set conn = CurrentProject.Connection
  8.     rs.Open strQuery, conn, adOpenKeyset, adLockOptimistic
  9.     Set GetRS = rs
  10. GetRS_Exit:
  11.     Set rs = Nothing
  12.     Set conn = Nothing
  13.     Exit Function
  14.    
  15. GetRS_Error:
  16.     MsgBox (Err.Description)
  17.     Resume GetRS_Exit
  18.    
  19. End Function
复制代码
    这个模块将会返回一个记录集,用于各种和登录相关的方法。完成这一点之后,我们接下来写一个模块用于判断用户是否存在:
  1. Private Function getUser() As Boolean

  2.     Dim rst As ADODB.Recordset
  3.     Dim lngCount As Long
  4.     Dim blnExist As Boolean
  5.    
  6.     Set rst = GetRS("select count(*) from tblLogin where userName='" & locUserName & "'")
  7.     lngCount = rst(0)
  8.     rst.Close
  9.    
  10.     If lngCount > 0 Then
  11.         blnExist = True
  12.     Else
  13.         blnExist = False
  14.     End If
  15.    
  16.     getUser = blnExist
  17.    
  18. End Function
复制代码
     这个模块的作用就不赘述了。最后才是我们的登录模块:
  1. Function Login() As Boolean

  2.     Dim rst As ADODB.Recordset
  3.     Dim lngCount As Long
  4.     Dim blnLogin As Boolean
  5.    
  6.     If getUser Then
  7.         Set rst = GetRS("select count(*) from tblLogin where userName='" & locUserName & "' and password='" & locPassword & "'")
  8.         lngCount = rst(0)
  9.         rst.Close
  10.         If lngCount = 0 Then
  11.             MsgBox "用户名或密码错误,请重试", vbInformation, "提示"
  12.             
  13.             blnLogin = False
  14.             
  15.             Exit Function
  16.         Else
  17.             blnLogin = True
  18.         End If
  19.     Else
  20.         MsgBox "用户名不存在,请重试或注册", vbInformation, "提示"
  21.         blnLogin = False
  22.         Exit Function
  23.     End If
  24.    
  25.     Login = blnLogin
  26.    
  27. End Function
复制代码
     也许你留意到,这个登录模块用的是function,返回一个布尔值。为什么要这样写呢?因为往往登录后,我们都会让用户进入主界面,当你还没确定主界面用哪个文件时,这样写会给以你更大的灵活性,或者说是操作空间。
      我们可以看得出,这些函数的写法和标准模块的写法并没有什么不同。所以,从这一点来说,类模块的方法并不是那么难。接下来,我们来看看,这个类模块是否可以用。创建一个窗体,输入在登录的点击事件中输入以下代码:
  1. Private Sub cmdLogin_Click()

  2.     Dim loginObj As clsLogin
  3.    
  4.     If IsNull(Me.combUser) Or IsNull(Me.txtPassword) Then
  5.         MsgBox "请输入用户名和密码", vbInformation, "提示"
  6.         Me.txtPassword.SetFocus
  7.     Else
  8.         Set loginObj = New clsLogin
  9.         loginObj.userName = Me.combUser
  10.         loginObj.password = Me.txtPassword
  11.         
  12.         If loginObj.Login Then
  13.             DoCmd.OpenForm "frmMain"
  14.             Set loginObj = Nothing
  15.             DoCmd.Close acForm, Me.Name, acSaveNo
  16.         Else
  17.             Me.txtPassword = Null
  18.             Me.txtPassword.SetFocus
  19.         End If
  20.     End If
  21.    
  22. End Sub
复制代码
     至此,一个简单的登录功能完成了。那么我们来验证下,是否有问题~~
      没输入用户名或者密码时是这个样子:

      密码出错后,是这个界面:

      登录成功后,则会跳转到主界面。这里就不截图了。
      接下来,我们把剩下的代码写好即可。这里就不贴代码了。详细请留意附件。
      浅谈类模块之一——从一口箱子谈起
      浅谈类模块之二——确定要装的B


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2018-8-17 12:53:13 | 只看该作者
难得看到佳作了,总算来几篇了。先顶上去
3#
发表于 2018-8-31 09:20:04 | 只看该作者
我等要好好学习,多谢分享!
4#
发表于 2018-9-6 15:41:57 | 只看该作者
真心的来学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-26 12:08 , Processed in 0.098276 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表