在学完VB之后进入到下一个学习资料《红皮书实例》,当时挺激动的,学习了好长时间的VB终于要结束了,学的时间长了感觉有点枯燥。第一眼看见红皮书的感觉就是代码特别多。在做第一个实例的时候就遇到了挫折,信心受到了打击。好了,就进入到在学习过程中遇到的问题吧!
1.在敲完代码之后点击运行时出现下图情况: 用户定义类型未定义,出现这种情况的原因是我们在运行之前没有建立ADO引用,ADO引用对象操作如下:
(1)选择“工程——引用——打开ADO对象库——选择Microsoft ActiveX Data Objects 2.5 Library——单击确定”ADO对象库建立完成。
2.建立好之后出现了找不到数据库的问题,这里就涉及到了路径的问题,绝对路径和相对路径,之前在VB中也出现过。
(1)绝对路径:就是从盘符开始,一级一级的一直向下找,像一条弯路一样,都必须经过,在计算机里如图。
(2)相对路径:这会给我们带来很大的便利,在打开文件时就不用一级一级的找了,直接就从计算机里找到了如出现“App.Path”就是加载绝对路径。
3。当这些都处理完之后又出现了一个最简单的问题,怎么侃爷看不出,如下图,说是<admin>i不是系统用户,请检查用户名输入是否正确。运行了好几遍都出现,细节决定成败,看出来了端倪,原来是在用户名之前有个空格。才导致出现这样的情况。
(1)用户名之前的空格,如图可以看见,鼠标的焦点之前有空格,空格的位置也占了字节,所以会出现这种情况,将空格删除即可。
以下就是我的代码
'用户名:admin
'密 码:123
Option Explicit
Const MaxLogTimes As Integer = 3
'定义允许用户验证登录信息的最多次数
Private Sub cmdCancel_Click()
Dim intResult As Integer
'请求用户确认是否真的退出系统登录
intResult = MsgBox("你选择了退出系统登录,退出将不能起送管理系统!" & vbCrLf _
& "是否真的退出?", vbYesNo, "登录验证")
If intResult = vbYes Then End
'根据用户选择结束应用程序
End Sub
Private Function Check_PassWord(ByVal UserName As String, ByVal PassWord As String) As Byte
'==================错误一 没有写参数
'自定义过程,作用是检查口令的正确性。
On Error GoTo gpError
Dim objCn As New ADODB.Connection '==================错误二ADODB
Dim objRs As New Recordset
Dim strCn As String
Dim strSQL As String
'建立数据库连接
objCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\实例11.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"
objCn.Open
'执行查询命令,获得用户登录口令
strSQL = "SELECT口令FROM系统用户WHERE用户名= '" & txtUserName & " '"
Set objRs.ActiveConnection = objCn
objRs.Open (strSQL)
'判断有无查询结果
If objRs.EOF Then
Check_PassWord = 0 '没有查询结果,表示该用户为非法用户
Else
'口令是否正确
If PassWord <> Trim(objRs.Fields("口令").Value) Then
'Trim()该函数是删除字符串中多余的空格
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
Private Sub cmdOK_Click()
Static intLogTimes As Integer
'用于保存用户请求验证的次数
Dim intChecked As Integer
Dim strName As String
Dim 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 Is = 0 '用户不是系统用户
MsgBox "<" & strName & _
">不是系统用户,请检查用户名输入是否正确!", vbCritical, "登录验证"
txtUserName.SetFocus
txtUserName.SelStart = 0
txtUserName.SelLength = Len(txtUserName)
Case Is = 1 '口令错误
MsgBox "口令错误,请重新输入!", vbCritical, "登录验证"
txtPassWord = ""
txtPassWord.SetFocus
Case Is = 2 '口令正确
Unload Me '卸载登录窗体
MsgBox "登录成功,将启动系统程序!", vbInformation, "登录验证"
frmMain.Show
Case Else '登录验证未正常完成
MsgBox "登录验证未正常完成!请重新运行登录程序," & vbCrLf _
& "如果仍不能登录,请报告系统管理员!", vbCritical, "登录验证"
'指示在调用MsgBox函数时,vbCritical显示关键消息图标。
End Select
End If
End Sub
登录成功的界面如下