我有一个Access 2010数据库,我需要更新一个字段。现在,我的一个表单上有一个按钮,它将复制所选行。我知道我可以通过在该字段上将Locked
属性设置为Yes
来使字段不重复。
我需要做的是找到一种方法,使字段不重复,但仍然可以编辑给某些人。我不想设置Locked
属性,因为它会为每个人锁定它。
除了更改Duplicate record
按钮的工作外,我不知道如何执行此操作。现在,它只是复制了所选行并将其粘贴到New Record
行。这将使所有字段不是Locked
。
我读到可能使用一堆变量并将它们设置为每个字段的值,但这似乎很麻烦,因为我有160多个字段,我必须设置。然后将它们粘贴到New Record
行。我宁愿不必这样做。
我使用VBA只是没有使用Access。 VBA解决方案对我很好,我没有尝试过任何事情,因为我不知道从哪里开始。
答案 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数据库这样的东西,否则一无所获。