Как я могу получить метку времени и заблокировать неудачную форму входа?

Как указано в заголовке, может ли кто-нибудь помочь мне с моим входом в форму в Access 2013. Я просто хочу, чтобы метка времени обновлялась в моей таблице имен пользователей (datetype datetime) для каждого успешного входа в систему для каждого идентификатора пользователя. Другая проблема заключается в том, что я хочу заблокировать форму входа пользователя для каждого 3 неудачного входа в систему.

Private Sub CmdLogin_Click()

If IsNull(Me.cboNama) Or Me.cboNama = "" Then
    MsgBox "Please fill your username first!", vbOKOnly, "Input Username"
    Me.cboNama.SetFocus
     Exit Sub
End If

If IsNull(Me.txtPword) Or Me.txtPword = "" Then
    MsgBox "Please fill your password!", vbOKOnly, "Input Password"
    Me.txtPword.SetFocus
    Exit Sub
End If

If Me.txtPword.Value = DLookup("Password", "Ms_UserID", "[Password]='" &                 Me.txtPword.Value & "'") Then
    MyUserID = Me.cboNama.Value
    MsgBox "Login Success", vbOKOnly, "Message"
    'Me.Last_Login = DateTime()
    DoCmd.Close acForm, "Frm_Login", acSaveNo
    DoCmd.OpenForm "Ms_Userid"

    Else
    MsgBox "Wrong Username/Password!  Please specify your caps lock, Boss..", vbCritical, "Error Message"
    Me.txtPword.SetFocus
End If
End Sub

person user2640356    schedule 01.08.2013    source источник


Ответы (2)


Это моя последняя модификация для кода VBA Click Button, пожалуйста, посмотрите, так как все еще есть ошибка (появляется всплывающее окно с надписью «Введите значение параметра: Ms_Userid.timestamp». Должен ли я вводить i вручную? Потому что я уже использую = СЕЙЧАС().

Большое спасибо.!

Private Sub cmdLogin_Click()
Dim SQL As String

'Check mandatory fields
If IsNull(Me.cboNama.Value) Or Me.cboNama.Value = "" Then
   MsgBox "User ID is required.", vbOKOnly, "Required Data"
   Me.cboNama.SetFocus
   Exit Sub
End If

If IsNull(Me.txtPword.Value) Or Me.txtPword.Value = "" Then
   MsgBox "Password is required.", vbOKOnly, "Required Data"
   Me.txtPword.SetFocus
   Exit Sub
End If





SQL = "UPDATE Ms_Userid " & _
          "SET Ms_Userid.timestamp = Now()" & _
          "WHERE Ms_Userid.UserID = '&frms!Frm_Login!cboNama&'"





'Compare input password and database password
If Me.cboNama.Value <> "" Then
   If Me.txtPword.Value = DLookup("Password", "Ms_UserID", "[Password]='" & Me.txtPword.Value & "'") Then
      'MyUserID = Me.cboNama.Value
      'DoCmd.RunSQL "UPDATE Ms_Userid SET timestamp = Now() where UserID='" & frms!Frm_Login!cboNama & "';"
      DoCmd.RunSQL SQL
      'Close Login Page
      MsgBox "Login Success", vbOKOnly, "Message"
      DoCmd.Close acForm, "Frm_Login", acSaveNo
      DoCmd.OpenForm "Ms_Userid"
   Else
      MsgBox "Invalid Password. Try again.", vbOKOnly, "Invalid Entry!"
      Me.txtPword.SetFocus
   End If
End If

'If user enters incorrect password 3 times
intLoginAttempts = intLoginAttempts + 1
If intLoginAttempts = 3 Then
   MsgBox "You do not have access to the database. Please contact system administrator.", vbCritical, "Restricted Access!"
   Application.Quit
End If
End Sub
person user2640356    schedule 12.08.2013
comment
Вам нужно вырвать значение формы из строки в кавычках: " WHERE Ms_Userid.UserID = '" & frms!Frm_Login!cboNama & "'" и перед WHERE должен быть пробел. У вас есть поле с именем timestamp? - person Andy G; 12.08.2013
comment
Я также добавил к своему ответу. Но это также forms, а не frms. - person Andy G; 12.08.2013
comment
Ну, что касается поля метки времени, это может быть ошибка, извините... Имя поля должно быть таким же, как в таблице, Last_Login, которая имеет тип данных Date - person user2640356; 12.08.2013
comment
Я снова делаю модификацию, разбивая строку в кавычках, о которой вы мне говорили. у него все еще есть переменная ошибки, не определенная - person user2640356; 12.08.2013

SQL-оператор будет по существу:

"UPDATE username SET thestamp = NOW() WHERE userid = " & frms!yourForm!txtUserID

Вы можете использовать DoCmd.RunSql для запуска этого sql:

DoCmd.RunSql "the sql statement"

or CurrentDb.Execute.

В верхней части модуля формы вы можете создать переменную Private для подсчета количества попыток:

Private counter As Integer

По умолчанию он равен 0. Затем нажатие кнопки может увеличить его на counter = counter + 1.

Это совсем не безопасно и ненадежно. Пользователь может просто закрыть и снова открыть форму. Вы можете сохранить счетчик в таблице, но, опять же, его можно легко перезаписать.

Добавлено timestamp — это зарезервированное слово в Access, которое должно быть заключено в квадратные скобки.

person Andy G    schedule 01.08.2013
comment
Я попробовал ваше предложение выше ... но все же у меня есть ошибка, когда я нажал эту кнопку ok / login ... Ошибка - это ошибка времени выполнения 424 Object required ... Я записываю код, который я набрал в VBA Access 2013 ниже, пожалуйста, посмотрите .. большое спасибо! - person user2640356; 02.08.2013
comment
ОБНОВЛЕНИЕ DoCmd.RunSQL Ms_Userid SET timestamp = Now(), где UserID= & frms!Frm_Login!cboNama & ; - person user2640356; 02.08.2013
comment
Если это поле со списком, вам понадобится cboNama.Column(0) для первого столбца. Если это текст, то это значение должно быть окружено апострофами. - person Andy G; 02.08.2013
comment
Привет, Энди Джи, сегодня я модифицирую свою кнопку входа в систему, и вот окончательный результат.. У него все еще есть ошибка, которая говорит, что введите значение параметра, и написано, что Msuserid.timestamp, есть текстовое поле ОК, кнопка отмены... - person user2640356; 12.08.2013