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

标签 database forms ms-access

我在 Access 数据库的登录表单中收到运行时 13 错误 =“不匹配错误”。 目前该表单适用于成员(member)并成功登录,但是当我尝试从培训师表中输入正确的登录详细信息时,出现运行时错误。

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

最佳答案

你的问题出在这个表达式中:

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 需要 bool 或数字操作数,但您将其应用于电子邮件地址,然后检查结果是否为空。您真正想要做的是检查每个表达式是否为 null,然后将这些表达式的结果用作 Or 的操作数:

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

此外,正如评论中指出的那样,运算符应该是 And,而不是 Or,因为您绝不会期望这两个值都是非空的:

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

我会留给您解决如何在没有变量的原始表达式中修复它。

关于database - Microsoft Access 数据库登录表单中的不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768178/

相关文章:

php - 为什么这不更新信息

php - 使用 Laravel Eloquent 连接同一服务器上不同数据库中的两个 MySQL 表

php - MySQL 的简单 PHP 表单出错

php - 我如何创建一种绕过密码确认和电子邮件确认的方法?

ms-access - 在 Microsoft Access 2010 中创建关系时出现 "Too many indexes on table"错误

mysql - 时间戳格式不正确的外键

mysql - (MySQL) 多列多级表查询?

javascript - 基于html5中相同形式的另一个字段中的数据设置输入最大长度的方法?

ms-access - 在没有 LinkChild/LinkMaster 的情况下链接子报表

sql - 我可以使用 INNER JOIN 代替 WHERE 吗?