PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Probleme sur HFiltre
Probleme sur HFiltre
Débuté par guest, 07 déc. 2005 21:09 - 1 réponse
Posté le 07 décembre 2005 - 21:09
Salut à tous,
Voici mon problème :
- J'ai un table fichier.
- Dans la description ce champ table, onglet Contenu, la rubrique de parcours est IDDEP_PROJET.
- J'ai coché la case "Utiliser la fonction HFiltre pour le parcours du fichier", pour les tries
- Je veux effectuer une recherche générique (type wildcard : dudule*machin*.doc) sur la clé de parcours "NomFichier" (donc différente de IDDEP_PROJET).
- j'ai donc une fenetre avec cette table un champ de saisie et un bouton de lancement de recherche. voici le code :
CléParcours est une chaîne
RubParcours est une chaîne = "NomFichier"
HDésactiveFiltre ("REPOSITORY")
SI SaisieFichier<>"" ALORS
cWhere est une chaîne = renvoyerClauseWhere(RubParcours,SaisieFichier)
CléParcours=HFiltre("REPOSITORY",cWhere)
SI CléParcours <> "" ALORS
//Code pour test
// HLitPremier(REPOSITORY,CléParcours)
// tantque pas HEnDehors(REPOSITORY)
// test est une chaine = REPOSITORY.NomFichier
// HLitSuivant(REPOSITORY,CléParcours)
// FIN
//Fin code pour test

TableAffiche(TableDest,taDébut)
//TableDest..RubriqueParcourue=CléParcours
FIN
SINON
// Annule le filtre
TableDest..FiltreÞP_PROJET.IDDEP_PROJET
TableDest..RubriqueParcourue="IDDEP_PROJET"
FIN

- Le code de renvoyerClauseWhere:
PROCEDURE renvoyerClauseWhere(nomChamp="",cWhere="")
_where est une chaîne
nbEtoiles est entier
nbChaines est entier
i est entier

SI Droite(cWhere,1) ="*" ALORS
cWhere=Gauche(cWhere,Taille(cWhere)-1)
FIN
SI Gauche(cWhere,1)="*" ALORS
cWhere=Droite(cWhere,Taille(cWhere)-1)
FIN

_where = nomChamp+"~] '"+cWhere+"'"
nbEtoiles = ChaîneOccurrence(cWhere,"*")

SI nbEtoiles>0 ALORS
nbChaines = nbEtoiles+1
_where=""
POUR i=1 A nbChaines
_where+=nomChamp+"~] '"+ExtraitChaîne(cWhere,i,"*")+"' ET "
FIN
_where = Gauche(_where,Taille(_where)-4)
FIN
RENVOYER _where

- Si je laisse la case "Utiliser la fonction HFiltre pour le parcours du fichier", le Code pour test me liste bien les valeurs recherchées mais le tableaffiche n'affiche pas ces valeurs
- Si j'enlève la case "Utiliser la fonction HFiltre pour le parcours du fichier", çà fonctionne et je perds le trie automatique et la recherche "simple"...
- si je décommente la ligne TableDest..RubriqueParcourue=CléParcours alors il me renvoie une ligne qui n'a rien a à voir avec la recherche...

Quelqu'un a une idée ??
Michel
Posté le 08 décembre 2005 - 10:22
Salut,

Remplacez tout ce code par une requête. Vous pourrez trier ensuite la table
sur la colonne souhaitée sans que cela ait un impact sur la sélection.



En plus, vous allez gagner en performances...


--
Ed en Ligne


"Michel" <guest@newsgroup.fr> a écrit dans le message de news:
43973ae4$1@news.pcsoft.fr...

Salut à tous,
Voici mon problème :
- J'ai un table fichier.
- Dans la description ce champ table, onglet Contenu, la rubrique de
parcours est IDDEP_PROJET.
- J'ai coché la case "Utiliser la fonction HFiltre pour le parcours du
fichier", pour les tries
- Je veux effectuer une recherche générique (type wildcard :
dudule*machin*.doc) sur la clé de parcours "NomFichier" (donc différente
de IDDEP_PROJET).
- j'ai donc une fenetre avec cette table un champ de saisie et un bouton
de lancement de recherche. voici le code :
CléParcours est une chaîne
RubParcours est une chaîne = "NomFichier"
HDésactiveFiltre ("REPOSITORY")
SI SaisieFichier<>"" ALORS
cWhere est une chaîne = renvoyerClauseWhere(RubParcours,SaisieFichier)
CléParcours=HFiltre("REPOSITORY",cWhere)
SI CléParcours <> "" ALORS
//Code pour test
// HLitPremier(REPOSITORY,CléParcours)
// tantque pas HEnDehors(REPOSITORY)
// test est une chaine = REPOSITORY.NomFichier
// HLitSuivant(REPOSITORY,CléParcours)
// FIN
//Fin code pour test

TableAffiche(TableDest,taDébut)
//TableDest..RubriqueParcourue=CléParcours
FIN
SINON
// Annule le filtre
TableDest..FiltreÞP_PROJET.IDDEP_PROJET
TableDest..RubriqueParcourue="IDDEP_PROJET"
FIN

- Le code de renvoyerClauseWhere:
PROCEDURE renvoyerClauseWhere(nomChamp="",cWhere="")
_where est une chaîne
nbEtoiles est entier
nbChaines est entier
i est entier

SI Droite(cWhere,1) ="*" ALORS
cWhere=Gauche(cWhere,Taille(cWhere)-1)
FIN
SI Gauche(cWhere,1)="*" ALORS
cWhere=Droite(cWhere,Taille(cWhere)-1)
FIN

_where = nomChamp+"~] '"+cWhere+"'"
nbEtoiles = ChaîneOccurrence(cWhere,"*")

SI nbEtoiles>0 ALORS
nbChaines = nbEtoiles+1
_where=""
POUR i=1 A nbChaines
_where+=nomChamp+"~] '"+ExtraitChaîne(cWhere,i,"*")+"' ET "
FIN
_where = Gauche(_where,Taille(_where)-4)
FIN
RENVOYER _where

- Si je laisse la case "Utiliser la fonction HFiltre pour le parcours du
fichier", le Code pour test me liste bien les valeurs recherchées mais le
tableaffiche n'affiche pas ces valeurs
- Si j'enlève la case "Utiliser la fonction HFiltre pour le parcours du
fichier", çà fonctionne et je perds le trie automatique et la recherche
"simple"...
- si je décommente la ligne TableDest..RubriqueParcourue=CléParcours alors
il me renvoie une ligne qui n'a rien a à voir avec la recherche...

Quelqu'un a une idée ??
Michel