冰冻三尺 之“系统登录对话框”
点滴积累带来巨大进步。系统登录对话框,这是我做的第一个和系统沾边的小例子,说沾边也只能说是名字中有“系统”两个字,虽然很简单,但是却值得积累着其中的点点滴滴。因为点滴积累带来巨大的进步。
例子虽然小,但是该做的一点也不能省,首先给自己做了一个流程。
第一部分 创建数据库
备注: 用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 的这种命名,这样会给自己带来很多不必要的麻烦,尤其是控件或者函数越来越多的情况,我们自己找都头痛,又怎么给别人看我们的代码呢?再次就是格式问题,要错落有致,该缩的就缩,给自己带来的方便也是不言而喻的。
运行通过自然也就完事了,可是完事之前我还进行了好长时间的代码调试,不过没什么经验可言,写到此,自己引以为戒,此次积累就是下次的进步。