繁体   English   中英

#Func! MS Access中的iif查询错误

[英]#Func! Error on iif query in MS Access

下面是我的SQL查询:

IIf(remedy_src.Position Is Null,(mid(remedy_src.User,instr(1,remedy_src.User,"(")+1,instr(1,remedy_src.User,")")-2-instr(1,remedy_src.User,"(")+1)),remedy_src.Position) AS [Adjusted User]

关键是要从字段中提取字符串。 这是值的示例:

n123456 (name lastname)

IIf函数返回括号中的内容:

name lastname

但。 有时,源值如下所示:

n123456

没有括号, IIf返回丑陋的#Func! 错误,导致查询无法在我的excel文件中刷新(访问db的外部数据连接)。

我想以某种方式处理此错误。 如果存在错误,最好使IIf函数返回原始源值。

您可以尝试捕获错误:

IIF(IsERROR(IIf(remedy_src.Position Is Null,(mid(remedy_src.User,instr(1,remedy_src.User,"(")+1,instr(1,remedy_src.User,")")-2-instr(1,remedy_src.User,"(")+1)),remedy_src.Position)),
remedy_src.user,
IIf(remedy_src.Position Is Null,(mid(remedy_src.User,instr(1,remedy_src.User,"(")+1,instr(1,remedy_src.User,")")-2-instr(1,remedy_src.User,"(")+1)),remedy_src.Position)) 
AS [Adjusted User]

要么

IIF(InStr("(",remedy_src.user)=0,
remedy_src.user,
IIF(IsERROR(IIf(remedy_src.Position Is Null,(mid(remedy_src.User,instr(1,remedy_src.User,"(")+1,instr(1,remedy_src.User,")")-2-instr(1,remedy_src.User,"(")+1)),remedy_src.Position))
As [Adjusted User]

我认为此SQL字符串变得有点太复杂而无法轻松使用。 我制作了一个VBA函数,该函数应该能够执行相同的操作,但易于理解且易于使用。

编码:

Public Function ExtractString(str As String) As String

    Dim intFirstBracket As Integer
    Dim intSecondBracket As Integer
    Dim blnValidString As Boolean

    blnValidString = False

    If Nz(str, "") <> "" Then
        intFirstBracket = InStr(1, str, "(", vbTextCompare)
        If intFirstBracket > 0 Then
            intSecondBracket = InStr(1, str, ")", vbTextCompare)

            If intSecondBracket > 0 Then
                str = Mid(str, intFirstBracket + 1, intSecondBracket - (intFirstBracket + 1))
                blnValidString = True
            End If
        End If
    End If

    If blnValidString Then
        ExtractString= str
    Else
        ExtractString= "Default Value" 'Handle this how you want
    End If

End Function

因此,您的SQL字符串将仅仅是:

IIf(remedy_src.Position Is Null, ExtractString(remedy_src.User) ,remedy_src.Position) AS [Adjusted User]

我测试过的功能, SQL还没有考虑到这一点。

这是我获得此问题的解决方案的方式,完全重新编写代码以排除返回错误的任何功能。

 IIf(remedy_src.Position Is Null,replace(replace(right(remedy_src.User,len(remedy_src.User)-instr(1,remedy_src.User,' ')),'(',''),')',''),remedy_src.Position) AS [Adjusted User]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM