PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Recherche à l'identique
Recherche à l'identique
Débuté par Kervin, 25 avr. 2018 14:56 - 12 réponses
Membre enregistré
29 messages
Posté le 25 avril 2018 - 14:56
Bonjour a tous,

J'utilise HlitRecherchePremier sur une cle texte de taille 3. La taille de l'argument de recherche peut etre superieure a 3.
Tant que la taille des valeur cherchée est egale a 3, la recherche à l'identique fonctionne comme voulu. Mais quand la taille des valeur cherchée est superieure a 3, la recherche à l'identique ne marche pas. Par exemple, la valeur de la cle est G10 mais Htrouve retourne vrai pour des valeur cherchée comme:
G100
G1000
G10000

Si vous avez des astuces pour gerer cette scenario, je suis prenant.

Merci bcp.

Cdt,
Kevi
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 25 avril 2018 - 17:27
Salut Kervin,

Utilise la propriété ..SensibleCasse sur le champ de ton fichier

https://doc.pcsoft.fr/fr-FR/?2512085

A+
Daryl

--
http://www.concept4u2.com
Posté le 26 avril 2018 - 08:40
Salut Daryl,

Merci pour cette astuce.

La propriete SensibleCasse marche tres bien sur les minuscule/majuscules mais quand la taille de l'argument de recherche est different à la taille de la clé, ça ne marche pas.

Je cherche toujours une solution.

Cdt,
Kervin
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 27 avril 2018 - 08:45
Salut Kervin,

Oups tu as raison, rien à voir. :(

Le plus simple serait que tu mettes ton code,
Comment fais-tu par exemple la recherche:
1. hLitRecherchexxx()
2. Une requête Windev (REQ_xxxxx)
3. Une requête SQL sous format chaîne que tu exécute avec hExécuteRequête()

Ensuite est-ce que tu attend à avoir toujours une seule valeur ou tu peux en effet avoir plusieurs fois ton code G10 ?

A+
Daryl

--
http://www.concept4u2.com
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 27 avril 2018 - 08:51
Bonjour,

Ce qui se produit est tout à fait logique. Si la taille de la clé de ton fichier est de 3 caractères, il ne comparera que les 3 premiers caractères et remontera donc tout ce qui est de G100 à G10 à l'infini.

Soit ton analyse est mauvaise car les valeurs peuvent faire plus de 3 caractères, soit lorsqu'il y a plus de 3 caractères à rechercher tu annules la recherche.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
1 623 messages
Popularité : +100 (114 votes)
Posté le 27 avril 2018 - 09:37
Bonjour,

J'ai déjà rencontré ce phénomène et je n'ai jamais compris l’intérêt ..
G10 n'est pas égal a G10000 .. je ne vois pas pourquoi ça retourne Vrai !

Alors oui j'ai bien compris, que le moteur HFSQL tronque le paramètre pour le faire coïncider avec le nombre attendu, mais je ne vois pas l’intérêt.

C'est tellement source d'erreurs ...
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 27 avril 2018 - 10:14
François C. a écrit :
Bonjour,

J'ai déjà rencontré ce phénomène et je n'ai jamais compris l’intérêt ..
G10 n'est pas égal a G10000 .. je ne vois pas pourquoi ça retourne Vrai !

Alors oui j'ai bien compris, que le moteur HFSQL tronque le paramètre pour le faire coïncider avec le nombre attendu, mais je ne vois pas l’intérêt.

C'est tellement source d'erreurs ...


Salut François,

C'est pour cela qu'il y a des opérateurs:
- Egale à =
- Strictement égale à ==
- Inférieur ou égale <=
- Etc.

:D

A+
Daryl

--
http://www.concept4u2.com
Membre enregistré
29 messages
Posté le 27 avril 2018 - 13:16
Bonjour,

Pour forcer une recherche à l'identique meme quand la taille des valeur cherchée est different de la taille de la cle, j'ai utilisé le code suivant:
HLitRecherchePremier(SY_Dept,DptCod,SAI_Dept)
IF HTrouve(SY_Dept) AND SY_Dept.DptCod=SAI_Dept THEN
//action
END

ça marche.

Pour des raison de flexibilité et pratique je ne peux pas definir la taille des valeur cherchée identique a taille de la cle. Donc, j'ai du trouver une autre moyen.

J'espere que cette solution peut etre utile.

Cdt,
Kervin
Membre enregistré
1 623 messages
Popularité : +100 (114 votes)
Posté le 27 avril 2018 - 14:39
Oui c'est ce que je fais aussi mais bon.. c'est nul d'avoir a le faire et ca reviens a dire :

SI A=B et A=B ALORS...

Pourquoi vérifier deux fois une égalité.
Posté le 27 avril 2018 - 14:57
Bonjour,
J'ai toujours eu l'impression que l'instruction ne fonctionnait pas bien. Si on lit la doc, par défaut la lecture se fait à l'identique, et sur choix avec option Hgenerique en générique (c.a.d. commence par).
Si vous n'avez rien mis, sur la g100, alors que g10 est recherché, il devrait avec h.trouve à faux sans option et vrai si Hgenerique précisé.
Mais ce n'est pas ce qui se passe.
Donc je fais comme beaucoup, je reteste sur le tantque l'égalité.
Slts
Daniel Masse
Membre enregistré
62 messages
Popularité : +4 (6 votes)
Posté le 02 mai 2018 - 12:16
Bonjour,

Il suffit de faire un HlitRecherche avec l'option hidentique tout simplement.

Cordialement,

--
AS400 – Windows - Web
Langages GAP III ILE – CL – PHP- WinDev/WebDev
Membre enregistré
165 messages
Popularité : +12 (12 votes)
Posté le 02 mai 2018 - 14:20
Bonjour;
Si pour des situations on est obligé d'utiliser des arguments de taille supérieur à la taille de la clé de recherche, je vous suggère de tester sur l'égalité des taille avant de lancer la recherche.
Bon Dev.
Membre enregistré
29 messages
Posté le 07 mai 2018 - 07:20
Bonjour,

Merci bcp pour les different idees.

Je teste sur l'egalite pour m'assurer que la recherche à l'identique se fasse correctement.

Cdt,
Kervin