有没有办法保护字段,以便只有某些用户可以编辑?

时间:2017-04-19 19:17:28

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

我有一个Access 2010数据库,我需要更新一个字段。现在,我的一个表单上有一个按钮,它将复制所选行。我知道我可以通过在该字段上将Locked属性设置为Yes来使字段不重复。

我需要做的是找到一种方法,使字段不重复,但仍然可以编辑给某些人。我不想设置Locked属性,因为它会为每个人锁定它。

除了更改Duplicate record按钮的工作外,我不知道如何执行此操作。现在,它只是复制了所选行并将其粘贴到New Record行。这将使所有字段不是Locked

我读到可能使用一堆变量并将它们设置为每个字段的值,但这似乎很麻烦,因为我有160多个字段,我必须设置。然后将它们粘贴到New Record行。我宁愿不必这样做。

我使用VBA只是没有使用Access。 VBA解决方案对我很好,我没有尝试过任何事情,因为我不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

我建议使用子锁来锁定/解锁控​​件,如下所示:

Private Sub SetControlsLocked(ForceLocked As Boolean)

    Dim bLocked As Boolean
    Dim sUser As String

    If ForceLocked Then
        ' Always lock before copying
        bLocked = True
    Else
        ' More secure method than Environ("USERNAME")
        sUser = CreateObject("WScript.Network").UserName
        ' Lock for everyone except some users
        ' If the list is longer or changes regularly, lookup the Username in a table instead
        bLocked = Not (sUser = "jane" Or sUser = "bob" Or sUser = "mike")
    End If

    ' do the locking
    Me!Control1.Locked = bLocked
    Me!Control2.Locked = bLocked

End Sub

(请参阅https://stackoverflow.com/a/32565953/3820271上有关"更安全"声明)的评论。

并应用于您的复制按钮例程...

Private Sub cmdCopy_Click()

    ' Lock before copying!
    Call SetControlsLocked(True)

    ' ... your existing copy routine

    ' Unlock for special users
    Call SetControlsLocked(False)

End Sub

......打开表单时:

Private Sub Form_Load()
    ' Lock for non-special users
    Call SetControlsLocked(False)
End Sub

答案 1 :(得分:0)

我所做的是拥有一个用户及其权限级别和Windows登录用户名的表。我使用Environ("USERNAME")捕获用户名并与用户记录匹配并正确设置表单,通常只是禁用/隐藏特定按钮。

但实际上必须对数据库进行更多设置以防止用户访问受限数据。与隐藏导航窗格一样,禁用功能区,禁用右键单击快捷菜单,禁用功能键,甚至可以发布为可执行文件。

但是,如果他们知道后端在哪里,是什么阻止他们打开它呢?除非你去像SQLServer数据库这样的东西,否则一无所获。