Envoyé par : teddyber
Date : 17/02/2009 11:53
Bonjour à tous,
je suis face à un problème : je cherche filtrer les lignes d'un tree en fonction du texte présent dans une textbox. A priori un template dont ont fait varier le query
fonctionne bien (SELECT * FROM matable WHERE macolonne LIKE '%textbox.value%'
)
OK.
Sauf que je voudrais maintenant que la recherche ne prenne pas en compte les caractères accentués : je met "a la" dans le textbox et mon SELECT
renvoie "Poulet à la moutarde" par exemple.
Plusieurs pistes:
REPLACE
pour remplacer les caractères accentués dans macolonne
dans la colonne au moment de la requête => testé, fonctionnel mais vraiment gourmand et coté utilisateur on a l'impression que ça rame grave
_
dans textbox.value (joker SQL pour un caractère) => un poil trop large (avec "a la" dans la textbox, ça renvoie "Agneau de lait" ?!)
REGEXP
. Ça a l'air cool, je remplace les caractères accentuables par leurs valeurs possibles ('a' devient [aâà] par exemple). Ça fonctionne bien dans l'extension SQLite Manager, en terme de perfs, j'aimerais bien tester. sauf que...Le problème c'est que REGEXP n'est pas natif dans Sqlite, il faut lui fournir une user function qui implémente l'opérateur. Ça se fait avec la méthode createFunction
une fois qu'on a ouvert la connexion à la base. C'est ce que fait Sqlite Manager. Le problème c'est que lorsqu'on utilise les template SQLite, on ne maitrise pas la connexion à la base SQL, donc on ne peut ajouter cette user function donc on est coincé.
à moins que on puisse en fait ajouter une userFunction mais je sais pas comment et si quelqu'un sait, ça m'interesse ;)
sinon, c'est un genre de Feature request que je lance à la mer en espérant que LJ passe dans le coin... et puis j'irai sur bugzilla mettre à jour ce bug
Envoyé par : laurentj
Date : 22/02/2009 14:49
la table qui m'intéresse contient pour l'instant 25000 lignes
nombre ridicule. Avoir un autre champs, ça peut être une solution.
utiliser la fonction SQL REPLACE pour remplacer les caractères accentués dans macolonne dans la colonne au moment de la requête
effectivement trop gourmand. très bof.
tous les caractères accentuables sont remplacés par des _ dans textbox.value
bon moyen d'avoir des resultats qui ne correspondent pas.
Le problème c'est que lorsqu'on utilise les template SQLite, on ne maitrise pas la connexion à la base SQL,
La connection est récupérable : c'est la propriété datasource du builder, sur laquelle tu fait un queryinterface mozIStorageConnection
var cnx = tontree.builder.datasource .QueryInterface(Components.interfaces.mozIStorageConnection);
Envoyé par : teddyber
Date : 25/02/2009 09:48
yes! ça marche. merci pour l'info.
bon par contre en termes de performances, c'est pas l'idéal, je fait de repasser par du Javascript à chaque requête est assez gourmand...
merci encore!
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.