PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Filtrer dans 3 colonnes d'une table
Filtrer dans 3 colonnes d'une table
Débuté par David, 22 jan. 2020 00:10 - 13 réponses
Membre enregistré
66 messages
Popularité : +0 (2 votes)
Posté le 22 janvier 2020 - 00:10
Bonjour

Dans une fenêtre, une Table alimentée par un fichier "Atelier" avec 5 rubriques
"Bâtiment" - "Service" - "Jour_Achat" - "Jour_Utilisé" - "Jour_Usé"

Sur cette fenêtre un champ de saisie et un bouton "Recherché"

Si je saisis "Lundi" dans le champ de saisie, clic sur "Rechercher", J'aimerais que la Table m'affiche le "Bâtiment" et le "Service" qui correspond à un "Lundi"

Dans le bouton si je recherche sur une seule colonne avec ce code, ça fonctionne
TableActiveFiltre(TABLE_BDAteliers.COL_Jour_Achat,filtreContient,SAI_Date)


Comment Filtrer (rechercher) sur 3 colonnes ?

J'ai essayé
TableActiveFiltre(TABLE_BDAteliers.COL_Jour_Achat,TABLE_BDAteliers.COL_Jour_Utilisé,TABLE_BDAteliers.COL_Jour_Usé,SAI_Date)


Merci de votre aide

David
Membre enregistré
199 messages
Popularité : +14 (16 votes)
Posté le 22 janvier 2020 - 10:20
Bonjour,

Il existe une fonction TableTrie (ou NomTable.Trie) : https://doc.pcsoft.fr/fr-FR/?3074035&name=TableTrie
Ceci étant, plutôt que de travailler directement avec ta table lié au fichier, je pense (sans voir ton code et ton analyse) qui serait plus efficient de travailler avec ta table liée à une requête paramétrée.

--
Bon développement

Pierre Devillers
Membre enregistré
66 messages
Popularité : +0 (2 votes)
Posté le 22 janvier 2020 - 12:35
Merci Pierre
Je ne vois pas.
J'ai essayé

TableTrie(TABLE_BDAteliers,"COL_JOUR1","COL_JOUR2","COL_JOUR3",SAI_DateLettre)

TableActiveFiltre(TABLE_BDAteliers.COL_VILLE,filtreContient,COMBO_RECHERCHEVILLE)
TableActiveFiltre(TABLE_BDAteliers.COL_DEPARTEMENT,filtreContient,COMBO_RECHERCHEDEPARTEMENT)
TableActiveFiltre(TABLE_BDAteliers.COL_LIEU,filtreContient,COMBO_RECHERCHELIEU)


Les 3 dernières fonctionnent car elles recherche dans une seule colonne

Merci de l'aide
Membre enregistré
3 881 messages
Popularité : +227 (347 votes)
Posté le 22 janvier 2020 - 12:39
Bonjour,
Les requêtes sont là pour faire des recherches multiples. e.g. :
SELECT
Atelier.PK_Atelier,
Atelier.Batiment,
Atelier.Service
FROM
Atelier
WHERE
Atelier.Jour_Achat={pDate}
OR
Atelier.Jour_Utilise={pDate}
OR
Atelier.Jour_Use={pDate}


Il suffit de baser ton champ table sur une requête de ce type et d'initialiser le paramètre avant l'exécution et l'affichage

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
66 messages
Popularité : +0 (2 votes)
Posté le 22 janvier 2020 - 21:27
Re
Encore merci de l'aide !
Bon j'ai enfin réussi à créer cette requête (pas facile en étant débutant !)
Rien ne fonctionne !

SELECT
BD_Ateliers.ATELIER AS ATELIER,
BD_Ateliers.DEPARTEMENT AS DEPARTEMENT,
BD_Ateliers.VILLE AS VILLE,
BD_Ateliers.BATIMENT AS BATIMENT,
BD_Ateliers.SERVICE AS SERVICE,
BD_Ateliers.N_JOUR1 AS N_JOUR1,
BD_Ateliers.JOUR1 AS JOUR1,
BD_Ateliers.N_JOUR2 AS N_JOUR2,
BD_Ateliers.JOUR2 AS JOUR2,
BD_Ateliers.N_JOUR3 AS N_JOUR3,
BD_Ateliers.JOUR3 AS JOUR3
FROM
BD_Ateliers
WHERE
BD_Ateliers.JOUR1 = {Param_Date_Lettre}
OR BD_Ateliers.JOUR2 = {Param_Date_Lettre}
OR BD_Ateliers.JOUR3 = {Param_Date_Lettre}
OR BD_Ateliers.N_JOUR1 = {Param_Date_Chiffre}
OR BD_Ateliers.N_JOUR2 = {Param_Date_Chiffre}
OR BD_Ateliers.N_JOUR3 = {Param_Date_Chiffre}


Le code dans le bouton "Recherché"

REQ_RECHERCHE_JOUR.Param_Date_Lettre=SAI_DateLettre
REQ_RECHERCHE_JOUR.Param_Date_Chiffre=SAI_DateChiffre

TableActiveFiltre(TABLE_BDAteliers.COL_DEPARTEMENT,filtreContient,COMBO_RECHERCHEDEPARTEMENT)
TableActiveFiltre(TABLE_BDAteliers.COL_VILLE,filtreContient,COMBO_RECHERCHEVILLE)

TableActiveFiltre(TABLE_BDAteliers.COL_BATIMENT,filtreContient,COMBO_RECHERCHEBATIMENT)
TableActiveFiltre(TABLE_BDAteliers.COL_SERVICE,filtreContient,COMBO_RECHERCHESERVICE)

TableAffiche(TABLE_BDAteliers)


Le code dans le bouton "Réinitialisé"

HRAZ(BD_Ateliers)
RAZ(Vrai)

TableDésactiveFiltre(TABLE_BDAteliers.COL_JOUR1)
TableDésactiveFiltre(TABLE_BDAteliers.COL_N_JOUR1)
TableDésactiveFiltre(TABLE_BDAteliers.COL_JOUR2)
TableDésactiveFiltre(TABLE_BDAteliers.COL_N_JOUR2)
TableDésactiveFiltre(TABLE_BDAteliers.COL_JOUR3)
TableDésactiveFiltre(TABLE_BDAteliers.COL_N_JOUR3)
TableDésactiveFiltre(TABLE_BDAteliers.COL_DEPARTEMENT)
TableDésactiveFiltre(TABLE_BDAteliers.COL_VILLE)
TableDésactiveFiltre(TABLE_BDAteliers.COL_BATIMENT)
TableDésactiveFiltre(TABLE_BDAteliers.COL_SERVICE)
Message modifié, 22 janvier 2020 - 21:33
Membre enregistré
3 881 messages
Popularité : +227 (347 votes)
Posté le 22 janvier 2020 - 22:08
Pourquoi utiliser les filtres ?
La requête fait le boulot. Il suffit d'exécuter la requête avant l'affichage de la table, ou alors d'utiliser tableaffiche avec taRéExécuteRequête

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
66 messages
Popularité : +0 (2 votes)
Posté le 23 janvier 2020 - 14:27
Bonjour Voroltinquo

Merci de l'aide

Donc dans le bouton "Modifié" j'ai fais ceci :
REQ_RECHERCHE_JOUR.Param_Date_Lettre=SAI_DateLettre..ValeurAffichée
REQ_RECHERCHE_JOUR.Param_Date_Chiffre=SAI_DateChiffre..ValeurAffichée
REQ_RECHERCHE_JOUR.Param_DEPARTEMENT=COMBO_RECHERCHEDEPARTEMENT..ValeurAffichée
REQ_RECHERCHE_JOUR.Param_VILLE=COMBO_RECHERCHEVILLE..ValeurAffichée
REQ_RECHERCHE_JOUR.Param_BATIMENT=COMBO_RECHERCHEBATIMENT..ValeurAffichée
REQ_RECHERCHE_JOUR.Param_SERVICE=COMBO_RECHERCHESERVICE..ValeurAffichée

TableAffiche(TABLE_BDAteliers,taRéExécuteRequete)


Mais ma requête ne doit pas être bonne puisqu'elle me sélectionne les "NULL"
SELECT
BD_Ateliers.ATELIER AS ATELIER,
BD_Ateliers.DEPARTEMENT AS DEPARTEMENT,
BD_Ateliers.VILLE AS VILLE,
BD_Ateliers.BATIMENT AS BATIMENT,
BD_Ateliers.SERVICE AS SERVICE,
BD_Ateliers.N_JOUR1 AS N_JOUR1,
BD_Ateliers.JOUR1 AS JOUR1,
BD_Ateliers.N_JOUR2 AS N_JOUR2,
BD_Ateliers.JOUR2 AS JOUR2,
BD_Ateliers.N_JOUR3 AS N_JOUR3,
BD_Ateliers.JOUR3 AS JOUR3
FROM
BD_Ateliers
WHERE

(
BD_Ateliers.JOUR1 = {Param_Date_Lettre}
OR BD_Ateliers.JOUR2 = {Param_Date_Lettre}
OR BD_Ateliers.JOUR3 = {Param_Date_Lettre}
OR BD_Ateliers.N_JOUR1 = {Param_Date_Chiffre}
OR BD_Ateliers.N_JOUR2 = {Param_Date_Chiffre}
OR BD_Ateliers.N_JOUR3 = {Param_Date_Chiffre}
OR BD_Ateliers.BATIMENT = {Param_BATIMENT}
OR BD_Ateliers.SERVICE = {Param_SERVICE}
OR BD_Ateliers.DEPARTEMENT = {Param_DEPARTEMENT}
OR BD_Ateliers.VILLE = {Param_VILLE}
)
AND BD_Ateliers.DEPARTEMENT is NOT Null
AND BD_Ateliers.VILLE is NOT Null
AND BD_Ateliers.BATIMENT is NOT Null
AND BD_Ateliers.SERVICE is NOT Null
AND BD_Ateliers.N_JOUR1 is NOT Null
AND BD_Ateliers.JOUR1 is NOT Null
AND BD_Ateliers.N_JOUR2 is NOT Null
AND BD_Ateliers.JOUR2 is NOT Null
AND BD_Ateliers.N_JOUR3 is NOT Null
AND BD_Ateliers.JOUR3 is NOT Null
AND BD_Ateliers.ATELIER is NOT Null


Et après à voir fait une recherche, comment réinitialiser la Table ?
Message modifié, 23 janvier 2020 - 14:29
Membre enregistré
170 messages
Popularité : +18 (18 votes)
Posté le 23 janvier 2020 - 14:37
Membre enregistré
66 messages
Popularité : +0 (2 votes)
Posté le 23 janvier 2020 - 15:07
Bonjour Padbrain

Je garde cette solution en mémoire.

Pour mon projet, je préfère avoir une sélection avec des combos plutôt que d'utiliser le clavier.

Merci de l'intervention

David
Membre enregistré
170 messages
Popularité : +18 (18 votes)
Posté le 23 janvier 2020 - 15:27
8)

--
--
Jean-Jacques
Membre enregistré
66 messages
Popularité : +0 (2 votes)
Posté le 28 janvier 2020 - 23:57
Bonjour
Je reviens sur ce fil après plusieurs lectures de manuel et essai.

La Table ne se filtre pas à la sélection d'un élément de mon Combo (COMBO_DateLettre).

Exemple : Si je sélectionne "LUNDI" dans mon Combo, ma Table devrait m'afficher tous les "LUNDI" des colonnes "JOUR1" OU "JOUR2" OU "JOUR3" de ma Table
En mode Test, ma requête fonctionne parfaitement.

Ou est le problème ?

Merci beaucoup de votre aide précieuse.

Ma Table est alimentée par "Contenu"==>"Accès direct"==>Source fichier"BD_Ateliers"

Le code de mon Combo :
REQ_FEUIL_RECHERCHE.Param_Jour1_Lettre=COMBO_DateLettre..Valeur
REQ_FEUIL_RECHERCHE.Param_Jour2_Lettre=COMBO_DateLettre..Valeur
REQ_FEUIL_RECHERCHE.Param_Jour3_Lettre=COMBO_DateLettre..Valeur
HExécuteRequête(REQ_FEUIL_RECHERCHE)
TableAffiche(TABLE_RECHERCHE,taRéExécuteRequete)


Le Code SQL de ma requête est :
SELECT DISTINCT
BD_Ateliers.ID_Ateliers AS ID_Ateliers,
BD_Ateliers.ATELIER AS ATELIER,
BD_Ateliers.JOUR1 AS JOUR1,
BD_Ateliers.JOUR2 AS JOUR2,
BD_Ateliers.JOUR3 AS JOUR3,
FROM
BD_Ateliers
WHERE
BD_Ateliers.JOUR1 = {Param_Jour1_Lettre}
OR BD_Ateliers.JOUR2 = {Param_Jour2_Lettre}
OR BD_Ateliers.JOUR3 = {Param_Jour3_Lettre}
ORDER BY
ATELIER ASC
Membre enregistré
170 messages
Popularité : +18 (18 votes)
Posté le 29 janvier 2020 - 08:36
Salut,

Je simplifierai déjà le code comme suit :

REQ_FEUIL_RECHERCHE.Param_Jour_Lettre=COMBO_DateLettre..Valeur

HExécuteRequête(REQ_FEUIL_RECHERCHE)
TableAffiche(TABLE_RECHERCHE,taRéExécuteRequete)


et :
SELECT DISTINCT
BD_Ateliers.ID_Ateliers AS ID_Ateliers,
BD_Ateliers.ATELIER AS ATELIER,
BD_Ateliers.JOUR1 AS JOUR1,
BD_Ateliers.JOUR2 AS JOUR2,
BD_Ateliers.JOUR3 AS JOUR3,
FROM
BD_Ateliers
WHERE
BD_Ateliers.JOUR1 = {Param_Jour_Lettre}
OR BD_Ateliers.JOUR2 = {Param_Jour_Lettre}
OR BD_Ateliers.JOUR3 = {Param_Jour_Lettre}
ORDER BY
ATELIER ASC


Ensuite, dans quel évènement se trouve le code de la combo ?

Peut-être devrais-tu ajouter un tableSupprimeTout() avant le table affiche !

--
--
Jean-Jacques
Membre enregistré
106 messages
Popularité : +1 (1 vote)
Posté le 29 janvier 2020 - 10:52
Bonjour , personnellement j'ai suivi les conseils qu'on m'avait proposé sur la même question que toi avec ce lien :
- http://carnetwindev.blogspot.com/2019/08/windev-les-combo-en-cascade.html…

En espérant que cela te sera utile , de mon coté j'ai filtré sur deux combo et fonctionnel je pourrai continué mais je n'en n'ai pas l'utilité.
Il faut pensé en initialisation des combo de bien mettre la sources du combo qui filtre la le suivant etc ...

Cordialement M.P
Message modifié, 29 janvier 2020 - 10:53
Membre enregistré
66 messages
Popularité : +0 (2 votes)
Posté le 29 janvier 2020 - 11:08
Bonjour Maxime
Merci de la source que je venais de regarder ce matin !

Bonjour Padbrain
Merci pour les codes simplifiés


J'ai enfin résolu mon problème !
Déjà en alimentant ma Table sur ma requête et non sur mon fichier et en modifiant les paramètres SQL de mes Requêtes

Merci à tous pour vos aides diverses