我尝试从Access的创建查询中运行以下查询:
SELECT table.string, function(table.string) AS afterFix
INTO checkFix
FROM table
WHERE function(table.string)<>table.string;
尝试运行该函数时出现以下错误:条件表达式中的数据类型不匹配。
table.string
被定义为短文,它的字段大小为50.有些可能为NULL,function
是我的vba函数,返回字符串即可。
这是功能:
Public Function illegalCharEliminate(ByVal fieldName As String) As String
Dim field As String
field = fieldName
If (IsNull(field)) Then
GoTo catchNulls
End If
For i = 1 To 128 'goes through all illegal ascii and removes illegal chars
Select Case i
Case 1 To 44, 47, 58 To 59, 60 To 64, 91, 93, 123 To 125, 127
field = Replace(field, Chr(i), Empty)
End Select
Next i
catchNulls:
illegalCharEliminate = field
End Function
我尝试了Cast和Convert sql函数:
WHERE function(table.string)<>(Cast(table.string as string))
但是得到这个错误&#34; 查询表达式函数(table.string)中的语法错误(缺少运算符)...... 我在vba中看到了这个问题的一些答案,但我真的不想在这个查询中使用vba。 注意:如果我的语法没有问题,那么原因可能是因为table.string列有空值。若然,该如何解决?
答案 0 :(得分:1)
我认为您对空值是问题的评估是正确的。当你给它一个空值时,该函数失败,因为null不是一个字符串(它不是任何东西)。我认为此修复可能会解决您的问题:
SELECT
table.string,
illegalCharEliminate(iif(isnull(table.string), "", table.string)) AS afterFix
FROM [table]
WHERE
illegalCharEliminate(iif(isnull(table.string), "", table.string)) <> table.string;
实质上,这会将空值转换为空字符串。