combo_BeforeUpdate中取消后的“当前记录”

时间:2010-11-05 21:35:29

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

我正试图阻止我的数据中的循环(甚至级联)引用,似乎它只在部分时间内起作用。

在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子中的错误处理捕获。

我可以抓住这个错误吗?在哪里?

2 个答案:

答案 0 :(得分:2)

您的下拉列表应过滤掉别名条目。换句话说,不要显示用户无法做出的选择。

您只需从下拉列表中删除mfr_is_alias_for_id不为空的选项即可。

我已经用各种各样的伪装实现了它,它运行正常。

答案 1 :(得分:0)

从很久以前,我正在解决你的问题中的“No Current Record”错误部分。在检查谷歌的答案后,我发现这个link很有帮助。但是,我没有使用NZ()来转换聚合查询中麻烦的二进制字段,而是使用了troublesomefield: IIF([troublesomefield] IS NULL,NULL,[troublesomefield]),这有助于消除错误。所以我的解决方案只是我找到的原始答案的一个小变化,但它绕过错误并让你保留空值,如果你想......