【问题标题】:How to lock specific rows in a subform when a form loads?加载表单时如何锁定子表单中的特定行?
【发布时间】:2017-05-04 13:51:54
【问题描述】:

我有一个包含记录的子表单,其中“是/否”字段在子表单上显示为复选框。加载主表单后,我需要锁定所有选中的字段,以便用户无法撤消前一个用户所做的操作:他们应该只能选中/取消选中在会话开始时未选中的框。

是否可以遍历子表单中的所有记录并在加载表单时根据字段值选择性地锁定记录?

我知道我可以放类似的东西

If (Me.chkItemReceived.Value = -1) Then
        Me.chkItemReceived.Locked = True
Else
        Me.chkItemReceived.Locked = False
End If

在子表单 OnCurrent 事件中,但这可以防止用户取消选中他们可能意外选中的框。我可以遍历子表单上的记录,但不知道如何在行级锁定记录。

我的另一个解决方案当然是将表单拆分为两个子表单 - 已检查的项目与未检查的项目,但宁愿将其保留在一个表单中。

感谢您的帮助!

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    不,没有办法在 MS Access 的 GUI 中锁定特定的行(或记录)。如果您在一条记录上更改控件的属性,它会在子表单中的所有记录上更改它。

    我认为您甚至无法直接在基础表上进行行级锁定。通常,锁定是为了防止其他人编辑您的记录。但在这种情况下,您试图阻止自己编辑它们。

    您描述的两种方法(OnCurrent 和单独的 SubForms)可能是您的最佳选择。为了代码的清洁,我会选择后者。

    【讨论】:

    • 我很害怕 :) 感谢您的意见!
    【解决方案2】:

    好吧,你基本上给自己解决了你的问题 - 如果我没看错你的问题。您可以设置它,以便在迭代到下一条记录时,某些控件会根据这些或其他控件的值被锁定,无法编辑。当然,您实际上并没有锁定表中的行,而是阻止用户更改锁定控件的值。

    如果您的意思是阻止其他用户编辑您刚刚编辑的记录 - 那么这不会解决您的问题。

    【讨论】:

    • 正如 codeslave 下面提到的,我无法有选择地更改控件的属性。如果我锁定一个控件,我会将它们全部锁定 - 所以我无法锁定其中一个生成的行。所以给我另一种形式...
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2012-02-22
    • 2018-10-04
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多