0

我有用于打开一个特定表单的代码,但我需要设置不同的用户级别,然后可以使用这些用户级别来限制对 Access 程序中不同表单的访问。

我有一个登录屏幕,它使用表中的数据(用户名/密码)employee,该表还有一个名为的外键列employeeTypeId,另外我有一个名为的表Access,它具有不同employeetypeId1, 2, 3, 4, 5

5应该是管理员并且1是只读用户等等。第三个表是EmployeeAccess,它具有数据类型employeeTypeId以及列。HasAccessyes/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.

tblEmployeeAccess

===========================

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") 一起使用,如果可能的话。

4

1 回答 1

0

使用下面的代码,我能够实现结果:

目标是根据设置为 True 的 EmployeeTypeId 和 HasAccess 进行过滤(两者的组合以打开表单)

TempVars("FormName") = DLookup("FormName", "EmployeeAccess", "EmployeeTypeId=" & TempVars("EmployeeType") & " And HasAccess = " & True & " ")

DoCmd.OpenForm TempVars("FormName")
于 2019-05-17T16:12:52.863 回答