我有用于打开一个特定表单的代码,但我需要设置不同的用户级别,然后可以使用这些用户级别来限制对 Access 程序中不同表单的访问。
我有一个登录屏幕,它使用表中的数据(用户名/密码)employee
,该表还有一个名为的外键列employeeTypeId
,另外我有一个名为的表Access
,它具有不同employeetypeId
的1
, 2
, 3
, 4
, 5
。
5
应该是管理员并且1
是只读用户等等。第三个表是EmployeeAccess
,它具有数据类型employeeTypeId
以及列。HasAccess
yes/no
我正在使用它在 VBA 中编写代码,以确保只有某些用户可以访问某些表单。
我有一个适用于一种表单的代码,我试图弄清楚如何将此HasAccess
列与employeeTypeId
不同的表单名称结合使用(需要弄清楚如何使用它)以确保employeetypeId=5
用户可以访问所有表单,employeetypeId=4
可以访问让我们说除了employee
表格表格之外的所有表格,并且employeetypeId=3
只能编辑少数几个表格等等。
这是登录后访问表单的代码(加载时):
Private Sub Form_Load()
If DLookup("HasAccess", "EmployeeAccess", "EmployeeTypeId=" & TempVars("EmployeeType") & " AND FormName='" & Me.Name & "'" = False) Then
MsgBox "Yo do not have access"
DoCmd.Close acForm, Me.Name
End If
End Sub
这是登录表单中的代码:
Private Sub btnLogin_Click()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Employee", dbOpenSnapshot, dbReadOnly)
rs.FindFirst "UserName='" & Me.TextUserName & "'"
If rs.NoMatch = True Then
Me.LabelWrongUser.Visible = True
Me.TextUserName.SetFocus
Exit Sub
End If
Me.LabelWrongUser.Visible = False
If rs!Password <> Encrypt(Me.TextPassword) Then
Me.LabelWrongPass.Visible = True
Me.TextPassword.SetFocus
Exit Sub
End If
Me.LabelWrongPass.Visible = False
TempVars("EmployeeType") = rs!EmployeeTypeId.Value
End Sub
目前,当登录正确时,代码会打开所有表单,我想更改它并基于employeeTypeId
.
===========================
Private Sub btnLogin_Click()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Employee", dbOpenSnapshot, dbReadOnly)
rs.FindFirst "UserName='" & Me.TextUserName & "'"
If rs.NoMatch = True Then
Me.LabelWrongUser.Visible = True
Me.TextUserName.SetFocus
Exit Sub
End If
Me.LabelWrongUser.Visible = False
If rs!Password <> Encrypt(Me.TextPassword) Then
Me.LabelWrongPass.Visible = True
Me.TextPassword.SetFocus
Exit Sub
End If
Me.LabelWrongPass.Visible = False
TempVars("EmployeeType") = rs!EmployeeTypeId.Value
If DLookup("HasAccess", "EmployeeAccess", "EmployeeTypeId=" & TempVars("EmployeeType")) Then
TempVars("FormName") = rs!FormName.Value And DoCmd.OpenForm (
我只想知道如何将 DoCmd.OpenForm 与 TempVars("FormName") 一起使用,如果可能的话。