Bonjour.
Je pensais avoir une bonne expérience dans l'utilisation de SQL en VB. Mais je me trouve confronté à un phénomène bizarre et je voudrais savoir si quelqu'un a déjà eu ce problème. Peut-être aussi qu'un oeil neuf verra tout de suite un truc qui crève les yeux et que je ne vois pas.
Soit une connexion ADODB nommée gcnxConnect ouverte sur une base de données Access 2000. Cette base renferme une table "T_Membres" qui contient les noms et adresses d'adhérents à une association. J'ai des soucis avec une requête sur cette table qui ne ramène jamais aucun enregistrement si on utilise la clause WHERE avec LIKE et un masque contenant des caractères génériques.
Lisez bien le code ci-dessous, écrit et exécuté dans le volet de débogage. Les trois requêtes ont été écrites par copier-coller, il n'y a donc normalement aucun différence de syntaxe, excepté le masque de sélection.
Comme on peut le constater, le seul cas où on ramène des enregistrements est celui où il n'y a pas de caractères génériques. L'inverse serait logique, mais dans ce sens ce n'est pas possible puisque les enregistrements ramenés dans la première requête répondent forcément aux deux autres filtres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 sReq = "SELECT * FROM T_Membres WHERE Ville LIKE 'cournonterral'" Rs.Open sReq, gcnxConnect, adOpenForwardOnly, adLockReadOnly Print Rs.EOF False Rs.Close sReq = "SELECT * FROM T_Membres WHERE Ville LIKE 'cour*'" Rs.Open sReq, gcnxConnect, adOpenForwardOnly, adLockReadOnly Print Rs.EOF True Rs.Close sReq = "SELECT * FROM T_Membres WHERE Ville LIKE 'cournon?erral'" Rs.Open sReq, gcnxConnect, adOpenForwardOnly, adLockReadOnly Print Rs.EOF True Rs.Close
Le plus curieux est que les trois requêtes, exécutées sous access (copier-coller direct dans le texte SQL du générateur de requetes d'Access), fournissent toutes des résultats corrects.
Je suis perplexe...
Partager