Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access “用户名和密码不正确”是否正确?_Ms Access_Vba - Fatal编程技术网

Ms access “用户名和密码不正确”是否正确?

Ms access “用户名和密码不正确”是否正确?,ms-access,vba,Ms Access,Vba,我有一个MS Access 2016数据库,用户使用用户名和密码登录数据库。然后,代码将打开一组表单,但有一个我找不到的错误 专用子btnLogin\U单击 如果IsNullMe.txtBoxUsername,则 MsgBox请输入用户名、vbInformation和必需的用户名 Me.txtBoxUsername.SetFocus ElseIf IsNullMe.txtBoxPassword则 MsgBox请输入密码、VBA信息、所需密码 Me.txtBoxPassword.SetFocus

我有一个MS Access 2016数据库,用户使用用户名和密码登录数据库。然后,代码将打开一组表单,但有一个我找不到的错误

专用子btnLogin\U单击 如果IsNullMe.txtBoxUsername,则 MsgBox请输入用户名、vbInformation和必需的用户名 Me.txtBoxUsername.SetFocus ElseIf IsNullMe.txtBoxPassword则 MsgBox请输入密码、VBA信息、所需密码 Me.txtBoxPassword.SetFocus 其他的 “处理这项工作 如果IsNullDLookupUsername、Staff表、Username='&Me.txtBoxUsername.Value&',或_ IsNullDLookupPassword,Staff表,Password='&Me.txtBoxPassword.Value&',然后 MsgBox用户名或密码不正确 其他的 MsgBox用户名和密码正确 DoCmd.OpenForm分支表单 DoCmd.OpenForm客户表单 DoCmd.OpenForm项目表单 DoCmd.OpenForm订单 DoCmd.OpenForm工作人员表单 如果结束 如果结束 端接头 员工的用户名和密码为“RJ1”。当我尝试使用这些凭据登录时,会显示MsgBox错误的用户名或密码

为什么会这样

*作为对HansUp的问题“错误消息是什么?”

解决方案:

Private Sub btnLogin_Click()

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSelect As String
strSelect = "SELECT Count(*) FROM [Staff Table]" & vbCrLf & _
    "WHERE Username=[pUser] AND [Password]=[pPWD];"
Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strSelect)
qdf.Parameters("pUser").Value = Me!txtBoxUsername.Value
qdf.Parameters("pPWD").Value = Me!txtBoxPassword.Value
If qdf.OpenRecordset(dbOpenSnapshot)(0) = 0 Then

End If

If IsNull(Me.txtBoxUsername) Then

    MsgBox "Please Enter Username", vbInformation, "Username Required"
    Me.txtBoxUsername.SetFocus

ElseIf IsNull(Me.txtBoxPassword) Then

    MsgBox "Please Enter Password", vbInformation, "Password Required"
    Me.txtBoxPassword.SetFocus

Else
    'proccess the job
    If ((IsNull(DLookup("[Username]", "Staff Table", "[Username] = '" & Me.txtBoxUsername.Value & "'"))) Or _
(IsNull(DLookup("[Password]", "Staff Table", "[Password] = '" & Me.txtBoxPassword.Value & "'")))) Then
        MsgBox "Incorrect Username Or Password"
    Else
        DoCmd.OpenForm "Branch Form"
        DoCmd.OpenForm "Customer Form"
        DoCmd.OpenForm "Item Form"
        DoCmd.OpenForm "Order Form"
        DoCmd.OpenForm "Staff Form"
    End If

End If
End Sub
我认为你的DLookups由于语法错误而失败了。尝试:

If ((IsNull(DLookup("[Username]", "Staff Table", "[Username] = '" & Me.txtBoxUsername.Value & "'"))) Or _
(IsNull(DLookup("[Password]", "Staff Table", "[Password] = '" & Me.txtBoxPassword.Value & "'")))) Then
我认为你的DLookups由于语法错误而失败了。尝试:

If ((IsNull(DLookup("[Username]", "Staff Table", "[Username] = '" & Me.txtBoxUsername.Value & "'"))) Or _
(IsNull(DLookup("[Password]", "Staff Table", "[Password] = '" & Me.txtBoxPassword.Value & "'")))) Then
同样,这个If表达式计算用户名和密码是否在Staff表中找到,但不一定在同一行中找到。因此,如果你用另一个用户的密码提交一个用户的名字,这个逻辑会认为这些值是一个有效的组合:

“处理这项工作 如果IsNullDLookupUsername、Staff表、Username='&Me.txtBoxUsername.Value&',或_ IsNullDLookup[Password],Staff表[Password]='&Me.txtBoxPassword.Value&',然后 '注:添加了引号^ 确保检查用户名和密码是否存在于同一行中:

作为字符串的Dim strCriteria strCriteria=Username='&Me.txtBoxUsername.Value&'和[Password]='&Me.txtBoxPassword.Value&' Debug.Print strCriteria'为,此If表达式计算用户名和密码是否在Staff表中找到,但不一定在同一行中找到。因此,如果你用另一个用户的密码提交一个用户的名字,这个逻辑会认为这些值是一个有效的组合:

“处理这项工作 如果IsNullDLookupUsername、Staff表、Username='&Me.txtBoxUsername.Value&',或_ IsNullDLookup[Password],Staff表[Password]='&Me.txtBoxPassword.Value&',然后 '注:添加了引号^ 确保检查用户名和密码是否存在于同一行中:

作为字符串的Dim strCriteria strCriteria=Username='&Me.txtBoxUsername.Value&'和[Password]='&Me.txtBoxPassword.Value&'
调试。打印strCriteria的逻辑似乎很好。您确定Me.txtBoxUsername.Value和Me.txtBoxPassword.Value是您认为的值吗?也就是说,当您调试它们的值为RJ1时?或者,您可以使用参数化记录集来确认用户/密码,这样就不会有用户输入'dlookup'和dlookup失败的风险。此外,当您获得确认记录集时,您还将拥有其他可能有用的列,如权限。看起来我可以输入我的用户名和同事密码,这样我就可以进入了。DLookups不应该在Staff表的同一行上搜索匹配的条目吗?@Brad Yes,RJ1是用户名和密码。对于该职员,Me.txtBoxUsername.Value和Me.txtBoxPassword.Value都是相同的。@ChristopherD。我不确定这是否有效,尽管错误是持续的,因此目前还无法测试。逻辑似乎很好。您确定Me.txtBoxUsername.Value和Me.txtBoxPassword.Value是您认为的值吗?也就是说,当您调试它们的值为RJ1时?或者,您可以使用参数化记录集来确认用户/密码,这样就不会有用户输入'dlookup'和dlookup失败的风险。此外,当您获得确认记录集时,您还将拥有其他可能有用的列,如权限。看起来我可以输入我的用户名和同事密码,这样我就可以进入了。DLookups不应该在Staff表的同一行上搜索匹配的条目吗?@Brad Yes,RJ1是用户名和密码。对于该职员,Me.txtBoxUsername.Value和Me.txtBoxPassword.Value都是相同的。@ChristopherD。我不确定这是否有效,尽管错误是持续的,因此目前无法测试。只是看到双引号也没有正确连接字符串。我已经编辑了我的答案。太棒了,成功了。一旦RJ1被输入到用户名和密码字段中,就会显示一条消息,说明userna
me和密码正确,将打开所有5个表单:DJust发现双引号也没有正确连接字符串。我已经编辑了我的答案。太棒了,成功了。将RJ1输入用户名和密码字段后,将显示一条消息,说明用户名和密码正确,然后打开所有5个表单:无论用户名和密码如何,单击“登录”按钮后返回错误的数据。另外,在Username=[pUser]和[Password]=[pPWD]的括号中添加缺少的括号;导致此错误的原因?哪一行触发了错误,错误消息是什么?我不确定哪一行,尽管第5行的用户名开头和结尾缺少括号,因为它们在单词Password上可见。我将Password括起来,因为它是一个密码。用户名不是保留字,但如果您愿意,您可以将其括起来。。。那应该没什么区别。您面临的错误是由于其他原因造成的。好吧,这不是问题所在。我不知道是什么。我会进一步调查。一旦单击“登录”按钮,无论用户名和密码如何,都会返回一个错误。另外,在Username=[pUser]和[Password]=[pPWD]的括号中添加缺少的括号;导致此错误的原因?哪一行触发了错误,错误消息是什么?我不确定哪一行,尽管第5行的用户名开头和结尾缺少括号,因为它们在单词Password上可见。我将Password括起来,因为它是一个密码。用户名不是保留字,但如果您愿意,您可以将其括起来。。。那应该没什么区别。您面临的错误是由于其他原因造成的。好吧,这不是问题所在。我不知道是什么。我会进一步调查。