我正试图阻止我的数据中的循环(甚至级联)引用,似乎它只在部分时间内起作用。
在Access 2007中,我有下表:
create table mfr (
mfr_id Autonumber,
mfr_nm Text(255),
mfr_is_alias_for_id Long Integer
)
我正在从Excel导入一堆数据,而mfr_nm是工作表中的一列。我无法控制如何将数据输入Excel,所以我想要一种捕捉替代拼写的方法是“真正”相同的东西。到目前为止,这么好(我想......)。
现在我已经从这张桌子上建了一个表格。我有一个ComboBox的别名 - 再次,到目前为止,这么好。但是,当我将此代码添加到BeforeUpdate事件时,事情变得“有趣”(省略错误处理):
If Not IsNull(cboMfrAlias) Then
If Not IsNull(DLookup("mfr_is_alias_for_id", "mfr", "mfr_id=" & cboMfrAlias)) Then
MsgBox """Alias for"" must not also be an alias.", vbExclamation
Cancel = True
End If
End If
当表单在表单视图中时,这与我期望的完全相同,但是如果我在数据表视图中,我的MsgBox后面紧跟着一个Access生成的“No current record”错误 not < / strong>由BeforeUpdate子中的错误处理捕获。
我可以抓住这个错误吗?在哪里?
答案 0 :(得分:2)
您的下拉列表应过滤掉别名条目。换句话说,不要显示用户无法做出的选择。
您只需从下拉列表中删除mfr_is_alias_for_id不为空的选项即可。
我已经用各种各样的伪装实现了它,它运行正常。
答案 1 :(得分:0)
从很久以前,我正在解决你的问题中的“No Current Record”错误部分。在检查谷歌的答案后,我发现这个link很有帮助。但是,我没有使用NZ()来转换聚合查询中麻烦的二进制字段,而是使用了troublesomefield: IIF([troublesomefield] IS NULL,NULL,[troublesomefield])
,这有助于消除错误。所以我的解决方案只是我找到的原始答案的一个小变化,但它绕过错误并让你保留空值,如果你想......