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 sur table avec requête [WD14]


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut Filtre sur table avec requête
    Bonjour,

    Je n'arrive pas à appliquer un filtre sur une de mes tables.
    Celle-ci est liée à une requête REQ_Agents qui sélectionne des données sur des agents.
    J'ai un champ de saisie au-dessus de la table qui doit me permettre de filtrer les agents en fonction de ce que l'on saisie dans le champ. On doit pouvoir saisir le nom, le prénom ou le matricule de l'agent recherché.

    J'ai fait plusieurs essais mais aucun n'a fonctionné.

    Voici le code de ma requête :

    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
    SELECT 
    	Agent.matricule AS matricule,	
    	Agent.civilite AS civilite,	
    	Agent.nom AS nom,	
    	Agent.prénom AS prénom,	
    	Agent.dateNaissance AS dateNaissance,	
    	Agent.numTel AS numTel,	
    	Agent.Adresseemail AS Adresseemail,	
    	Agent.codeADELI AS codeADELI,	
    	Agent.codeRPPS AS codeRPPS,	
    	Grade.libelle AS libelle,	
    	Pole.libelle AS libelle_Po,	
    	Service.libelle AS libelle_Se,	
    	Spécialité.libelle AS libelle_Sp,	
    	UF.CodeUF AS CodeUF,	
    	UF.libelle AS libelle_UF,	
    	Agent.nomUsage AS nomUsage,	
    	Agent.nomPatronymique AS nomPatronymique,	
    	Agent.prénomUsage AS prénomUsage,	
    	Agent.dateEffet AS dateEffet
    FROM 
    	Spécialité RIGHT OUTER JOIN Agent ON Agent.IDSpécialité	=	Spécialité.IDSpécialité,	
    	Pole RIGHT OUTER JOIN Agent ON Agent.IDPole	=	Pole.IDPole,	
    	Service RIGHT OUTER JOIN Agent ON Agent.IDService	=	Service.IDService,	
    	Grade RIGHT OUTER JOIN Agent ON Agent.IDGrade	=	Grade.IDGrade,	
    	UF RIGHT OUTER JOIN Agent ON Agent.IDUF	=	UF.IDUF
    WHERE 
    	(
    	Agent.matricule <> '0'
    )
    ORDER BY 
    	nom ASC,	
    	prénom ASC,	
    	matricule ASC
    Et voici le code de mon champ (à chaque modification) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HFiltre(REQ_Agents,"nom~]'"+SAI_ChercheAgent+"' OU prenom~]'"+SAI_ChercheAgent+"' OU matricule~]'"+SAI_ChercheAgent+"'")
    HExécuteRequête(REQ_Agents, hAvecFiltre)
    TableAffiche(TABLE_Agent,taCourantEnreg)
    J'avais aussi essayé sans le HExécuteRequête mais sans résultat.

    Si vous voyez d'où provient le problème, merci d'avance de me le faire savoir !

    Aenur.

  2. #2
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut
    Bonjour
    C'est peut être possible d'utiliser HFiltre sur une requête mais je trouve ça plutôt étrange.
    Pourquoi ne pas utiliser des paramètres dans ta requête ? C'est beaucoup plus simple

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Tu veux dire en rajoutant une condition dans ce genre là : ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE nom = {param1}
    OR prénom = {param1}
    OR matricule = {param1}
    Je crois que j'avais essayé mais ça ne marchait pas plus.
    Je vais réessayer quand même mais je ne pense pas que ça sera mieux.

    En attendant si quelqu'un a d'autres idées, je suis preneur

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 344
    Points : 3 860
    Points
    3 860
    Par défaut
    Salut à toi,

    Je viens d'effectuer un test, et ma table se réinitialise bien.
    Es-tu certain d'avoir le bon résultat sur l'application du filtre sur la requête ?

    Peux-tu ajouter cela après le HExécuteRequête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SI HEnDehors(REQ_Agents) ALORS
    	Trace("Aucun résultat trouvé !")
    SINON
    	TANTQUE PAS HEnDehors(REQ_Agents)
    		Trace(REQ_Agents.matricule)
    		HLitSuivant(REQ_Agents)
    	FIN
    FIN

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    J'ai rajouté le code, ce qui me fait en code :

    A chaque modification de SAI_ChercheAgent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HFiltre(REQ_Agents,"nom~]'"+SAI_ChercheAgent+"' OU prenom~]'"+SAI_ChercheAgent+"' OU matricule~]'"+SAI_ChercheAgent+"'")
    HExécuteRequête(REQ_Agents, hAvecFiltre)
    SI HEnDehors(REQ_Agents) ALORS
    	Trace("Aucun résultat trouvé !")
    SINON
    	TANTQUE PAS HEnDehors(REQ_Agents)
    		Trace(REQ_Agents.matricule)
    		HLitSuivant(REQ_Agents)
    	FIN
    FIN
     
    TableAffiche(TABLE_Agent,taCourantEnreg)
    Initialisation de TABLE_Agent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequête(REQ_Agents)
    Quoi que je saisisse dans le champ, il m'affiche "Aucun résultat trouvé !", tout en affichant toujours toutes les entrées dans la table.

    Je vois pas où est le problème :s

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    a et pour hpascal : j'ai réessayé de faire tout en une requête mais ça ne marche pas plus
    Peut être une erreur dans ma requête mais je ne pense pas :

    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
    SELECT 
    	Agent.matricule AS matricule,	
    	Agent.civilite AS civilite,	
    	Agent.nom AS nom,	
    	Agent.prénom AS prénom,	
    	Agent.dateNaissance AS dateNaissance,	
    	Agent.numTel AS numTel,	
    	Agent.Adresseemail AS Adresseemail,	
    	Agent.codeADELI AS codeADELI,	
    	Agent.codeRPPS AS codeRPPS,	
    	Grade.libelle AS libelle,	
    	Métier.libelle AS libelle_Mé,	
    	Pole.libelle AS libelle_Po,	
    	Service.libelle AS libelle_Se,	
    	Spécialité.libelle AS libelle_Sp,	
    	UF.CodeUF AS CodeUF,	
    	UF.libelle AS libelle_UF,	
    	Agent.dateEffet AS dateEffet
    FROM 
    	Spécialité RIGHT OUTER JOIN Agent ON Agent.IDSpécialité	=	Spécialité.IDSpécialité,	
    	Pole RIGHT OUTER JOIN Agent ON Agent.IDPole	=	Pole.IDPole,	
    	Service RIGHT OUTER JOIN Agent ON Agent.IDService	=	Service.IDService,	
    	Grade RIGHT OUTER JOIN Agent ON Agent.IDGrade	=	Grade.IDGrade,	
    	Métier RIGHT OUTER JOIN Agent ON Agent.IDMétier	=	Métier.IDMétier,	
    	UF RIGHT OUTER JOIN Agent ON Agent.IDUF	=	UF.IDUF
    WHERE 
    	(
    	Agent.matricule <> '0'
    	AND	
    	(
    		Agent.nom LIKE %{Param1}%
    		OR	Agent.prénom LIKE %{Param1}%
    		OR	Agent.matricule LIKE %{Param1}%
    	)
    )
    ORDER BY 
    	nom ASC,	
    	prénom ASC,	
    	matricule ASC

    Et le code de modification du champ de saisie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HExécuteRequête(REQ_AgentsRecherche,SAI_ChercheAgent)
    TableAffiche(TABLE_AgentsRecherche, taCourantEnreg)
    Des idées ?

  7. #7
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 344
    Points : 3 860
    Points
    3 860
    Par défaut
    J'ai oublié le HlitPremier() avant le SI

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    A oui exact ^^
    Et bien après l'ajout du HLitPremier, il m'affiche tous les matricules des agents, quels que soient les lettres que je tape.

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 344
    Points : 3 860
    Points
    3 860
    Par défaut
    Faux espoirs, mon test a fonctionné par hasard... il s'agit en fait d'un projet fourre-tout et j'avais du code qui se répercutait sur la table.

    Donc, je viens de retester et j'arrive aux mêmes résultats que toi, en ce qui concerne le filtrage de requête.
    Par contre, si la table est liée à un fichier, ça fonctionne très bien.

    Je vais quand même creuser ce HFiltre(..) sur les requêtes...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Merci de m'aider à creuser

    Je suis dans le même cas pour la table liée à un fichier, ma fonction HFiltre marchait nikel sans trop avoir à bidouiller. Mais là c'est vraiment tordu

    Une solution, enfin une esquive plutôt est de créer 3 champ de saisie, un pour chaque rubrique et de faire un TableActiveFiltre() sur la colonne voulue.
    Mais bon c'est vraiment la solution de dernier recours parce que c'est quand même beaucoup plus pratique et ergonomique de pouvoir rechercher suivant plusieurs rubriques dans un même champ.

    Mais bon il doit bien exister une solution

  11. #11
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 344
    Points : 3 860
    Points
    3 860
    Par défaut
    J'ai trouvé une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Requête3.Param1 = "toto"
    HExécuteRequête(Requête3)
    HLitPremier(Requête3)
    SI HEnDehors(Requête3) ALORS
    	Trace("Aucun résultat trouvé !")
    SINON
    	TANTQUE PAS HEnDehors(Requête3)
    		Trace(Requête3.NomContact)
    		HLitSuivant(Requête3)
    	FIN
    FIN
     
    TableAffiche(Table_2, taInit)
    J'ai mis des conditions de sélection dans la requête pour avoir le résultat voulu et j'ai utilisé le taInit au lieu de taCourantEnreg.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Arf je dois être maudit parce que ça marche pas si bien que ça chez moi...

    La trace me met bien les bons matricules des agents recherchés mais par contre ma table n'affiche pas les résultats voulus, elle contient toujours tous les enregistrements je comprends pas pourquoi...

    Ma requête est la même que celle du 6eme post
    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    REQ_AgentsRecherche.Param1 = SAI_ChercheAgent
    HExécuteRequête(REQ_AgentsRecherche)
    HLitPremier(REQ_AgentsRecherche)
    SI HEnDehors(REQ_AgentsRecherche) ALORS
    	Trace("Aucun résultat trouvé !")
    SINON
    	TANTQUE PAS HEnDehors(REQ_AgentsRecherche)
    		Trace(REQ_AgentsRecherche.matricule)
    		HLitSuivant(REQ_AgentsRecherche)
    	FIN
    FIN
     
    TableAffiche(TABLE_AgentsRecherche, taInit)
    Tu vois d'où vient le problème ?

  13. #13
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 344
    Points : 3 860
    Points
    3 860
    Par défaut
    As-tu du code dans l'Initialisation de la table ?

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    T'as raison ça vient de là !

    J'avais un MaSource.Param1 = "" à l'initialisation de ma table donc à chaque fois il prenait ça comme paramètre alors je l'ai mis à l'initialisation de la fenêtre finalement (comme ça j'ai pas un tableau vide qui s'affiche à l'ouverture).

    Maintenant la recherche marche nikel merci beaucoup pour ton aide Lo² je te suis très reconnaissant

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

Discussions similaires

  1. Requête sur table avec des centaines de millions de lignes
    Par kaka83185 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/01/2012, 15h05
  2. Réponses: 3
    Dernier message: 02/03/2011, 16h30
  3. [AC-2010] Filtre sur formulaire avec copie dans une autre table
    Par alainnolahc dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/10/2010, 19h26
  4. Requête sur table avec beaucoup de champs
    Par Lideln75 dans le forum Requêtes
    Réponses: 16
    Dernier message: 04/12/2008, 02h37
  5. 3 tables avec requête complexe
    Par yamino dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/03/2004, 19h50

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