Ошибка несоответствия в форме входа в базу данных Microsoft Access - PullRequest
0 голосов
/ 11 октября 2018

Я получаю во время выполнения 13 error = "mismatch error" в форме входа в базу данных Access.В настоящее время форма работает для участников и успешно регистрирует их, однако, когда я пытаюсь ввести правильные данные для входа из таблицы тренера, я получаю ошибку времени выполнения.

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 голосов
/ 11 октября 2018

Ваша проблема в этом выражении:

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

Я оставлю это вам, чтобы выяснить, как исправить это в оригиналевыражение без переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...