PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Recherche multicritère table
Recherche multicritère table
Débuté par cyrille Bigorgne, 30 nov. 2023 13:34 - 11 réponses
Posté le 30 novembre 2023 - 13:34
Bonjour à tous,

J'ai un table rempli par programmation.

Cette table je voudrais la filtrer en fonction de plusieurs combo.

Dans cette table , j'ai créé un champs qui concatène tout mes champs afin de pouvoir utiliser un TableActiveFiltre qui contient
cela marche bien quand les valeurs se suit par contre quand les valeurs des combo ne suit pas cela ne fonctionne pas .


cCritereFiltretable est une chaîne
//
//
//
cCritereFiltretable = CMOD_Saison.COMBO_Saison.ValeurAffichée + " " + CMOD_Style.COMBO_Style.ValeurAffichée + " "+ CMOD_Categorie.COMBO_Categorie.ValeurAffichée + " " + CMOD_Famille_SousFamille.COMBO_Famille.ValeurAffichée + " " + CMOD_Famille_SousFamille.COMBO_SousFamille.ValeurAffichée + " " + CMOD_Qualite.COMBO_Qualite.ValeurAffichée + " " + CMOD_Etat.COMBO_Etat.ValeurAffichée

cCritereFiltretable = Remplace(cCritereFiltretable,[" "," "," "," "," "," "," "]," ")

TableActiveFiltre(TABLE_Pricing.COL_DescriptionPricing,filtreContient,SansEspace(cCritereFiltretable,sscExtérieur))


Avez vous une idée du problème ou une autre solution pour faire cette recherche
Membre enregistré
2 574 messages
Popularité : +222 (260 votes)
Posté le 30 novembre 2023 - 14:34
Bonjour,

Pourquoi ne pas utiliser TableActiveFiltre() sur les colonnes concernées tout simplement ?

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
548 messages
Posté le 30 novembre 2023 - 14:42
Bonjour,

Enchainez les TableActiveFiltre pour chaque colonne selon les valeurs des Combo :
TableActiveFiltre(MaTable.reference, filtreContient , COMBO1.ValeurAffichée)
TableActiveFiltre(MaTable.stock, filtreContient , COMBO2.ValeurAffichée)

Cdlt
Posté le 30 novembre 2023 - 14:58
si on enchaine les tableactivefiltre , le deuxième supprime le filtre du premier ?
Posté le 30 novembre 2023 - 15:03
oui en effet ca marche.
Désolé

pourquoi chercher compliquer quand on peut faire simple
Membre enregistré
548 messages
Posté le 01 décembre 2023 - 10:35
En effet, si vous ciblez deux fois la même colonne avec un filtre différent, le deuxième filtre remplacera le premier.
Mais comme vous avez pu vous en rendre compte, un "TableActiveFiltre" sur une colonne différente vient ajouter un Filtre aux enregistrements filtrés par le premier filtre.
Cdlt
Membre enregistré
150 messages
Posté le 03 décembre 2023 - 09:38
@Cyrille
Depuis que çà existe, j'ai toujours utilisé les vues, de préférence aux requêtes ou aux filtres :
- Une vue (Hcréevue, Hdétruitvue, etc..)
- Un filtre qu'on construit sous forme de variable chaîne par concaténation de conditions proposées dans des champs de saisies ou combos
- Une table mémoire
- Un bouton de recherche + un bouton de RàZ
- Une procédure de remplissage de la table par programmation

Les vues sont souples à utiliser mais surtout plus rapides dans l'extraction et l'affichage des données que les requêtes.
Nous avions testé la rapidité sur d'énormes fichiers de la SNCF, parce que le client voulait que çà dépote.

Bon développement
Membre enregistré
26 messages
Posté le 08 décembre 2023 - 21:01
Bonjour Denis,

Auriez vous un exemple de code qui va plus vite avec une vue qu'avec une requete ?
Je trouve ca étonnant.
Membre enregistré
150 messages
Posté le 09 décembre 2023 - 00:09
Bonjour THEO
La vitesse d'exécution va dépendre de plusieurs paramètres : Le nombre total d'enregistrement dans le fichier, si la base de données est locale ou installée sur un serveur, la complexité du filtre d'extraction et bien entendu la puissance de calcul de la machine qui traite l'extraction des données.
Pour des petites extractions, j'utilise parfois des requêtes. Pour les gros volumes de données, toujours des vues.
Membre enregistré
26 messages
Posté le 10 décembre 2023 - 00:36
C'est bizarre, vue ou requete il n'y a pas de raison que l'une soit plus rapide que l'autre.
Il faudrait comparer les plans d'execution, peut etre qu'il y a une autre raison.
Membre enregistré
150 messages
Posté le 11 décembre 2023 - 02:13
Salut Theo
On pourrait discuter de çà pendant des heures ;)
Pour moi, à l'époque, je m'étais bien cassé la tête : Mon client (SNCF) était (à juste titre) très pointilleux et les temps de retour de données aux demandes d'extraction étaient capitales. Un opérateur dans une grue ou un guichetier ne peuvent pas attendre pour accéder à l'info. Les vues nous avaient solutionné le problème.

En passant de Windev V11 à V27, je m'attendais à des améliorations en vitesse, côté requête.
J'ai donc reprogrammé une appli locale de vidéothèque (env. 10000 fiches avec images) en passant d'une vue à une requête.
Avec 12 critères d'extraction cumulatifs (année, genre, acteurs, etc...) contenant des ET et des CONTIENT, l'extraction par vue est toujours plus rapide qu'avec une requête.

Tout dépend du contexte, du niveau d'extraction souhaitée et du matos.
Membre enregistré
2 574 messages
Popularité : +222 (260 votes)
Posté le 11 décembre 2023 - 10:01
Je dirais que tout dépend surtout de la base de donnée que tu utilises, des index créés... Si tu utilises HFSQL forcément tu te retrouves avec des performances pas terribles. Avec d'autres SGBD qui gèrent mieux ces cas, tu as des performances normales.

--
Cordialement,

Philippe SAINT-BERTIN