CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

检查了100遍还是不知道错在那里请大家指教!

楼主29673079(薛圆)2006-06-01 01:22:18 在 VB / 基础类 提问

我做了一个系统登陆的界面,执行时报错信息为“至少有一个参数未指定值”,请大家帮我看看是什么参数!  
   
   
  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

相关问题

关键词

得分解答快速导航

  • 帖主:29673079
  • Leftie
  • iamxiang
  • bejon
  • of123
  • chuting

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo