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)
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
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
On m'a demandé de rajouter un champ de saisie avec à côté un bouton de recherche.
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)
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
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...
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
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
Partager