我在MS Access表中有一个包含人的中间名的字段,我需要在SQL查询中获取每个名字的首字母(缩写)。该字段称为'middle_names'
例如如果middle_name是“ John David”,我希望输出是“ J D”。如果middle_name是“ John”,我希望输出是“ J”。
我找到了一些应该执行此操作的VBA代码,但是当我在SQL查询中调用它时,出现错误-
条件表达式中的数据类型不匹配
该字段为“文本”类型,这是VBA:
Function GetFirstLetters(middlename As String) As String
Dim arr
Dim I As Long
arr = VBA.Split(middlename, " ")
If IsArray(arr) Then
For I = LBound(arr) To UBound(arr)
GetFirstLetters = GetFirstLetters & Left(arr(I), 1)
Next I
Else
GetFirstLetters = Left(arr, 1)
End If
End Function
然后我在SQL查询中调用代码,例如:GetFirstLetters(middle_name)
时,遇到上面提到的错误。
答案 0 :(得分:2)
如果您的数据库数据在列middle_name
中具有NULL值,则该函数调用将产生该错误,因为该函数期望一个String
并且NULL不是字符串。
有几种方法可以解决此问题,其中一种方法是在将查询传递给函数之前,将您的查询修改为将NULL转换为空字符串:
GetFirstLetters(Nz([middle_name], ""))
或者,您可以保留原始的函数调用,但是您的函数应该接受Variant
类型的参数,然后处理Empty值:
Function GetFirstLetters(middlename As Variant) As String
If IsEmpty(middlename) Then
Exit Function
End If
' Rest of your code ...
End Function