我有一个 Access 查询,其中有一些复杂的字段。 基本上,我正在根据其他派生标准搜索某个值。 该函数要么有效,要么给出
#Func!
错误。我可能会收到错误的原因有几个。 没关系,因为在这种情况下我想返回 Null
。
如何测试和处理查询中的
#Func!
错误? 另外,我尝试将表达式包装在 IsError()
方法中,并处理这种情况。 那还是没用。
例如,如果您将 Instr 与可能为空或不为空的字段一起使用,并且这导致了问题,则您可以仅选择那些不为空的字段,或者将空字符串与该字段连接。
SELECT Mid(AField & "",Instr(Afield & "","x")) FROM Table
我认为这不是最佳解决方案,但是,我希望 Microsoft 内部管理 Microsoft Access 的“更高权力机构”了解异常处理,并在适当的情况下提供某种测试和处理/忽略错误的方法。
无论如何,就我而言,我找到了解决问题的方法。 我按原样保存查询并将其导出到表中。 由于这是一次性练习,因此我能够提取必要的数据,然后从新创建的表中过滤掉所有
Null
值。
它有效,但感觉像是一个非常糟糕的黑客。
谢谢你的提示!我正在做一些工作,翻译一些使用 Excel 的 IsError 函数和 Mid 函数的 Excel 计算。我已经用 Iif 和 IsError 的组合替换了 Access 中的所有 IfError 函数,但仍然遇到相同的 #Func! 错误。事实证明,Access 中的 Mid 函数并不像 Excel 那样返回真正的错误,而是返回零,这有点道理,但这完全打乱了我原来的逻辑,正如我提到的,它来自 Excel。最后我用这个代替了
Iif(IsError(Mid(Afield,Start,End)),AlternateValue,Mid(Afield,Start,End))
用另一个公式
Iif(Mid(Afield,Start,End)=0,AlternateValue,Mid(Afield,Start,End))
这是 Access 中更紧凑、更容易理解的公式,而且它确实有效!非常感谢您花了 6 年时间才找到的答案! 2024年又是6年了,当我读到你们的评论时,现在是我回馈一些东西的时候了。非常感谢你!
OMGGGGGG 我知道我晚了 6 年,但这是我第一次在博客上发帖,因为我实际上解决了这个问题!你不知道我有多兴奋。好吧,事实证明这正是我想要做的:Mid(AField,Instr(Afield,"x"))。就我而言,我知道 InStr 函数并不总是在 Afield 中找到 x,在这些情况下,理想情况下我想要一个 Null。但它实际上返回的是 0。在访问中,像 Right、Left 和 Mid 这样的函数不能从 0“开始”,它们必须从 1(或者我想是 -1)开始。这就是导致 #Func 的原因!错误!
一个解决方案......如果你的 Instr function=0 做一件事,否则做另一件事。
如果我想到其他解决方案,我会告诉您。