PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Formule de Recherche
Formule de Recherche
Iniciado por Stephane B., 19,jul. 2019 19:38 - 22 respuestas
Miembro registrado
26 mensajes
Publicado el 19,julio 2019 - 19:38
bonjour

je voudrais faire une recherche sur deux colone dans ma table.
je tape ca me sa ne marche pas

TableActiveFiltre(TABLE_Client.COL_Noms, filtreContient, SAI_Recherche)
TableAffiche(TABLE_Client ,taDébut)


TableActiveFiltre(TABLE_Client.COL_Prenoms, filtreContient, SAI_Recherche)
TableAffiche(TABLE_Client ,taDébut)


ce que je voudrais faire cest un bouton recherche et en meme temps quil cherche dans la colone noms et dans la colone Prenoms

Comment faire.

Merci a vous
Miembro registrado
4.361 mensajes
Publicado el 20,julio 2019 - 06:51
Bonjour,
Le fait de faire une recherche avec le nom = SAI_Recherche et EN MÊME TEMPS le prénom=SAI_Recherche, n'est peut être pas indiqué. Cela signifie que ton client doit avoir un nom qui est le même que son prénom, et qui doit, qui plus est, correspondre à ton champ SAI_Reherche.
Bref tu cherches tout les Clients qui s'appellent Maurice Maurice.

Dans un premier temps, il faudrait créer un deuxième champ de saisie SAI_RecherchePrénom.

Dans un deuxième temps, en alimentant ton champ Table par une requête (REQ_RechercheClient) te simplifierait la vie.
SELECT
Client.PK_Client AS PK_Client,
Client.NDX_NomClient AS NDX_NomClient,
Client.PrenomClient AS PrenomClient
FROM
Client
WHERE
Client.NDX_NomClient LIKE %{pNomClient}%
AND Client.PrenomClient LIKE %{pPrenomClient}%


Il faut faire attention de bien cocher "Renvoyer Null si vide" dans tes champs de saisie




Le code d'initialisation de ton champ table est le suivant :
MaSource.pNomClient=SAI_RechercheNom
MaSource.pPrenomClient=SAI_RecherchePrenom


Celui de ton bouton :
TableAffiche(TABLE_REQ_RechercheClient,taInit)


--
Il y a peut être plus simple, mais, ça tourne
Publicado el 20,julio 2019 - 08:41
Bonjour,

Pour la recherche multi-colonnes, essayez avec l'instruction DANS, à tester...
LaRecherche est une chaîne = ""
LaRecherche = SaisieDeLaRecherche

POUR TOUTE LIGNE de TABLE_Client
SI LaRecherche DANS (TABLE_Client.COL_Noms, TABLE_Client.COL_Prenoms ALORS
Info("Donnée trouvée")
SINON
Info("Donnée non trouvée")
FIN
FIN


Alain
Miembro registrado
299 mensajes
Publicado el 21,julio 2019 - 10:38
Ce qui est ennuyeux c'est qu'à chaque modification du filtre on recharge les données.
On peut aussi balayer séquentiellement le lignes et n'afficher que celles correspondant au filtre
pour i = 1 _a_ TABLE_Client..occurence()
SI TABLE_Client.COL_Noms[i] = SAI_Recherche OU TABLE_Client.COL_Prenoms[i] = SAI_Recherche ALORS
TABLE_Client[i]..Visible= Vrai
SINON
TABLE_Client[i]..Visible= Faux
FIN
FIN
Mensaje modificado, 21,julio 2019 - 10:40
Miembro registrado
4.361 mensajes
Publicado el 21,julio 2019 - 11:43
La requête suffit, il suffit de remplir ton champ table par programmation et supprimer le code d'initialisation.




Code du bouton :
REQ_RechercheClient.pNomClient=SAI_RechercheNom
REQ_RechercheClient.pPrenomClient=SAI_RecherchePrenom

HExécuteRequête(REQ_RechercheClient)

POUR TOUT REQ_RechercheClient
SI TableCherche(TABLE_REQ_RechercheClient.COL_PK_Employe,REQ_RechercheClient.PK_Client)=-1 ALORS//L'enregistrement n'existe pas dans le champ table
TableAjouteLigne(TABLE_REQ_RechercheClient,REQ_RechercheClient.PK_Client,REQ_RechercheClient.NDX_NomClient,REQ_RechercheClient.PrenomClient)
FIN
FIN


--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 21,julio 2019 - 11:51
Miembro registrado
299 mensajes
Publicado el 21,julio 2019 - 16:33
"La requête suffit, il suffit de remplir ton champ table par programmation "

Personne ne dit le contraire.
Par contre on multiplie les accès aux données et, pour ma part, c'est un point que je recherche toujours à limiter.
Miembro registrado
26 mensajes
Publicado el 21,julio 2019 - 19:32
Je suis désole je suis un peux novice dans windev.
Mes la je suis perdu
j'ai crée une requêtes je pose le code dans le bouton et rien ne marche....
Merci pour votre aide mes les info que vous donne sont pour moi pas assez précise ou mettre les code ETC.

Merci a vous
Miembro registrado
46 mensajes
Publicado el 21,julio 2019 - 23:16
Bonjour,
Avec une table remplie à partir d'un fichier direct, ou d'une requête normale "toutes lignes", ou par programmation, et 2 champs de recherche Nom, Prénom, le balayage des lignes se fait en automatique, en fonction du filtre. ça fonctionne normalement.
Il suffit de mettre dans :

1- code du champ SAI_RechercheNom, au niveau de la section "A chaque modification"
// code "A chaque modification de SAI_RechercheNom"
TableActiveFiltre(TABLE_Client.COL_Noms, filtreContient, MoiMême)

2- code du champ SAI_RecherchePrenom, au niveau de la section "A chaque modification"
// code "A chaque modification de SAI_RecherchePrenom"
TableActiveFiltre(TABLE_Client.COL_Prenoms, filtreContient, MoiMême)

Le bouton "Rechercher", n'est pas nécessaire.
Mensaje modificado, 21,julio 2019 - 23:51
Miembro registrado
26 mensajes
Publicado el 22,julio 2019 - 06:35
oui je d'accord avec vous mes la il me fait deux bouton de recherche..
1 bouton pour le prenom
2 bouton pour le nom

????
Miembro registrado
4.361 mensajes
Publicado el 22,julio 2019 - 08:13
Stephane B. a écrit :
rien ne marche....

Qu'est ce que cela signifie ?
Les valeurs retournées ne correspondent pas au résultat souhaité ?, rien ne s'affiche?
Stephane B. a écrit :
ou mettre les code ETC.

Tout est détaillé dans le post 2, plus précis, en ce qui concerne l'endroit ou mettre le code, je ne vois pas... Tu as le code d'initialisation de ton champ table, le code du bouton, le code de la requête avec laquelle tu dois alimenter ton champ.

Le code du post 4 te permet de faire des recherches successives

Le fait de "renvoyer null si vide" correspond au joker sous windev.
ça te permet de faire une recherche, soit sur le nom, soit sur le prénom. Normalement, l'appui sur ton bouton "Rechercher" sans remplir les champs (post 2) doit afficher tous les tuples de CLIENT dans ton champ table

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 22,julio 2019 - 08:19
Miembro registrado
26 mensajes
Publicado el 24,julio 2019 - 20:47
MICHEL a écrit :
Ce qui est ennuyeux c'est qu'à chaque modification du filtre on recharge les données.
On peut aussi balayer séquentiellement le lignes et n'afficher que celles correspondant au filtre

pour i = 1 _a_ TABLE_Client..occurence()
SI TABLE_Client.COL_Noms[i] = SAI_Recherche OU TABLE_Client.COL_Prenoms[i] = SAI_Recherche ALORS
TABLE_Client[i]..Visible= Vrai
SINON
TABLE_Client[i]..Visible= Faux
FIN
FIN

Message modifié, 21 juillet 2019 - 10:40

Bonjour chez moi quand je code ton code dans le bouton Recherche
Dans Sorti de SAI_Recherche jai un code erreur occurrence et en rouge

POUR i = 1 A TABLE_Client..Occurrence()
SI TABLE_Client.COL_Pseudo[i] = SAI_Recherche OU TABLE_Client.COL_MacAdresse[i] = SAI_Recherche ALORS
TABLE_Client[i]..Visible= Vrai
SINON
TABLE_Client[i]..Visible= Faux
FIN
FIN

Il me dit Occurence Procedure inconu

Help Me
Mensaje modificado, 24,julio 2019 - 20:48
Miembro registrado
26 mensajes
Publicado el 24,julio 2019 - 20:57
Alain a écrit :
Bonjour,

Pour la recherche multi-colonnes, essayez avec l'instruction DANS, à tester...

[quote]LaRecherche est une chaîne = ""
LaRecherche = SaisieDeLaRecherche

POUR TOUTE LIGNE de TABLE_Client
SI LaRecherche DANS (TABLE_Client.COL_Noms, TABLE_Client.COL_Prenoms ALORS
Info("Donnée trouvée")
SINON
Info("Donnée non trouvée")
FIN
FIN[/quote]



Alain


Merci pour ton code me quand je le colle dans mon bouton recherche
Bouton SAI_Recherche
dans initialisation de SAI_Recherche
Ca ne marche pas

Ma Table pour le noms de Table_CLient
Et les deux champ ou je veux faire une recherche en même temps sont Noms et Prénoms..

Merci a vous pour votre aide
Juste pour info je sais pas ci c’est important me je suis sur la version 22
Mensaje modificado, 24,julio 2019 - 20:58
Miembro registrado
26 mensajes
Publicado el 25,julio 2019 - 06:53
Voila ma requete :




et voila mon code SQL
SELECT
Client.Pseudo AS Pseudo,
Client.MacAdresse AS MacAdresse
FROM
Client
WHERE
Client.Pseudo LIKE %{pPseudoClient}%
OR Client.MacAdresse LIKE %{pMacAdresseClient}%


est que cette procedure est juste
Merci a vous
Miembro registrado
4.361 mensajes
Publicado el 25,julio 2019 - 08:28
Ça dépend de ce que tu veux obtenir.

Prenons les données suivantes
1-Toto-Maurice
2-Toto-Marcel
3-Titi-Maurice
4-Tata-aMauricea
5-bTotob-Maurice

Avec ta requête, une recherche sur Toto-Maurice te renverra
Tous les enregistrements. Ceux qui ont le pseudo "Toto" (1 et 2) et ceux dont l'adresse contient Maurice (1,3 et 4).
En effet, ta requête recherche les enregistrement qui contiennent "Toto" ou "Maurice"

Avec un "ET" à la place du "OU", tu auras les enregistrement 1 et 5.

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 25,julio 2019 - 08:31
Miembro registrado
26 mensajes
Publicado el 25,julio 2019 - 18:37
non je garde le OU c’est ça que je veux mes le problème ce la suite c’est mon bouton recherche..





Et le code du champ recherche






Merci a vous pour la suite
Miembro registrado
4.361 mensajes
Publicado el 26,julio 2019 - 13:22
J'ai l'impression que tu fais du copier/coller sans vraiment savoir ce que fait le code.

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
26 mensajes
Publicado el 26,julio 2019 - 17:49
oui je commence avec windev ce ma première application ce que fait
je suis arrivée a tous faire sauf cette recherche.

pour le moment j'ai trouvée toute les info sur le net en cherchent des tutos.

J'ai deux problème a réglè celui de la recherche et une histoire de date me je verrais ça plus tard ..
Publicado el 26,julio 2019 - 18:02
Créer un index fulltext sur les deux rubriques du fichier
Créer une requête (triée ou pas) sur cette rubrique FT et avec un paramètre sur cette rubrique fulltext







(Attention à cocher ne pas afficher)


Dans la fenêtre utiliser la requête sur la table :
Dans le code de la recherche utiliser comme ceci :
MaRequete.pRechercheFT = (Sai_Recherche~="" ? Null SINON Sai_Recherche)
// Affiche la table
TableAffiche(TABLE_XXX,taRéExécuteRequete) // ici la table est basée sur la requete

Ce mode de fonctionnement permet d'avoir un seul champ de recherche basé sur un index fulltext contenant plusieurs rubriques (texte évidemment)
Miembro registrado
4.361 mensajes
Publicado el 27,julio 2019 - 10:36
Dans un premier temps, je te conseille d'ouvrir le manuel d'autoformation. Tu comprendra pourquoi tu as des erreurs de compilation.
Dans un deuxième temps, essaye de comprendre le code que l'on t'a fourni.

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
299 mensajes
Publicado el 28,julio 2019 - 19:38
Petite précision :

TABLE_Client..occurence() correspond à la version 24 qui permet de gérer des propriétés d'objet
Pour les versions antérieures c'est une fonction TableOccurrence(TABLE_Client)
Miembro registrado
41 mensajes
Publicado el 29,julio 2019 - 08:18
Bonjour,

Une solution pourrait peut être de créer un champ calculé dans la requête (NomPrénom).

Dans la table, cette colonne reste Invisible et on fait la recherche sur cette colonne.

De mémoire, il y a une LST qui aborde cet exemple.

AUTRE SOLUTION :

Une saisie assistée qui permet de filtrer la table.

Ce ne sont que des idées.

Bonne journée
Miembro registrado
26 mensajes
Publicado el 29,julio 2019 - 19:32
Gilles GUICHARD a écrit :
Bonjour,

Une solution pourrait peut être de créer un champ calculé dans la requête (NomPrénom).

Dans la table, cette colonne reste Invisible et on fait la recherche sur cette colonne.

De mémoire, il y a une LST qui aborde cet exemple.

AUTRE SOLUTION :

Une saisie assistée qui permet de filtrer la table.

Ce ne sont que des idées.

Bonne journée


merci pour les info vous savez quelle LST en parle ou un lien
merci a vous
Miembro registrado
26 mensajes
Publicado el 30,julio 2019 - 23:37
J'ai trouvée la solution a cette adresse :



Merci a vous...