检查了100遍还是不知道错在那里请大家指教!
我做了一个系统登陆的界面,执行时报错信息为“至少有一个参数未指定值”,请大家帮我看看是什么参数!
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 Connection, objRs As New Recordset, strCn As String, strSQL As String
'建立数据库连接
objCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & App.Path & "\数据库\实例1.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:
MsgBox Err.Description
Check_PassWord = 255 '验证无法正常完成,返回错误代码
Set objRs = Nothing
Set objCn = Nothing
End Function
------------------------------------------------------------------------------
Private Sub cmdOk_Click()
Static intLogTimes As Integer '静态常量intLogTimes用于保存用户请求验证的次数
Dim intChecked As Integer, strName As String, 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, "登录验证"
txtUserName.SetFocus
txtUserName.SelStart = 0
txtUserName.SelLength = Len(txtUserName)
Case 1 '口令错误
MsgBox "口令错误,请重新输入!", vbCritical, "登录验证"
txtPassword = ""
txtPassword.SetFocus
Case 2 '口令正确
Unload Me '卸载登录窗体
MsgBox "登录成功,将启动系统程序!", vbInformation, "登录验证"
'通常在此放置显示系统主窗体的语句,例如
'frmMain.Show
Case Else
'登录验证未正常完成
MsgBox "登录验证未正常完成!请重新运行登录程序," & vbCrLf _
& "如果仍不能登录,请报告系统管理员!", vbCritical, "登录验证"
End Select
End If
End Sub
问题点数:20、回复次数:11Top
1 楼Leftie(左手,为人民币服务)回复于 2006-06-01 08:32:06 得分 2
具体错在哪一行?
将Microsoft.Jet.OLEDB.3.51改成Microsoft.Jet.OLEDB.4.0试试Top
2 楼iamxiang(真心微笑)回复于 2006-06-01 08:37:58 得分 2
把Option Explicit取消了再试试!Top
3 楼bejon(阿牛[如果我懂,必坦诚相告;如果您懂,请不吝赐教。])回复于 2006-06-02 00:51:31 得分 2
Unload Me 以后再执行msgbox?Top
4 楼of123()回复于 2006-06-02 08:50:35 得分 10
strSQL = "SELECT 口令 FROM 系统用户 WHERE 用户名='" & UserName & "'"
字段名是否正确?
Top
5 楼29673079(薛圆)回复于 2006-06-04 14:06:05 得分 0
以上各位大侠说的方面我都试过,还是不行,我分过程执行时,发现这个错是报在Private Sub cmdOk_Click()上,请大家帮我看看!!!!!!!!!!!
Top
6 楼chuting(学习的动力)回复于 2006-06-04 17:07:19 得分 4
Static intLogTimes As Integer
做一个全局变量吧Top
7 楼chuting(学习的动力)回复于 2006-06-04 17:08:13 得分 0
要不直接用也可以的
intLogTimes=0
.
.
.
intLogTimes=intLogTimes+1Top
8 楼chuting(学习的动力)回复于 2006-06-04 17:09:56 得分 0
你的查询语句也不科学
strSQL = "SELECT count(*) FROM 系统用户 WHERE 用户名='" & UserName & "' and 口令='" & password & "'"
这样多好Top
9 楼wolfhero(小炉子)回复于 2006-06-04 17:58:35 得分 0
Dim objCn As New Connection, objRs As New Recordset
改成
Dim objCn As New ADODB.Connection, objRs As New ADODB.RecordsetTop
10 楼of123()回复于 2006-06-04 18:06:40 得分 0
chuting(机器人):
你的查询语句才不科学,安全性差。当任何人在口令中键入 ' or ''=' 时,你的查询就是:
SELECT count(*) FROM 系统用户 WHERE 用户名='一个用户名' and 口令='' or ''=''
结果会如何?Top
11 楼29673079(薛圆)回复于 2006-06-04 22:25:12 得分 0
我谢谢大家了,还是 of123()兄说的没错我的字段名错了一个字母,我一直没检查出来,晕!!!!!!!!!!!!!!!!!!!Top




