冰冻三尺 之“系统登录对话框”

       

                         冰冻三尺 之“系统登录对话框”

   点滴积累带来巨大进步。系统登录对话框,这是我做的第一个和系统沾边的小例子,说沾边也只能说是名字中有“系统”两个字,虽然很简单,但是却值得积累着其中的点点滴滴。因为点滴积累带来巨大的进步。

       例子虽然小,但是该做的一点也不能省,首先给自己做了一个流程。

        第一部分   创建数据库

        备注: vb本身自带的数据库功能创建数据库。

        注意事项:数据库虽然小,并且简单,但是每一步都要注意,因为也是刚接触数据库应用,说不定什么地方就会出问题

        第二部分 窗体设计

        备注:简单熟练。很容易完成

        注意事项:最最值得注意的就是控件的命名规则。这时候已经开始真正的写代码,虽然现在都在看着敲,该注意的一点都不能含糊。

         第三部分 建立起ADO引用

         备注,实话是不是很懂。

          注意事项: 既然不懂,那么就在实践中慢慢体悟

       第四部分  编写功能代码

       备注,代码要先看懂,然后在敲

       注意事项: 要了解其中的真正的联系,不要觉得自己懂了,要真正的懂。

        第五部分  保存工程,测试运行。

      简单的将这个小例子分成了这么五个部分,然后就是开始做了。数据库的创建,不是太困难,只是觉得还有点生疏,不过也很快创建完成了。界面设计业没什么出彩的地方,放上几个控件也算完事了,ADO 引用更好弄添加上就行了。当然最最困难的还是代码部分。

          代码分三部分,取消按钮的代码,确定按钮的代码,再就是为了验证用户名和口令而创建的一个函数的代码。

         其中取消按钮代码的部分最简单,不在赘言。而函数部分的代码比较复杂,可以分成这么几部分:建立数据库,执行查询命令获得用户口令,判断有无这个查询结果,检查口令是否正确,关闭数据库连接释放对象,验证无法正常完成而返回的代码。做这种例子的时候,一般闲写上注释,然后在往注释下边写代码,代码写完了,注释就删掉。当所有的注释都删掉的时候,整个程序就已经弄的狠明白了。下面就是函数代码

PrivateFunction Check_Password(ByVal UserName As String, ByVal Password As String) AsByte
   On Error GoTo gperror
  
   Dim objCn As New Connection, objRs As NewRecordset, strCn As String
   Dim strSQL As String
 
   objCn.ConnectionString ="provider=microsoft.jet.OLEDB.3.51;" & "data source ="& App.Path & "\数据库文件\SystemLoad.mdb"
  
   objCn.Open
   strSQL = "select 口令 from 系统用户 where 用户名= '" & UserName & "'"
   Set objRs.ActiveConnection = objCn
   objRs.Open (strSQL)
  
   If objRs.EOF Then
      Check_Password = 0
   Else
     If Password <>Trim(objRs.Fields("口令").Value) Then
     Check_Password = 1
     Else
     Check_Password = 2
     End If
   End If
  
   objCn.Close
  
   Set objRs = Nothing
   Set objCn = Nothing
   Exit Function
  
gperror:
   Check_Password = 255
   Set  objRs = Nothing
   Set  objCn = Nothing
  
End Function


 

   还有就是确定按钮,其实结构比较简单主要是判断函数返回值的含义做出明确指示。代码如下:

 

PrivateSub cmdOk_Click()
    Static intLogTimes As Integer
    Dim intChecked As Integer, strName AsString, strPassword As String
    intLogTimes = intLogTimes + 1
    If intLogTimes > Maxlogtimes Then
           MsgBox "超过允许的登录次数" &vbCr _
                          &"应用程序将结束", vbCritical, "登录验证"
        End
    Else
   
       strName = Trim(txtUserName.Text)
       strPassword = Trim(txtPassword.Text)
      
       Select Case Check_Password(strName,strPassword)
           Case 0
              MsgBox "<" &strName & _
                      ">不是系统用户,请检查用户名输入是否正确", vbCritical, "登录验证"
           Case 1
              MsgBox "口令错误,请重新输入",vbCritical, "登录验证"
              txtPassword = ""
              txtPassword.SetFocus
           Case 2
               Unload Me
               Load frmSplash
               frmSplash.Show
          Case Else
          MsgBox "登录失败'未正常完成,请重新登录, "& vbCrLf _
                 &"如果仍不能登录,请报告系统管理员", vbCritical, "验证登录"
      End Select
  End If
End Sub


         当然看着简单,而且是看着写的,这其中反应出的问题仍然很大。总结一下下次注意。

         首先就是空格的使用,不知道什么时候养成了一个没事点下空格的习惯,这给自己带来了很多不必要的麻烦,有的地方或许多个空格没有什么关系,可是有的地方多了一个空格怎么都运行不过去。其次就是命名问题,好的命名不是以长短来判断的,而是是否真正的给你带来了方便,不要图一时之快就命那种看着没水平,用着不方便的类似 a 的这种命名,这样会给自己带来很多不必要的麻烦,尤其是控件或者函数越来越多的情况,我们自己找都头痛,又怎么给别人看我们的代码呢?再次就是格式问题,要错落有致,该缩的就缩,给自己带来的方便也是不言而喻的。

        运行通过自然也就完事了,可是完事之前我还进行了好长时间的代码调试,不过没什么经验可言,写到此,自己引以为戒,此次积累就是下次的进步。

你可能感兴趣的:(冰冻三尺 之“系统登录对话框”)