Requète LIKE ne sélectionne pas tous les enregistrements

Résolu
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 - 26 avril 2019 à 11:02
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 - 26 avril 2019 à 15:52
Bonjour !

J'ai codé un LIKE comme suit :

Global sMatch as Boolean
...
Do Until tb_koissé.EOF
sMatch = UCase(tb_koissé("nom")) Like UCase(cherche)
If sMatch = True Then
grille_search.Row = idx
grille_search.Col = 1
grille_search.Text = tb_koissé("nom")
...
End If
tb_koissé.MoveNext
Loop

Le champ cherche contient le masque *e*

La table (MS Access) contient les records suivants :


Quand j'exécute la routine, seul l'enregistrement 005 La boîte à coucou est sélectionné, pas les autres bien qu'ils contiennent aussi le e spécifié dans le masque .


Avez-vous une idée pourquoi tous les enregistrement contenant un e ne sont pas sélectionnés ?

Merci d'avance pour votre aide

Notpa

2 réponses

Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
26 avril 2019 à 11:52
J'ai testé avec du SQL :

Set tb_koissé = db.OpenRecordset("SELECT * FROM koissé WHERE nom LIKE 'cherche'")

Le champ 'cherche' contient *e*
--> recordcount = 0

Set tb_koissé = db.OpenRecordset("SELECT * FROM koissé WHERE nom LIKE '*e*'")
--> recordcount = 1, le premier de la liste (Folding Home)

Je ne comprends plus rien !

Merci d'avance !
0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
Modifié le 26 avril 2019 à 15:56
Malgré moults recherches sur le Net, je n'ai pas trouvé de solution. Alors, j'ai contourné le problème de manière suivante :

tb_koissé.MoveFirst
Do Until tb_koissé.EOF
work = UCase(tb_koissé("nom"))
cherche = UCase(cherche)
lg = InStr(1, work, cherche)
If lg <> 0 Then
grille_search.Row = idx
grille_search.Col = 1
grille_search.Text = tb_koissé("nom")
.....
End If
tb_koissé.MoveNext
Loop

Avec l'instruction InStr, je retrouve tout ce qui matche le contenu de chercher dans la table. Plus de wildcars, et ça me suffit dans ce cas. Par contre, il faut passer par UCase (ou LCase) car InStr est case sensitif.

Je passe en résolu bien que ce sujet ne le soit pas, mais j'ai un bypass qui me satisfait.

Merci à ceux qui m'ont lu.

Notpa
0
Rejoignez-nous