永发信息网

急,Access代码问题

答案:2  悬赏:70  手机版
解决时间 2021-05-14 04:17

请高手帮忙看看下面这个登录窗体的代码有什么错误,为什么用户名和密码必须设置成一样才有用,如用户名为“123”,密码也只能设成“123”。明天就要交数据库了,急啊。小弟先在这谢谢!

代码如下:

Public Function openrecord(str1 As String, record As ADODB.Recordset)
'创建一个查询,把符合str1中的SQL语句的记录集打开到record中
'为记录集record 分配空间
Set record = New ADODB.Recordset
'使用本数据库的连接打开记录集
record.Open str1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
End Function

Private Sub form_open(Cancel As Integer)
'设置打开窗体时的属性
Command10.Enabled = False
Form.KeyPreview = True
End Sub

Private Sub Command10_Click()
Dim strpassword, strusername As String
Dim flag As Integer
Dim record As ADODB.Recordset
flag = 0
'从"用户"表里读取用户名和密码
openrecord "select * from 用户", record
'循环判断用户名是否存在,密码是否正确
Do Until record.EOF
strusername = record("用户")
strpassword = record("密码")
If UCase(Me.Text1.Value) <> UCase(strusername) Then
record.MoveNext
'若相等,说明用户名存在,可以跳出循环
Else
flag = 1
Exit Do
End If
Loop
'flag=0 说明用户名不存在,进行处理
'设置文本框的内容为空,"确定"键不可用,焦点设在txtusername
If flag = 0 Then
MsgBox "没有这个用户,请重新输入"
Me.Text7.Value = ""
Me.Text1.Value = ""
Me.Text1.SetFocus
Command10.Enabled = False
Exit Sub
'若flag=1 说明所输入的用户名存在,进一步比较密码是否正确
'若密码出错,设置txtusername的内容不变,txtpassword的内容为空,
'若密码出错,"确定"键不可用,并把焦点设在txtpassword
Else
If UCase(Me.Text1.Value) <> UCase(strpassword) Then
MsgBox ("密码错误,请重新输入")
Me.Text7.Value = ""
Me.Text7.SetFocus
Command10.Enabled = False
Exit Sub
End If
End If
'用户名和密码都正确,打开"主界面"窗体
DoCmd.Close
DoCmd.OpenForm "主界面"
End Sub

Private Sub Command13_Click()
'设置"取消"键的事件过程
'点击取消后,文本框的内容为空,"确定"键不能用
Text7 = ""
Me.Text1.Value = ""
Command10.Enabled = False
Text2.SetFocus
End Sub

Private Sub form_keyup(keycode As Integer, Shift As Integer)
'检测用户名,密码文本框是否都有字符,有的话设置"确定"按钮可用
'在txtusername 或 txtpassword 中每键入一个字符,触发执行本段程序
'根据当前活动的控件名选择执行txtusername 或 txtpassword 的模块语句

Select Case Me.ActiveControl.Name
'若txtusername 和 txtpassword 中都至少有一个字符,cmdenter可用,否则不可用
Case "Text1":
'焦点在txtusername 时,若此文本框为空,则cmdenter不可用,退出此过程
If Me.ActiveControl.Text = "" Or IsNull(Me.ActiveControl.Text) Then
Command7.Enabled = False
Exit Sub
'若txtpassword文本框为空,则cmdenter不可用,退出此过程
Else
If Me.Text1.Value = "" Or IsNull(Me.Text7.Value) Then
Command10.Enabled = False
Exit Sub
End If
End If
Case "Text7":
On Error GoTo 11

'焦点在txtpassword 时,若此文本框为空,则cmdenter不可用,退出此过程
If Me.ActiveControl.Text = "" Or IsNull(Me.ActiveControl.Text) Then
11 Command10.Enabled = False
Exit Sub
'若txtusername文本框为空,则cmdenter不可用,退出此过程
Else
If Me.Text1.Value = "" Or IsNull(Me.Text1.Value) Then
Command10.Enabled = False
Exit Sub
End If
End If
Case Else:
'交点在其他控件,直接退出过程
Exit Sub
End Select
'txtusername 和 txtpassword 中都至少有一个字符,设置cmdenter可用
Command10.Enabled = True
Exit Sub
End Sub

Private Sub Command11_Click()
'单击"退出"按钮,退出access
DoCmd.Quit
End Sub

Private Sub 主体_Click()

End Sub

Private Sub Command14_Click()
On Error GoTo Err_Command14_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = ChrW(29992) & ChrW(25143) & ChrW(27880) & ChrW(20876)
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Command14_Click:
Exit Sub

Err_Command14_Click:
MsgBox Err.Description
Resume Exit_Command14_Click

End Sub

最佳答案

楼上好眼力,我看了一半就觉得晕了,这个密码验证做的好复杂啊。不知道是不是因为加入了SQL的内容所以才这样,因为我对SQL不熟悉不敢妄谈,不过单纯的ACCESS密码验证可以只用一个判断就搞定。
下面是我做的一个验证,算是一种思路吧,希望对楼主有所帮助



If Nz([输入密码]) = Nz(DLookup("[用户密码]", "用户", "[用户名称]="Me.输入用户名")) And Me.输入用户名 <> "" And Me.[输入密码] <> "" Then
MsgBox "登录成功", , "密码正确"
DoCmd.Close
DoCmd.Close acForm, "登陆介面", acSaveYes
Else
MsgBox "用户名或密码错误", , "请重新输入"
Me.输入密码.SetFocus



解释:
“登录介面”窗体上有两个文本输入框:[输入密码]和[输入用户名]
服务器上有一个表:“用户”,表里有[用户密码]和[用户名称]字段
上述代码设置在“登录介面”的确定按钮单击事件上

全部回答

循环判断用户名是否存在,密码是否正确 Do Until record.EOF strusername = record("用户") strpassword = record("密码") If UCase(Me.Text1.Value) <> UCase(strusername) Then record.MoveNext (这是第一段的)

若flag=1 说明所输入的用户名存在,进一步比较密码是否正确 '若密码出错,设置txtusername的内容不变,txtpassword的内容为空, '若密码出错,"确定"键不可用,并把焦点设在txtpassword Else If UCase(Me.Text1.Value) <> UCase(strpassword) Then MsgBox ("密码错误,请重新输入") ---我粘贴了你的两端代码,你看下

你用户名和密码都是用同一个Text1做的比较,所以你的用户名和密码必须输一样才可以

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
李福这个名字,看起来象有钱人吗?
兄弟真难做啊,有什么办法啊
龙江县江南蛋糕世界在哪里啊,我有事要去这里
郑州那里有DIY银质项链的!?
军人母亲生日祝福语
有个胖女生被车撞了后醒来是一年后了的小说
哪里能看同伊47?
18岁还能长高么?(有实例经验的进来)
CBG买号,下了订单过了30分钟。还要等多久才
复原四阶魔方的公式
魔域早刷BS的顺序是?
地下城狂战士45级穿一套什么紫重甲好呀
茶陵县双汇冷鲜肉批零中心地址是什么,有没有
匍匐的爬行是什么意思,缠绕茎、攀缘茎、匍匐
超级扣扣,求解答
推荐资讯
朱阁枕黄粱打一中国小说家
睡觉的环境太多人说话了,怎样才能安然入睡?
笔记本电脑启动时出现以下
最近我的农场怎么一直在送黄豆种子?
求一台4000左右的组装机
鄢陵县9 9 3特色农家饭庄地址在哪里啊
本科学位证丢了怎么办,全日制本科生没学位证
好玩的单机游戏。配置不要很高的~
DNF用不用幻影?
从此相见是路人句子,一朝为道万事空,从此相
步步高i266跟i518哪个好?用过的进
身份证后面12位是什么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?