1

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

在 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 生成的“无当前记录”错误,该错误未被BeforeUpdate 中的错误处理捕获子。

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

4

2 回答 2

2

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

您可以通过简单地从下拉列表中消除 mfr_is_alias_for_id 不为空的选项来做到这一点。

我已经以各种形式实现了这一点,并且效果很好。

于 2010-11-05T22:54:42.867 回答
0

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

于 2014-11-04T01:45:26.513 回答