Bonjour.
J'ai un souci avec la syntaxe dans les clauses de filtrage des recordsets ADO. Le problème se pose aussi bien avec la clause WHERE dans les requetes, que les méthodes Filter et Find des objets Recordset.
Le phénomène est le suivant : Lorsque la chaine recherchée dans un champ contient des apostrophes, des points ou des slashes, la recherche échoue et ne ramène rien.
Pour les apostrophes, j'encadre le texte avec des guillemets et cela marche. L'inverse est vrai aussi. Mais outre le fait qu'on ne peut pas savoir à l'avance le contenu du champ (sans faire une usine à gaz qui va chercher les caractères dans les chaines à rechercher), je n'arrive pas à résoudre le problème des chaines de recherche qui contiennent des guillemets ET des apostrophes.
D'autre part, pour les points et les slashes, j'ai fait un test direct sous access en faisant un filtre par formulaire. Losque je rentre par exemple
dans le champ de recherche, il me le transforme après validation en
Code : Sélectionner tout - Visualiser dans une fenêtre à part machin.truc.bidule
ce qui fait penser qu'il croit que les termes entre points sont des tables et des champs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part [machin].[truc].[bidule]
Je suis arrivé à résoudre le problème dans Access en encadrant le total avec des guillemets. (Mais là encore, comment fait-on avec la recherche de "mac'in/tr"uc.bidule" ??). De plus, sous VB, j'ai beau ajouter des guillemets en tête et en queue de chaîne, le résultat est toujours nul.
Pour être plus clair, voici un exemple concret. Soit une table contenant deux champs, l'un URL, l'autre File. Les deux champs sont destinés à contenir des URL pour la génération automatique de pages HTML. Il n'y a aucun problème pour remplir la table avec des URL du type "HTTP://mgd.software.free.fr" et des noms de fichiers du type "L'atterrissage.gif".
Par contre, j'essaie de faire une recherche sur ces deux valeurs, qui sont respectivement dans les variables sUrl et sFile (toutes les deux de type String). Mon code est:
ce qui donne si je tape Print rs.filter la réponse
Code : Sélectionner tout - Visualiser dans une fenêtre à part Rs.Filter = "URL=""" & sUrl & """ AND File=""" & sDummy(i) & """"Bien que cette combinaison existe plusieurs fois dans la table, le recordset est toujours vide après l'application du filtre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part URL="http://mgd.software.free.fr" AND File="L'atterrissage.gif"
Je suppose qu'il doit falloir mettre des caractères d'échappement devant les caractères spéciaux, mais lesquels ? chaque moteur de base de données a ses règles et je ne connais pas celles d'ADO (nota : je n'avais pas ce problème avec DAO !)
Recherches dans la FAQ avec "recherche Access", "filtrage" et carrément "Access" : résultats vides. Désespérant ! Je ne doit pas savoir y faire...
Réponses approximatives s'abstenir. Merci.
Partager