2 votes

Comment utiliser la fonction VBA dans une condition où ?

J'utilise la distance de Levenshtein de aquí dans ma base de données Access. L'utilisation de la fonction dans une déclaration SELECT fonctionne lorsque la fonction se trouve dans la liste des champs, par exemple :

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

field est une colonne de texte (Access-VarChar). Maintenant, je veux utiliser la fonction dans la clause where comme une condition, comme par exemple

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

Mais tout ce qu'Access me donne est une erreur disant "Conflit avec les types". C'est la même chose lorsque j'utilise distance dans la consition au lieu de Levenshtein(field, 'Saturday') .

La fonction de Levenshtein est définie comme suit Public Function Levenshtein(string1 As String, string2 As String) As Long . Alors qu'est-ce que j'ai fait de mal ?

2voto

fthiella Points 21512

Je pense que vous avez des valeurs nulles dans votre table. Pourriez-vous essayer cette requête à la place ?

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

(il semble qu'un where field is not null dans votre requête n'est pas suffisante, la fonction est essayée d'être évaluée de toute façon)

Ou vous pouvez définir votre Levenshtein fonction comme (string1 as Variant, string2 as Variant) et assurez-vous de renvoyer null si string1 ou string2 est null :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X