PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Recherche intelligente
Recherche intelligente
Débuté par JeanTomTom, 21 nov. 2019 20:18 - 6 réponses
Posté le 21 novembre 2019 - 20:18
Bonjour,

Je voudrais savoir s'il existe une recherche qui permet de rechercher du texte, dans un table ou un tableau dynamique, sans que celui correspond exactement au texte rechercher

Voici un exemple de ce que je veux faire :
La personne entre dans le champ de recherche pour trouver son adresse le contenu suivant : "24 Rouleaux".

La recherche devrait être en mesure de me sortir quand même l'élément suivant : "24 Chemin Rouleaux", malgré le faire que le texte ne soit pas exactement le même.


Je ne peux pas utiliser un like ou un contient. Est-ce qu'une fonction dans Windev Mobile existe pour faire se genre de recherche ou je dois le coder moi même.

Je ne sais pas si je suis assez claire.

Merci
Posté le 03 décembre 2019 - 18:50
Personne ??
Membre enregistré
950 messages
Popularité : +53 (63 votes)
Posté le 03 décembre 2019 - 23:57
Bonjour,

Le plus simple est de créer une rubrique full text dans ta table de données et de créer une requête pour envoyer la valeur de ta recherche, ensuite le moteur fera le boulot que tu souhaites

Jordan
Posté le 05 décembre 2019 - 14:47
Merci de la réponse,

Effectivement j'ai réussi a faire quelques chose avec le champs full text, mais il me reste des cas que je ne sais pas comment contourner.

J'utilise un + et un * pour trouvée dans mon "Against" de la requête


Exemple :

Je saisi "39 Prom" et mon "Against" c'est le suivant "+39+Prom*"

Voici ma requête :
searchTmp est une chaîne = "+39+Boul*"
EnonceSQL est une chaîne = [
SELECT ADRESSE FROM MATCHINGADDRESSES WHERE MATCH(MATCHINGADDRESSES.ADRESSE)
AGAINST ('
]
EnonceSQL = EnonceSQL + searchTmp + [
')
]


Chaîne dans ma BD sur quoi je fais la recherche(Colonne adresse) :
1 Rue Bouleaux
39 Rue Bouleaux
399 Rue Bouleaux
50 Rue Bouleaux


Résultat obtenu :
1 Rue Bouleaux
39 Rue Bouleaux
399 Rue Bouleaux
50 Rue Bouleaux

Résultat attendu :
39 Rue Bouleaux

Donc, je voudrais comme je l'ai indiqué, avoir seulement "39 Rue Bouleaux" et non pas les autres qui contient "bou" ou"39". Le 399 Rue Bouleaux aussi ne devrait pas sortir.

Est-ce que c'est possible de le faire ?
Membre enregistré
449 messages
Popularité : +31 (43 votes)
Posté le 05 décembre 2019 - 15:18
Bonjour

et un simple tablecherche pour une table ou tableaucherche pour un tableau ne conviennent pas ?

https://doc.pcsoft.fr/fr-FR/?3074015&name=tablecherche_fonction

https://doc.pcsoft.fr/fr-FR/?3075002&name=TableauCherche

cordialement

DG
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 05 décembre 2019 - 16:04
Chez moi aucun problème rencontré sur Windev.

Essaye cette syntaxe
searchTmp est une chaîne = "+39+Boul*"
EnonceSQL est une Requête SQL =
[
SELECT ADRESSE FROM MATCHINGADDRESSES WHERE MATCH(MATCHINGADDRESSES.ADRESSE) AGAINST ({parametre}) > 0
]
EnonceSQL.parametre = searchTmp
HExécuteRequête(EnonceSQL)


--
Cordialement,

Philippe SAINT-BERTIN
Message modifié, 05 décembre 2019 - 16:05
Posté le 06 décembre 2019 - 18:12
Philippe SB, effectivement si je me créer un projet test avec seulement c'est donnée sa fonctionne. Mais dans mon projet principale et dont ma table contient environ 10000 enregistrement, j'ai pas du tout les même résultat.

Exemple :
Dans mon principale projet les adresses suivante sorte, mais pas dans mon projet de test.
280 BOULEVARD PIERRE EST APP. 302
333 BOULEVARD CLAIREVUE EST APP. 4305


J'ai l'impression que l'index ne fonctionne pas bien lorsqu'il y a beaucoup de donnée.


J'ai essayé de réindexé avant mais rien ne change.