Pb avec SQL LIKE

Résolu
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 - 8 juin 2020 à 15:10
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 - 10 juin 2020 à 17:41
Bonjour à tous !

J'utilise le petit code suivant :
Private Sub bt_mots_Click()
If zone = "" Then Exit Sub
w = "%" & zone & "%"
'w = "*" & zone & "*"
Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE  'w'")
tb.MoveFirst
R = tb("mots")
End Sub



Où zone est une textbox. J'ai toujours l'erreur 3021 Pas d'enreg. courant sur la commande tb.Movefirst. Ce qui indique que la requête n'a pas fonctionné. J'ai lu sur CCM (https://codes-sources.commentcamarche.net/forum/affich-10014027-requete-sql-avec-like-inefficace) le commentaire suivant :
"Il faudrait nous dire si tu utilises bien ADODB pour attaquer ta base Access.
DAO est obsolète et certaines fonctions ne fonctionnent pas (notamment les Find) "

J'utilise DAO 6.0. Je veux bien tester avec ADODB mais je ne sais pas comment faire.
Un petit coup de main serait grandement apprécié !

Merci

Notpa

7 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 9 juin 2020 à 12:03
Bonjour
Le % signifie des caractères quelconques . Or ce % est un opérateur dans la fonction LIKE . Garde-t-il cette fonction si cet opérateur est inclus dans un chaine de caractères comme tu le fais ?
De plus je me souviens qu'une TextBox prend par défaut la propriété Text mais il est plus que recommandé de la spécifier . Si un jour tu passes à VB Net tu me diras merci .
A tout hasard teste ceci
Private Sub bt_mots_Click()

    If zone.Text = "" Then Exit Sub
    Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE  '% & zone.Text & %'")
    tb.MoveFirst
    R = tb("mots")

End Sub


Pour ADODB j'ai trouvé un tuto mais les bases de données ne sont pas mon fort ( j'ai jamais eu besoin d'en utiliser dans mes programmes ) : https://drq.developpez.com/vb/tutoriels/ADO/

0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
10 juin 2020 à 07:20
Bonjour vb95 !
J'avais déjà testé ça : pareil. Même chose si je colle le % en dur : LIKE '%textàtrouver%'.
Merci pour le lien. Je teste ADODB dés que je peux.

A+
Notpa
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
10 juin 2020 à 14:20
Bonjour,

En concaténant correctement... cela devrait fonctionner

Dans le premier code :
Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE  '" & w & "'")


Et dans le code de VB95
Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE  '%" & zone.Text & "%'")

0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
10 juin 2020 à 14:54
Hello !

Désolé, mais dans les 2 cas, aucun enreg. sélectionné.

Merci quand même !

Notpa
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
10 juin 2020 à 15:38
Bonjour
Et que donne ceci à tout hasard ?
Private Sub bt_mots_Click()

    If zone.Text = "" Then Exit Sub
    Dim LikeSTring as String = "%" & zone.Text & "%"
    Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE 'LikeString'")
    tb.MoveFirst
    R = tb("mots")

End Sub

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
10 juin 2020 à 15:44
Bonjour,
Comme ça tu veux dire
Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE '" & LikeString & "'")
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
10 juin 2020 à 15:45
Et sinon, si au lieu de mettre une variable, tu écrivais directement la requête avec une "vraie" valeur...histoire de vérifier si le souci vient de la syntaxe ou bel et bien du driver ?
Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE '%unevraievaleurdetabdd%')
0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
10 juin 2020 à 17:11
Re,

C'est bien le LIKE qui merdouille. La preuve :

Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots =  'abrasif'")
Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE '%abrasif%'")


Le premier SELECT trouve bien l'enreg. contenant abrasif, mais pas le deuxième.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
10 juin 2020 à 17:23
et juste pour voir si c'est le like qui pose problème, peux tu essayer ces deux la et nous dire ce que ça donne ?
Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE 'abrasif'")
Set tb = db.OpenRecordset("SELECT * FROM mots WHERE mots LIKE '*abrasif*'")
0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
10 juin 2020 à 17:41
Les 2 fonctionnent !!!
Et même si je code *abra*, j'ai un résultat.

Le problème venait du pattern % comme indiqué dans pratiquement tous les forums SQL. Mais en VB, avec Access, il faut utiliser l'astérisque et pas le % !

Je passe en Résolu.

Merci à tous pour votre aide.

Au plaisir

Notpa
0
Rejoignez-nous