Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]VBA登录窗体总是提示 “输入密码有误” 实际输入密码是正确的。

丁先生  发表于:2019-05-21 21:13:27  
复制

一个登录窗体,运行时输入密码后 总是提示 "输入密码有误,请重新输入"

实际上密码是正确的密码,和 ”用户密码表“” 里的密码是对应的上!

请问是什么原因???VBA命令如下:


Private Sub OK_Click()



If IsNull(Me.Combo29) Then
MsgBox "用户名不能为空", vbOKOnly, "提示"
Me.Combo29.SetFocus
Exit Sub
End If


If IsNull(Me.Password) Then
MsgBox "密码不能为空", vbOKOnly, "提示"
Me.Password.SetFocus
Exit Sub
End If


If Me.Password.Value = DLookup("密码", "用户密码表", "[用户名]= '" & Me.Combo29 & " '") Then
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "主页"
Else
MsgBox "输入密码有误,请重新输入", vbOKOnly, "出错"
Me!Password.SetFocus
Exit Sub
End If
End Sub


 

Top
半夜罗 发表于:2019-05-22 13:02:52

DoCmd.OpenForm "主页"'先打开

DoCmd.Close acForm, Name'后关闭

不是先关闭后打开

Exit Sub'不需要这句代码



丁先生 发表于:2019-05-23 11:29:03

我按照你的帖子修改了相关语句,可是还是显示同样的错误。点击下载此附件


示例数据库文件附后供参考,请回复。多谢!



yuhong 发表于:2019-05-23 16:31:51
我用过的,你试试点击下载此附件

半夜罗 发表于:2019-05-23 17:26:02

修改这句就对了,因为你的“用户名”文本框取的是2列,看起来是中文,实际上是数字,所以把“DLookup”获取的值用“Val”函数格式化成数字。

If Me.Password = Val(DLookup("密码", "用户密码表", "[用户id]= " & Me.Combo29)) Then

'DoCmd.OpenForm "主页"



丁先生 发表于:2019-05-25 13:36:35
多谢 半夜罗 大师!按照你上面的帖子做了修改,终于成功了!你点出了问题的实质!已经给你加了5分!

丁先生 发表于:2019-05-25 14:11:58
但是我还有一个小疑问 DLookup("密码", "用户密码表", "[用户id]= " & Me.Combo29) 这个语句返回的值(密码) 本身就是一个数字, 因为我 在用户密码表里 密码字段 的 属性是 数字,所以不用再加 VAL 函数 格式化成数字。我刚才去掉 VAL, 结果不行。看来我的上述想法是错误的,请告诉我我的上述想法错在哪里吗?

总记录:6篇  页次:1/1 9 1 :