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
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
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
35469
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 mai 2022
356
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
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
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
35469
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 mai 2022
356
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
35469
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 mai 2022
356 > jordane45
Messages postés
35469
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 mai 2022

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
35469
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 mai 2022
356
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