VBA Access Dlookup логин и пароль из двух таблиц - PullRequest
0 голосов
/ 02 мая 2018

У меня проблемы с меню входа, которое я создаю для своей базы данных. Для этой базы данных у меня есть адрес электронной почты и пароль для входа в систему в двух местах. После того, как я решу эту проблему, я проверю, откуда берутся данные для входа, чтобы определить, какие формы открыты, на данный момент у меня есть одна форма, которую нужно открыть,

Пока я просто хочу подтвердить, действительны ли логины и пароли пользователей из любой таблицы. Однако он может только подтвердить логин и пароль пользователя от tblMembers. Если я попытаюсь ввести данные из tblTrainers, я получу ошибку несоответствия. Я знаю, что это за ошибка, но не слишком уверен, как она работает здесь.

Однако, если я избавлюсь от оператора Or, закрою оператор, это сработает, но, конечно, я не могу использовать данные для входа в систему из tblTrainers для входа. Может ли кто-нибудь предложить какие-либо предложения, пожалуйста? Код найден ниже.

Private Sub Command1_Click()
If IsNull(Me.txtLoginID) Then
    MsgBox "Please Enter LoginID", vbInformation, "Required"
    Me.txtLoginID.SetFocus
ElseIf IsNull(Me.txtPassword) Then
    MsgBox "Please Enter A Password", vbInformation, "Required"
    Me.txtPassword.SetFocus
Else
    If (IsNull(DLookup("Member_Email", "tblMembers", "Member_Email = '" & Me.txtLoginID.Value & "' And Member_Password = '" & Me.txtPassword.Value & "'")) Or (DLookup("Trainer_Email", "tblTrainers", "Trainer_Email = '" & Me.txtLoginID.Value & "' And Trainer_Password = '" & Me.txtPassword.Value & "'"))) Then
        MsgBox "Inccorect LoginID or Password"
    Else
        DoCmd.OpenForm "mnuMain_Menu"
        DoCmd.Close acForm, "frmLogin"
    End If
End If
End Sub

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете использовать CurrentDb.OpenRecordset для открытия наборов записей на основе запросов SQL. Вы можете использовать .EOF, чтобы проверить, находится ли набор записей в конце файла, таким образом, содержит 0 записей.

Если вы хотите запросить несколько таблиц одновременно, вы можете использовать для этого запрос UNION.

If CurrentDb.OpenRecordset("SELECT 1 FROM tblMembers WHERE Member_Email = '" & Me.txtLoginID.Value & "' And Member_Password = '" & Me.txtPassword.Value & "' UNION ALL SELECT 1 FROM tblTrainers WHERE Trainer_Email = '" & Me.txtLoginID.Value & "' And Trainer_Password = '" & Me.txtPassword.Value & "'").EOF Then

Обратите внимание, что этот код входа в систему подвержен риску внедрения SQL-кода, и такие формы входа в систему в основном небезопасны. Вы можете легко продемонстрировать внедрение SQL, введя ' OR 1 = 1 OR '' = ' в качестве имени пользователя и введя случайный символ в поле пароля. Это считается действительным логином, если в таблице есть записи. Простым решением проблемы внедрения SQL-кода является использование параметров .

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