IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Filtre multicritere inactif sur table mémoire [WD17]


Sujet :

WinDev

  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut Filtre multicritere inactif sur table mémoire
    Bonjour,

    J'ai une fenêtre qui permet de rechercher des documents.
    Pour avoir une recherche plus précise, je propose de faire des filtres

    J'ai 8 champs de recherche. (ce nombre peut être variable en fonction des services, c'est ma variable gnBChamp)
    Pour chaque champ, j'ai une combo alimentée par programmation.
    Le fichier de données est décrit avec les fonctions Hdecritrubrique et hdecritfichier
    Au chargement de mon écran, je décrit mon fichier, le remplit automatiquement depuis un fichier data et remplit les combos de cette manière (tout cela fonctionne sans problème)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    PROCEDURE description_Index()
    i est un entier
     
     
    //#####################################################################//
    //Description du fichier
    gdfTableDesc..Nom = gsNomfichier
    gdfTableDesc..Type = hFichierNormal
     
    //Description l'identifiant automatique
    //**********************************************
    gdrItem..Nom="ID_GEN"
    gdrItem..Type=hRubIdAuto4
    HDécritRubrique(gdfTableDesc,gdrItem)
     
    gdrItem..Nom="Idx_RepDocument"
    gdrItem..Type= hRubTexte 
    gdrItem..Taille=250
    HDécritRubrique(gdfTableDesc,gdrItem)
     
    gdrItem..Nom="Idx_NomDocument"
    gdrItem..Type= hRubTexte 
    gdrItem..Taille=250
    HDécritRubrique(gdfTableDesc,gdrItem)
     
    POUR i=1 A gnBChamp
    	gdrItem..Type= hRubTexte 
    	gdrItem..Taille=250
    	gdrItem..TypeClé=hCléDoublon
    	gdrItem..Nom="Idx"+NumériqueVersChaîne(i,"02d")
    	HDécritRubrique(gdfTableDesc, gdrItem)
    	{"TABLE_Idx.COL_Idx"+NumériqueVersChaîne(i,"02d")}..Visible=Vrai
    	{"TABLE_Idx.COL_Idx"+NumériqueVersChaîne(i,"02d")}..Libellé=gtabLibelleChamp[i]
    	ListeSupprimeTout({"COMBO_Idx"+NumériqueVersChaîne(i)})
    	{"COMBO_Idx"+NumériqueVersChaîne(i)}..Libellé=gtabLibelleChamp[i]
    	{"COMBO_Idx"+NumériqueVersChaîne(i)}..Visible=Vrai
    	{"COMBO_Idx"+NumériqueVersChaîne(i)}..LiaisonFichier={"TABLE_Idx.COL_Idx"+NumériqueVersChaîne(i,"02d")}
    	ListeAjoute({"COMBO_Idx"+NumériqueVersChaîne(i)}," ")
    FIN
     
    HDécritFichier(gdfTableDesc)
     
    PROCEDURE chargeIndex()
    ...
     
    PROCEDURE ChargeCombo()
    i est un entier
     
    HLitPremier(gsNomfichier,"id_gen")
    TANTQUE PAS HEnDehors
    	POUR i= 1 A gnBChamp
    		SI ListeCherche({"COMBO_Idx"+NumériqueVersChaîne(i)},{gsNomfichier+".Idx"+NumériqueVersChaîne(i,"02d")})=-1 ALORS ListeAjoute({"COMBO_Idx"+NumériqueVersChaîne(i)},{gsNomfichier+".Idx"+NumériqueVersChaîne(i,"02d")})
    	FIN
    	HLitSuivant(gsNomfichier,"id_gen")
    FIN
    dans mon écran si je sélectionne une ligne de ma combo, cela filtre sur mon fichier et me renvoit dans ma table mémoire les lignes correspondantes (cela fonctionne bien aussi), dans mon code de sélection d'une ligne de la combo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    i est un entier
    nIndexencours est un entier = Val(ExtraitChaîne(MoiMême..Nom,1,"Idx",DepuisFin))
     
     
    POUR i=1 A gnBChamp
    	SI i<> nIndexencours ALORS ListeSelectPlus({"COMBO_Idx"+NumériqueVersChaîne(i)},1)
    FIN
     
    HDésactiveFiltre(gsNomfichier)
    HFiltre(gsNomfichier,"idx"+NumériqueVersChaîne(nIndexencours,"02d"),MoiMême..ValeurAffichée+Caract(0),MoiMême..ValeurAffichée+Caract(255))
     
    FichierVersTableMémoire(TABLE_Idx,gsNomfichier)
    On m'a demandé de rajouter un champ de saisie avec à côté un bouton de recherche.
    Ce champ de saisie doit permettre de rechercher sur tous les index et non pas 1 en particulier, voici le code du bouton de recherche mon champ de saisie étant : SAI_recherchelibre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //permet de faire une recherche fulltext sur tous les index
    sCléParcours est une chaîne	
    sFiltre est une chaîne = ""
     
    SI SansEspace(SAI_recherchelibre)<>"" ALORS
                 i est un entier
                 HDésactiveFiltre(gsNomfichier)
    	TableSupprimeTout(TABLE_Idx)
    	POUR i=1 A gnBChamp
    		SI sFiltre<>"" ALORS sFiltre +=" ou "
    		sFiltre+="idx"+NumériqueVersChaîne(i,"02d") +" ~] '"+SAI_recherchelibre+"'"
    	FIN
    	sCléParcours=HFiltre(gsNomfichier,ChaîneConstruit(sFiltre))	FichierVersTableMémoire(TABLE_Idx,gsNomfichier)
    FIN
    Mon problème est le suivant, si l'utilisateur sélectionne une ligne de la combo, qui commence par faire un filtre sur la table, quand il fait ensuite une recherche sur tous les index (code ci dessus), le résultat correspond à la totalité de mon fichier d'index : oups, ce n'est pas le résultat attendu...
    si l'utilisateur n'a sélectionné aucune ligne de combo et qu'il lance directement une recherche, alors là, cela fonctionne.
    Je ne vois pas où dans mon code, le fait d'avoir au préalable sélectionné une ligne dans une combo, m'empêche de faire ce filtre...

    si vous avez une idée, ce serait le top...
    J'ai essayé de fermer mon fichier et de le réouvrir, mais cela n'a rien changé

    Merci d'avance

    Gancau

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Tu dois inclure la valeur de ton combo dans ta requête de filtrage du bouton. Si rien n'est sélectionné combo = null, sinon, sfiltre = sfiltre + scombo
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    J'ai finalement trouvé la solution pour que cela foncitonne.
    J'ai changé la fonction Hfiltre :
    de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sCléParcours=HFiltre(gsNomfichier,ChaîneConstruit(sFiltre))
    j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sCléParcours=HFiltre(gsNomfichier,"Idx01",hValMin,hValMax,sfiltre)
    et tout est nickel

    Gancau

  4. #4
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    à
    frenchsting
    J'étais en train de poster la solution quand tu as mis le message...
    En fait je ne veux rien d'autre dans mon filtre que la valeur de la sone de saisie. Je ne souhaite pas activer des filtres en cascade ou garder les valeurs des combos.

    Ce qui me dérangeait était qu'au final, je n'avais plus de filtre sur ma zone de recherche, que j'écrive un valeur ou pas, cela chargeait tout le fichier.
    L'autre syntaxe du hfiltre a résolu le problème.

    Merci
    Gancau

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/02/2013, 20h38
  2. [WD14] Filtre sur table mémoire
    Par BENKOUIDER dans le forum WinDev
    Réponses: 5
    Dernier message: 04/09/2009, 14h11
  3. [WD14] Modification sur table mémoire
    Par BENKOUIDER dans le forum WinDev
    Réponses: 7
    Dernier message: 06/08/2009, 09h32
  4. [WD14] Auto-incrémentation sur table mémoire
    Par BENKOUIDER dans le forum WinDev
    Réponses: 1
    Dernier message: 02/08/2009, 13h17
  5. [WD12E] État sur Table Mémoire
    Par no_me_entero dans le forum WinDev
    Réponses: 1
    Dernier message: 01/06/2009, 22h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo