2017-04-19 56 views
0

我有一个Access 2010数据库,我需要更新一个字段。现在我有一个按钮,我的窗体将复制选定的行。我知道我可以通过在该字段上将Locked属性设置为Yes来使字段不重复。有没有办法保护一个字段,以便只有某些用户可以编辑?

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

我不知道如何做到这一点,除了改变Duplicate record按钮的工作。现在它只是复制所选的行并将其粘贴到New Record行。这需要所有不是Locked的字段。

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

我已经使用过VBA而非Access。 VBA解决方案对我来说很好,我还没有尝试过任何东西,因为我不知道哪里可以开始。

+0

所以,当您点击按钮,它会创建一个新的行除了任何设置为“锁定”的字段外,表中的所有字段都来自旧记录?你将如何决定你真的希望有人能够编辑哪个“锁定”字段?你将如何决定你想允许哪些用户? –

+0

@ WayneG.Dunn只有一个字段我不想复制,只有某些用户可以编辑。我还不知道将被允许编辑的用户列表。我只维护DB,创建它的人离开了公司。 – Mike

回答

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 
+0

这样做了!谢谢您的帮助! – Mike

0

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

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

但是,如果他们知道后端在哪里,是什么阻止他们打开它?除非你去SQLServer数据库之类的东西,什么都不是。

+0

我并不担心最终用户在后端搞乱任何东西。他们甚至都不知道有一个。 Access DB只是SQL DB的前端。我是唯一可以直接访问SQL的人。我只需要一种方法来限制用户可以编辑一个字段的内容。 – Mike

+0

好的,我建议的是一种方式,它对用户是透明的,他们甚至不知道,因为他们不需要做登录。前端打开时,代码可以检查是否已有记录,然后进行相应响应,也可能拒绝访问,直到他们“联系管理员”,以防有人忽略将新员工添加到Users表中。 – June7

+0

所以'Environ(“USERNAME”)'捕获打开数据库的人的windows用户名?如果是这种情况,我可能只能使用需要编辑功能的用户列表,而不允许其他人使用。 – Mike

相关问题