[英]#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.