2012-11-16 55 views
0

我在我的Access数据库中使用从here的Levenshtein距离。当函数在字段列表中时,在SELECT语句中使用函数。例如: -如何在哪里使用VBA功能?

SELECT field, Levenshtein(field, 'Saturday') 
FROM table 

field是一个文本列(接入的VarChar)。现在,我想使用的功能的where子句中的条件类似

SELECT field, Levenshtein(field, 'Saturday') as distance 
FROM table 
WHERE (Levenshtein(field, 'Saturday') < 5) 

但是,所有的访问给我一个错误说“与类型的冲突”。在代理中使用distance而不是Levenshtein(field, 'Saturday')时也是如此。

levenshtein函数被定义为Public Function Levenshtein(string1 As String, string2 As String) As Long。那么我做错了什么?

+1

什么数据类型是'field'?它是DataTime数据类型吗? – HK1

+0

我忘了说:'field'是Text(Access-VarChar)。 – rollstuhlfahrer

回答

0

我想你的表中有一些空值。你可以试试这个查询吗?

SELECT field, Levenshtein(field, 'Saturday') as distance 
FROM table 
WHERE (Levenshtein(nz(field, ""), 'Saturday') < 5) 

(它看起来像一个where field is not null条件查询是不够的,功能试图反正进行评估)

,也可以定义你的Levenshtein功能(string1 as Variant, string2 as Variant),并确保你回来如果string1或string2为null,则返回null:

If IsNull(string1) or IsNull(string2) Then 
    Levenshtein = Null 
    Exit Function 
End If 
+0

必须等到周一才能测试。 – rollstuhlfahrer

+0

感谢您的提示。我从来没有检查过“null”值。 – rollstuhlfahrer