【问题标题】:MS Access: Locking Specific Forms ErrorMS Access:锁定特定表单错误
【发布时间】:2018-10-04 03:15:09
【问题描述】:

我正在创建一个数据库,该数据库对某些用户限制了某些表单,并且根据用户类型(例如:管理员、用户、访客)可以访问某些表单。我在主窗体的 On Load 事件上创建了一个 Visual Basic 代码,并且我还在该窗体中调用了用户类型 (txtUserType)。我希望管理员表单只能由管理员访问,但是当我以管理员身份登录时,管理员表单仍然被锁定。有关如何解决此问题的任何帮助?

我在我的登录表单中创建了一个字符串,以便能够在我的主表单中调用 UserType 的值。代码如下:

Dim UserType As String
UserType = DLookup("[UserType]", "tbl_Worker", "[LoginID] = '" & 
Me.txtUsername.Value & "'")
Forms![frm_Home]![txtUserType] = UserType

现在我的主表单中的文本框 txtUserType 显示了曾经登录过的用户类型。

我在主窗体中的代码是:

Private Sub Form_Load()

If Me.txtUserType = "Admin" Then
Me.NavigationButton419.Enabled = True
Else
Me.NavigationButton419.Enabled = False
End If

End Sub

【问题讨论】:

  • 在代码中下断点,看看为什么“Me.txtUserType”不等于“Admin”。
  • @andrew 它说 Me.txtUserType = Null 但显然主表单的那个文本框中有一个值。
  • 你说I also call the user type in that form是什么意思 - 你没有显示该代码或调用它的事件 - 这很可能是你的问题的原因
  • 我会编辑问题,以便您看到
  • 该代码在哪里?当您尝试从登录中设置文本框控件时,必须打开主窗体 (frm_home)。您只需将 UserType 定义为全局,然后将代码更改为 If UserType = "Admin" Then

标签: ms-access vba ms-access-2010 ms-access-2007


【解决方案1】:

3 条可能的建议:

更改您正在测试的事件

即而不是

  Form_Load

使用

  Form_Current

或者更好:

将 txtUserType 字段存储在完全不同的表单上(也可以是作为隐藏表单打开的表单)

If Forms!myHiddenForm.txtUserType = "Admin" Then
...

或者更简洁的方式: 在模块中创建 VBA 函数

Public Function isSuperUser() As Boolean

If Forms!myHiddenForm.txtUserType = "Admin" Then
    isSuperUser = True
Else
    isSuperUser = False
End if

End Function

然后回到你的表单

Private Sub Form_Load()

    Me.NavigationButton419.Enabled = isSuperUser()

End Sub

【讨论】:

  • 我已经尝试了所有三个,尽管我以管理员身份登录,但一切仍然被锁定。根据您的第三个建议,我在 Me.NavigationButton419.Enabled = isSuperUser() 上放置了一个断点,它说 Me.NavigationButton419.Enabled = False。还是不行。
【解决方案2】:

试试这个并报告任何问题。

Private Sub Form_Load()
    NavigationButton419.Enabled = IsAdmin(txtUsername.Value)
End Sub

Private Function IsAdmin(ByVal Username As String)
    IsAdmin = (Nz(DLookup("[UserType]", "tbl_Worker", "[LoginID] = '" & Username & "'"), "Guest") = "Admin")
End Function

【讨论】:

    【解决方案3】:

    当我尝试不同的方法来创建问题的解决方案并根据其他人的建议时,我想出了这个并且它按我的意愿工作。代码如下:

    Dim UserType As String
    
    UserType = DLookup("[UserType]", "tbl_Worker", "[LoginID] = '" & 
    Me.txtUsername.Value & "'")
    
    DoCmd.OpenForm "frm_Home"
    
    Forms![frm_Home]![txtUserType] = UserType
    
    If Form_frm_Home.txtUserType = "Admin" Then
    Form_frm_Home.NavigationButton438.Enabled = True
    Else
    Form_frm_Home.NavigationButton438.Enabled = False
    End If
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多