Ошибка несоответствия в форме входа в базу данных Microsoft Access

Я получаю сообщение об ошибке времени выполнения 13 = "ошибка несоответствия" в моей форме входа в базу данных 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

В какой строке кода возникает ошибка?

phoog 11.10.2018 22:11

Если (IsNull (DLookup ("MemberEmail", "TBL_Members", "MemberEmail = '" & Me.txtEmail.Value & "' And MemberPassword = '" & Me.txtPassword.Value & "'")) или (DLookup (" TrainerEmail "," TBL_Trainers "," TrainerEmail = '"& Me.txtEmail.Value &"' And TrainerPassword = '"& Me.txtPassword.Value &"' "))) Тогда похоже, что это оператор OR

Andrzej Miskow 11.10.2018 22:22

Различаются ли при проверке пароля заглавные и строчные буквы?

Wolfgang Kais 12.10.2018 00:08
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
1
3
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

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

При попытке сделать что-то, используя ваше решение, я обнаружил, что программа не позволяет членам из любой из таблиц входить в систему. Однако я разделил процесс регистрации на 2, если состояния, и теперь он работает как задумано, но я просто получаю недействительный текстовое поле имени пользователя или пароля, появляющееся при вводе правильного имени пользователя. Любой способ закрыть форму перед следующим условием if. Я пробовал Me.close (), но это не сработало.

Andrzej Miskow 11.10.2018 23:16

Если (IsNull (DLookup ("MemberEmail", "TBL_Members", "MemberEmail = '" & Me.txtEmail.Value & "' And MemberPassword = '" & Me.txtPassword.Value & "'"))) Тогда Else DoCmd. OpenForm "Admin" If (IsNull (DLookup ("TrainerEmail", "TBL_Trainers", "TrainerEmail = '" & Me.txtEmail.Value & "' And TrainerPassword = '" & Me.txtPassword.Value & "'"))) Затем MsgBox "Неверное имя пользователя или пароль!"

Andrzej Miskow 11.10.2018 23:17

Две проверки IsNull должны быть подключены через And.

Wolfgang Kais 12.10.2018 00:05

@WolfgangKais, что действительно кажется более разумным. Спасибо, что указали на это.

phoog 12.10.2018 02:12

Спасибо большое, я пытался и вчера, но я, должно быть, где-то напортачил. Сегодня я обновил код с помощью оператора AND, и он отлично работает, большое спасибо за эту помощь

Andrzej Miskow 12.10.2018 10:45

Другие вопросы по теме