1

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

我想分享一张名为“Jobs”的表格。这本质上是一个工作列表和这些工作的状态。

我们组织的结构方式意味着 2 个不同的部门将分担这项工作,因此我将设置此表,以便在前端编辑每条记录在 2 个部门之间共享(每个部门将完成某些适用的字段在记录中给他们)。

如果“A 部门”编辑记录并完成他们的部分,我希望他们基本上将记录“传递”给 B 部门,即他们单击一个按钮,记录变为 A 部门的只读记录和 B 部门可编辑的记录. B 部门可以在记录中尽自己的一份力量。我还希望 A 部门可以选择将记录“传递”回 B 部门进行更多编辑(B 部门验证 A 部门的工作,因此在出现问题时需要这样做)。

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

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

4

1 回答 1

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

从那里,我们看到除了状态为In Progress的 Dept A或状态为To Be Completed的Dept B之外,控件应始终禁用。

要实现这样的事情,您可以简单地将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

我会让你弄清楚细节,并根据你的实际情况进行调整,但你应该从中得到一个笑话。

于 2013-09-06T03:23:08.777 回答