Я получаю сообщение об ошибке времени выполнения 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
Если (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
Различаются ли при проверке пароля заглавные и строчные буквы?

Ваша проблема в этом выражении:
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 (), но это не сработало.
Если (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 "Неверное имя пользователя или пароль!"
Две проверки IsNull должны быть подключены через And.
@WolfgangKais, что действительно кажется более разумным. Спасибо, что указали на это.
Спасибо большое, я пытался и вчера, но я, должно быть, где-то напортачил. Сегодня я обновил код с помощью оператора AND, и он отлично работает, большое спасибо за эту помощь
В какой строке кода возникает ошибка?