将记录切换为用户之间的编辑/只读

时间:2013-09-05 13:45:21

标签: ms-access ms-access-2007 access-vba

我正处于新数据库的设计阶段,想尝试做一些更先进的事情(至少对我来说)。

我想分享一个名为“Jobs”的表。这基本上是一份工作清单和这些工作的状态。

我们的组织结构的方式意味着2个不同的部门将基本上共享这个工作,所以我将设置这个表,以便编辑前端的每个记录在两个部门之间共享(每个部门将完成在记录中适用于它们的某些字段。)

如果“部门A”编辑记录并完成他们的部分,我希望他们基本上将记录“传递”到部门B,即他们点击一个按钮,记录变为只读部门A并且只能编辑对于部门B.部门B可以随时记录。我也希望A部门选择将记录“传递”回B部门进行更多编辑(B部门验证A部门的工作,所以当出现问题时需要这样做。)

实现这一目标的直接方法是什么?我以前从未做过记录级读/写访问。

我的猜测是创建一个名为“可编辑”的列,并且当需要为特定用户锁定时,让此按钮在该字段中对着记录说“1”。然后我猜测表单上的一些VBA,查看该字段的记录并相应地更改表单的文本框编辑属性?

1 个答案:

答案 0 :(得分:1)

根据我的理解,编辑记录基本上有3个阶段:

  • 1:正在进行中
    A部门目前正在编辑该记录。他们没有完成它,并没有准备好传递给其他人。

  • 2:待完成
    A部门尽其所能。记录未完成,需要由B部门完成和审查。

  • 3:已锁定
    部门A已完成编辑,所有数据都应锁定。

启用/禁用表单上数据编辑的逻辑表可能类似于:

+----------+---------------+---------------+---------------+               
| User     | 1:In Progress |    2:TBC      |   3:Locked    |
+----------+---------------+---------------+---------------+
| Dept A   |    Enable     |    Disable    |    Disable    |
+----------+---------------+---------------+---------------+
| Dept B   |    Disable    |    Enable     |    Disable    |
+----------+---------------+---------------+---------------+

从那里开始,当状态为进行中部门B 时,我们发现除了部门A 外,应始终禁用控件。状态为待完成

要实现这样的功能,您只需使用这些状态向数据表中添加EditStatus字段,然后在表单的OnCurrent事件中,根据需要锁定/解锁控​​件。

例如:

Private Sub Form_Current()
    Dim controlLock As Boolean
    controlLock = ((currentUserDepartment = "A") And (EditStatus = 1)) _
                  Or _
                  ((currentUserDepartment = "B") And (EditStatus = 2))

    ' Now we can enable/disable çontrols '
    ' Alternatively, use the Locked property instead of Enabled '
    txtEditJobName.Enabled = controlLock
    txtEditJobDate.Enabled = controlLock
    '... etc ... '
End Sub

如果需要锁定整个表单而不是单独的控件,那就更简单了:

Private Sub Form_Current()

    Me.AllowEdits = ((currentUserDepartment = "A") And (EditStatus = 1)) _
                    Or _
                    ((currentUserDepartment = "B") And (EditStatus = 2))
End Sub

我会让你弄清楚细节,并根据你的实际情况进行调整,但是你应该从中获得所有这些。