字符串查询中的数据类型不匹配错误

时间:2015-11-25 15:04:00

标签: sql vba ms-access

我尝试从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列有空值。若然,该如何解决?

1 个答案:

答案 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;

实质上,这会将空值转换为空字符串。