我在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。我知道邻接列表树模型的局限性,但我仍然喜欢它。
验证这些参考文献的最佳方法是什么?
答案 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