Microsoft Access数据库登录表单中的不匹配错误

时间:2018-10-11 20:09:46

标签: database forms ms-access

我在Access数据库中的登录表单中得到运行时13错误=“不匹配错误”。 目前,该表单适用于成员,并且可以成功登录他们,但是,当我尝试从Trainer表中输入正确的登录详细信息时,会出现运行时错误。

Option Compare Database

Private Sub Command1_Click()

    If IsNull(Me.txtEmail) Then
        MsgBox "Please Enter Email Address", vbInformation, "Email Requeired"
        Me.txtEmail.SetFocus
    ElseIf IsNull(Me.txtPassword) Then
        MsgBox "Please Enter Email Address", vbInformation, "Email Requeired"
        Me.txtPassword.SetFocus
    Else
       'process the job'
        If (IsNull(DLookup("MemberEmail", "TBL_Members", "MemberEmail = '" & Me.txtEmail.Value & "' And MemberPassword = '" & Me.txtPassword.Value & "'")) Or (DLookup("TrainerEmail", "TBL_Trainers", "TrainerEmail = '" & Me.txtEmail.Value & "' And TrainerPassword = '" & Me.txtPassword.Value & "'"))) Then
            MsgBox "Invalid Username or Password!"
        Else
            MemberEmail = DLookup("[MemberEmail]", "TBL_Members", "[MemberEmail] = '" & Me.txtEmail.Value & "'")
            TrainerEmail = DLookup("[TrainerEmail]", "TBL_Trainers", "[TrainerEmail] = '" & Me.txtEmail.Value & "'")
            SecurityLevel = DLookup("[SecurityLevel]", "TBL_Members", "[MemberEmail] = '" & Me.txtEmail.Value & "'")
            DoCmd.Close
            If (TempPass = "password") Then
                MsgBox "Please change Password", vbInformation, "New password required"
                DoCmd.OpenForm "frmUserinfo", , , "[UserLogin] = " & UserLogin
            Else
                'open different form according to user level
                If SecurityLevel = 1 Then ' for Members
                    DoCmd.OpenForm "Admin"
                Else
                    DoCmd.OpenForm "Navigation Form"
                End If

            End If
        End If
    End If
End Sub

Private Sub Form_Load()
    Me.txtEmail.SetFocus
End Sub

1 个答案:

答案 0 :(得分:1)

您的问题出在以下表达式中:

If (IsNull(DLookup("MemberEmail", "TBL_Members", "MemberEmail = '" & _
    Me.txtEmail.Value & "' And MemberPassword = '" & Me.txtPassword.Value & "'")) _
    Or (DLookup("TrainerEmail", "TBL_Trainers", "TrainerEmail = '" & _
    Me.txtEmail.Value & "' And TrainerPassword = '" & Me.txtPassword.Value & "'"))) _
Then

我们添加一些变量以使其更易于阅读:

Dim varM As Variant
Dim varT As Variant

varM = DLookup("MemberEmail", "TBL_Members", "MemberEmail = '" & _
    Me.txtEmail.Value & "' And MemberPassword = '" & Me.txtPassword.Value & "'"))
varT = DLookup("TrainerEmail", "TBL_Trainers", "TrainerEmail = '" & _
    Me.txtEmail.Value & "' And TrainerPassword = '" & Me.txtPassword.Value & "'"))

If (IsNull(varM Or varT)) Then

问题在于Or需要布尔或数字操作数,但是您将其应用于电子邮件地址,然后检查结果是否为空。您真正想做的是检查每个表达式是否为空,然后将这些表达式的结果用作Or的操作数:

If (IsNull(varM) Or IsNull(varT)) Then

此外,如注释中所指出,运算符应为And,而不是Or,因为您永远都不会期望两个值都不为空:

If (IsNull(varM) And IsNull(varT)) Then

我将留给您了解如何在不带变量的原始表达式中解决此问题。

相关问题