MS Access 2007邻接列表树针对循环引用进行验证

时间:2012-12-05 23:26:57

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

我在MS Access 2007中实现了邻接列表树。插入或更新后,我想验证循环引用(如a->b->c->a)。我写了一个简单的函数,给定表名和树节点的id如果引用的路径是有限的则返回true,如果有循环则返回false。

不幸的是,根据http://msdn.microsoft.com/en-us/library/office/aa191586(v=office.10).aspx

  

对于字段和记录验证规则,表达式不能包含   用户定义的函数,域聚合或聚合函数,   Eval函数,或CurrentUser方法,或对表单,查询的引用,   或表格。此外,字段验证规则不能包含   对其他领域的引用。对于记录,表达式可以包括   对该表中字段的引用。

我仅限于使用Access数据库引擎作为后端的MS Access。我知道邻接列表树模型的局限性,但我仍然喜欢它。

验证这些参考文献的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您无需将其置于验证规则中。你要做的是抓住插入/更新的东西,但你应该在插入或更新之前捕获它们。

为此,如果函数显示存在问题,请在输入控件的BeforeUpdate事件中运行您自己的验证,并运行Me.Undo和Msgbox(或以其他方式通知用户错误)。

例如:

Private Sub Input_BeforeUpdate(Cancel As Integer)
    If Not inputIsValid() Then
        'input is not valid
        Me.Undo
        MsgBox "Input is not valid", vbOKOnly + vbCritical, "Invalid Input"
    End If
End Sub