1

我对 Microsoft Access 有点陌生(第一次使用它),考虑到它就像 Microsoft Excel 和 SQL Server 的混搭,我想试一试,而且我对后者非常熟悉。我想要做的是Category在插入新行后有一个字段(例如)是只读的。该Category字段是一个查找值,数据宏将在创建时在相应的子表中创建具有该特定类别的记录。而且我不希望它在创建后更改,因为这会导致很多麻烦。

有什么办法可以在表格中做到这一点?有什么办法限制用户?或者有解决方法吗?告诉我,我会考虑所有选项,非常感谢!

4

2 回答 2

2

限制用户访问的最佳/最简单的方法将取决于您首先授予他们访问权限的应用程序的哪些方面。

从您的情况和描述来看,您的宏似乎实际上正在执行数据表的更新/操作,并且您的用户通过表单访问该数据?对于大多数应用程序来说,这是一种理想的技术,因为您可以将整个表格显示在一个表单中,但在表单的设计选项中,您可以自定义视图和用户拥有的访问权限。

如果您使用的是让用户通过表单访问数据的技术,那么您可以非常轻松地限制用户操作表数据的能力,而无需使用任何 VBA 进行干预。如果您对 Access 的经验有限,我认为您可能更容易使用可以使用属性菜单更改的表单选项来修改此访问权限。这也将防止您必须修改表单以具有“具有模块”属性。

要使表单字段只读,您只需

  1. 打开您的表格
  2. 切换到布局视图或设计视图(您可以在其中修改属性)
  3. 打开属性表(通过设计功能区中的属性表按钮)
  4. 选择要设为只读的字段
  5. 在属性表的数据选项卡中有一个名为“锁定”的属性。将此属性切换为“是”

这将使用户无法更改字段!(从那个表格)

选项二:

如果您希望您的用户仅在普通数据表视图(而不是表单)中查看表格,您可以通过使用“OpenTable”(数据库对象列表)的宏打开它们并将数据模式设置为“只读”。重要提示:这将使用户无法编辑任何字段!如果您需要他们能够编辑其他字段,则不能使用此选项。

HansUp 的解决方案:需要注意的重要事项(因为您是新用户)要使用此 VBA,您需要在该表单的属性表中进行以下更改:

  1. 选择“表格”作为对象
  2. 将“HasModule”属性(在“属性表”的“其他”选项卡中)更改为“是”

此外,我无法找到一种简单的方法来访问 Form Current 属性。另一种方法是使用“On Got Focus”(在“事件”选项卡中)通过他建议的 VBA 过程将该文本框的属性设置为“已禁用”。

于 2013-07-26T05:54:11.493 回答
2

使用表单的当前事件。每次记录成为活动记录时都会触发该事件。此时,如果当前记录是“新”记录,则启用文本框。但对于现有记录,禁用文本框以防止用户更改其存储值。

所以如果文本框被命名为txtFoo,你的Form_Current过程可能是这样的......

Private Sub Form_Current()
    If Me.NewRecord = True Then
        ' allow edit
        Me.txtFoo.Enabled = True
    Else
        ' prevent edit
        Me.txtFoo.Enabled = False
    End If
End Sub

或者更简洁地说同样的事情......

Private Sub Form_Current()
    Me.txtFoo.Enabled = Me.NewRecord
End Sub

除了Enabled财产,还要考虑Locked财产。任何一个都可以做你需要的。或者你可以同时使用两者。测试各种组合,看看你喜欢哪个。

于 2013-07-25T05:32:40.627 回答