Ms access 如何获取时间戳并锁定失败的登录表单?

Ms access 如何获取时间戳并锁定失败的登录表单?,ms-access,login,ms-access-2013,Ms Access,Login,Ms Access 2013,如标题所述,有人能帮助我在Access 2013上登录表单吗。 我只想为每个用户ID上的每个成功登录在我的用户名表(datetype datetime)上更新时间戳。另一个问题是我想为每3次失败的登录锁定用户登录表单 Private Sub CmdLogin_Click() If IsNull(Me.cboNama) Or Me.cboNama = "" Then MsgBox "Please fill your username first!", vbOKOnly, "Input U

如标题所述,有人能帮助我在Access 2013上登录表单吗。 我只想为每个用户ID上的每个成功登录在我的用户名表(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

sql语句基本上是:

"UPDATE username SET thestamp = NOW() WHERE userid = " & frms!yourForm!txtUserID
您可以使用
DoCmd.RunSql
运行此sql:

DoCmd.RunSql "the sql statement"
CurrentDb.Execute

在表单模块的顶部,您可以创建一个私有变量来计算尝试次数:

Private counter As Integer
它将默认为0。然后单击一个按钮可以将其增加为
计数器=计数器+1

这是不安全的,也不是万无一失的。用户可以简单地关闭并重新打开表单。您可以将计数器存储在一张表中,但这很容易被重写


添加了
时间戳
是Access中的保留字,需要用方括号括起来。

这是我对单击按钮VBA代码的最新修改,请查看,因为仍然存在错误(弹出窗口显示“输入参数值:Ms_Userid.timestamp”我应该手动输入i吗?因为我已经在使用=NOW()函数了

非常感谢

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
Private Sub cmdLogin\u Click()
将SQL设置为字符串
'检查必填字段
如果为null(Me.cboNama.Value)或Me.cboNama.Value=“”,则
MsgBox“需要用户ID”,vbOKOnly,“需要数据”
Me.cboNama.SetFocus
出口接头
如果结束
如果为null(Me.txtPword.Value)或Me.txtPword.Value=“”,则
MsgBox“需要密码”,vbOKOnly,“需要数据”
Me.txtPword.SetFocus
出口接头
如果结束
SQL=“更新Ms_用户ID”&_
“设置Ms_Userid.timestamp=Now()”&_
“其中Ms_Userid.Userid='&frms!Frm_Login!cboNama&'”
'比较输入密码和数据库密码
如果Me.cboNama.Value为“”,则
如果Me.txtPword.Value=DLookup(“密码”,“Ms_用户ID”,“密码]=”&Me.txtPword.Value&“”),则
'MyUserID=Me.cboNama.Value
'DoCmd.RunSQL“UPDATE Ms_Userid SET timestamp=Now(),其中Userid='”&frms!Frm_Login!cboNama&“;”
DoCmd.RunSQL
'关闭登录页
MsgBox“登录成功”,vbOKOnly,“消息”
文档关闭acForm,“Frm_登录”,acSaveNo
DoCmd.OpenForm“Ms_Userid”
其他的
MsgBox“密码无效。请重试。”,vbOKOnly,“输入无效!”
Me.txtPword.SetFocus
如果结束
如果结束
'如果用户输入错误的密码3次
IntLoginAttents=IntLoginAttents+1
如果IntLoginAttens=3,则
MsgBox“您没有访问数据库的权限。请与系统管理员联系。”,vbCritical,“受限访问!”
申请,退出
如果结束
端接头

我尝试了上面的建议…但当我按下那些ok/login按钮时,仍然有一个错误…错误是“运行时错误424”所需的对象…我在下面写下了我在VBA Access 2013中键入的代码,请看一看..非常感谢!DoCmd.RunSQL“更新Ms_Userid SET timestamp=Now(),其中Userid=“&frms!Frm_login!cboNama&”如果它是一个组合框,那么你需要
cboNama.Column(0)
作为第一列。如果它是文本,那么这个值需要用撇号括起来。嗨,Andy G,今天我修改了我的登录按钮,这是最后的结果。它仍然有一个错误,上面写着“输入参数值”它写的是Msuserid.timestamp,有一个文本框“OK”“Cancel”按钮……您需要从引用的字符串中分离出表单值:
“WHERE Ms_Userid.Userid=”&frms!Frm_Login!cboNama&”
在何处之前应该有一个空格。你有一个名为
时间戳的字段吗?
我也添加到了我的答案中。但是它也是
表单
而不是
frms
。关于时间戳字段,我很抱歉,它可能会出错……字段名应该与表中的“Last_Login”相同,它的数据类型为“Date”我再次对您告诉我的“分解引用字符串”进行修改..这里是:SQL=“UPDATE Ms_Userid”&“SET Ms_Userid.Last_Login=Now()”&“WHERE Ms_Userid.Userid=”“&frms!Frm_Login!cboNama””,但仍然有一个错误“变量未定义”