我有用于打开一种特定表单的代码,但是我需要设置不同的用户级别,然后可以使用这些用户级别来限制对Access程序中不同表单的访问。
我有一个登录屏幕,该屏幕使用表employee
中的数据(用户名/密码),该表还有一个名为employeeTypeId
的外键列,另外还有一个名为{{1}的表},其中Access
与employeetypeId
,1
,2
,3
,4
不同。
5
应该是管理员,5
是只读用户,依此类推。第三个表是1
,它具有EmployeeAccess
以及具有employeeTypeId
数据类型的列HasAccess
。
我正在用它在VBA中编写代码,以确保只有某些用户可以访问某些表格。
我有一个适用于一种形式的代码,我试图找出如何结合使用yes/no
和不同的表单名称来使用此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
我只想知道如何将DoCmd.OpenForm与TempVars(“ FormName”)一起使用,如果可能的话。
答案 0 :(得分:0)
使用下面的代码,我可以实现结果:
目标是根据EmployeeTypeId和HasAccess设置为True进行过滤(两者结合起来以打开表单)
TempVars("FormName") = DLookup("FormName", "EmployeeAccess", "EmployeeTypeId=" &
TempVars("EmployeeType") & " And HasAccess = " & True & " ")
DoCmd.OpenForm TempVars("FormName")