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 :

Filtrer une requête


Sujet :

WinDev

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut Filtrer une requête
    Bonjour

    J'ai écrit la requete suivante en group by afin d'avoir des totaux par BE et par Article :
    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
    Select 	
    	ligbe.be_id as be_id, 
    	reflarth.ART_CODE_LARTH as art_code_larth, 
    	reflarth.mpf_code_orig as mpf_code_orig, 
    	reflarth.mpf_ind_orig as mpf_ind_orig,
    	reflarth.art_code as art_code,
    	article.art_lib as art_lib,
    	sum(ligbe.ligbe_qte) as qte
    From 		
    	LIGBE, LIGCDE, REFLARTH, ARTICLE
    Where
    		ligcde.ECD_NUM=ligbe.ECD_NUM
    	And ligcde.LCD_LIGNE=ligbe.LCD_LIGNE
    	And	reflarth.ART_CODE=ligcde.ART_CODE
    	And	article.ART_CODE=ligcde.ART_CODE
    Group by ligbe.be_id, reflarth.ART_CODE_LARTH, reflarth.mpf_code_orig, reflarth.mpf_ind_orig, reflarth.art_code, article.art_lib
    Order by ligbe.be_id, reflarth.art_code_larth
    Je l'affiche sous forme de table, et au lancement toutes les lignes s'affichent correctement.

    Je souhaite maintenant filtrer selon le be_id saisi dans un champ en dehors de la table. Je fais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TABLE_REQ_LIGBE_CONDENSE..RubriqueParcourue="be_id"
    TABLE_REQ_LIGBE_CONDENSE..Filtre=BE.BE_ID
    TableAffiche(TABLE_REQ_LIGBE_CONDENSE)
    Et à l'exécution il ne me retrouve rien alors qu'il y a bel et bien des lignes pour le be_id que j'ai saisi.

    J'ai également essayé comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HFiltre(REQ_LIGBE_Condensé_par_Article,LIGBE.BE_ID,BE.BE_ID)
    TableAffiche(TABLE_REQ_LIGBE_CONDENSE)
    J'ai également essayé en mettant "be_id" (le nom du champ défini avec le "as" dans la requete) au lieu de "ligcde.be_id" mais dans ce cas j'ai une erreur système "not a group by expression"

    D'où cela vient-il ?
    Merci

  2. #2
    Membre averti Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Points : 394
    Points
    394
    Par défaut
    Bonjour,
    HFiltre renvoi t-il la clef de parcours ? Si non, que donne HErreur ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Bonjour JPDMJC

    Je me rends compte que j'avais mal écrit mon code. J'ai donc maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Clefparcours est une chaîne
    Clefparcours= HFiltreIdentique(REQ_LIGBE_Condensé_par_Article, be_id,SAI_BE_ID_RECHERCHE)
    et là j'ai un message d'erreur dès la fin de cette instruction : requete ou vue non initialisée. Pourtant j'ai une table basée sur cette requete avec parcours automatique donc pas besoin de faire des HLit etc .. (?)

    j'ai également essayé en modifiant ma requete pour lui passer mon filtre en parametre , puis
    ma_requete.param=1
    TableAffiche(...)
    mais j'obitens la meme erreur.

    Enfin, pour en avoir le coeur net j'ai également essayé en enlevant le group by de ma requete (et donc le sum) et la le filtrage fonctionne.

    Je cherche simplement à filtrer l'affichage de ma table basée sur une requête.

    Merci

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Autre exemple un peu différent : j'ai une requete définie dans le projet avec un group by :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT 	LIGCDE.ECD_NUM,	LIGCDE.LCD_LIGNE, LIGCDE.LCD_ETAT, LIGCDE.LCD_QTE, ENTCDE.ECD_ETAT, SUM(QLVCDE.QLC_QTELIV) as qte_livree
    FROM LIGCDE, QLVCDE, ENTCDE
    WHERE 
    QLVCDE.ECD_NUM(+) = LIGCDE.ECD_NUM
    AND QLVCDE.LCD_LIGNE(+) = LIGCDE.LCD_LIGNE
    AND	ENTCDE.ECD_NUM(+) = LIGCDE.ECD_NUM
    AND LIGCDE.ECD_NUM={param1}
    GROUP BY  LIGCDE.ECD_NUM,LIGCDE.LCD_LIGNE,LIGCDE.LCD_ETAT,LIGCDE.LCD_QTE, ENTCDE.ECD_ETAT
    si je ne met pas l'avant derniere ligne de parametre cela fonctonne bien je peux faire hExecuteRequete, puis hLitPremier etc.
    Par contre si je rajoute la ligne de filtrage et que je passe un parametre via hExecuterequete j'ai alors le message d'erreur systeme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Erreur à la ligne 2 du traitement Clic sur BTN_Bouton4.
    Vous avez appelé la fonction HLitPremier.
    Fichier <REQ_LIGCDE_QLVCDE> inconnu dans l'analyse <S:\Informatique\prive\TIC\Windev\Projet ADV Turquie\ADV Turquie.wdd>, ou requête ou vue non initialisée.
    Quelqu'un sait il d'ou vient le problème ?

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 140
    Points : 312
    Points
    312
    Par défaut
    Tu sauvegardes bien tout ton projet avant.

    Vérifie les fichiers wdd de ton projet.

    En comparant le fichier wdd dans la racine du projet
    avec le wdd du dossier .wdXX (ou XX est ta version).

    Et tu écrases le fichier le plus vieux.
    Parfois ça résout.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Bonjour Nicolas

    Effectivement il y avait 3h de différence entre les 2 fichiers .wdd. J'ai écrasé le plus ancien (celui à la racine) et le problème persiste.

    Je viens de faire encore un autre test en écrivant directement la requete dans l'appel sans l'enregistrer dans le projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HExécuteRequêteSQL(REQ_QTELIV,hRequêteInterruptible,"select sum(qlc_qteliv) as qte_livr from qlvcde where ecd_num=1")
    et j'ai la même erreur "REQ_QTELIV inconnu dans l'analyse ou non initialisé".

    Par contre ca marche tres bien si j'enleve la partie "where" de la requete.

    ??

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 140
    Points : 312
    Points
    312
    Par défaut
    Peux tu tester simplement (dans un bouton ou autre)..?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MaRequete est une source de données
    HExécuteRequêteSQL(MaRequete,hRequêteInterruptible,
                             "select sum(qlc_qteliv) as qte_livr from qlvcde where ecd_num=1")
    HLitPremier(MaRequete)
    Info(MaRequete.qte_livr)
    En fait, HExécuteRequêteSQL prend en premier paramètre une source de données que tu dois déclarer.
    Dans le code que tu as posté ici, on ne retrouve pas cette déclaration de source de données, peut être est-ce fait ailleurs, ou même à travers un champ.

    Toujours est-il que pour tester..

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Oui, j'avais effectivement déclaré ma source de données auparavant.

    Et je fais le test dans un bouton tout bete dans une fenetre de test vide.

    Quand je débogue le msg d'erreur intervient au moment du HlitPremier.

  9. #9
    Membre averti Avatar de Le Shadow
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 265
    Points : 305
    Points
    305
    Par défaut
    Hexecuterequetesql devrait te retourner un erreur que tu peux recuperer avec herreurinfo()... sinon, essaie ta requete avec wdmap

    Des fois, té mieux de pas être conscient de c'qui s'passe, pis rester heureux !!!

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Bonjour Le Shadow

    Effectivement j'ai une erreur dans hExecuterequeteSql que j'avais oublié de trapper : "ORA-00937 not a single-group group function".

    pourtant un simple "sum" n'est pas une group function (?). Ca marche si j'enleve le "where" ou le "sum" mais ca ne marche pas si je fais un sum+un where en même temps.


    j'ai remarqué qqchose d'étrange : dans l'erreur il est indiqué 'source MS OLE DB for Oracle" (cad MDAC en fait) alors que dans mon analyse je n'utilise que la connexion "Oracle OLE DB Provider" (cad le driver oledb de mon client Oracle).

    Pour ce qui est de WDMAP j'obtiens la même erreur.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Je viens de trouver une partie de mon problème !
    Alors en fait dans le code de ma requête définie dans le projet j'avais un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FROM
       table1, table2 ...
    et il aime pas le RC entre From et table1. C'est pourtant lui qui m'avait auto-formaté la requête (!).

    Maintenant cela fonctionne mieux pour une requete du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sum(champ) from table where champ2=valeur
    Par contre j'ai toujours ce problème si je rajoute un group by à la suite. Cad que ca :
    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
     
    Select ligbe.be_id as be_id, 
    reflarth.ART_CODE_LARTH as art_code_larth, 
    reflarth.mpf_code_orig as mpf_code_orig, 
    reflarth.mpf_ind_orig as mpf_ind_orig,
    reflarth.art_code as art_code,
    article.art_lib as art_lib,
    sum(ligbe.ligbe_qte) as qte
    From  LIGBE, LIGCDE, REFLARTH, ARTICLE
    Where ligcde.ECD_NUM=ligbe.ECD_NUM
    And ligcde.LCD_LIGNE=ligbe.LCD_LIGNE
    And reflarth.ART_CODE=ligcde.ART_CODE
    And article.ART_CODE=ligcde.ART_CODE
    Group by ligbe.be_id, reflarth.ART_CODE_LARTH, reflarth.mpf_code_orig,
     reflarth.mpf_ind_orig, reflarth.art_code, article.art_lib
    ca marche, mais pas ça :-(

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Select ligbe.be_id as be_id, 
    reflarth.ART_CODE_LARTH as art_code_larth, 
    reflarth.mpf_code_orig as mpf_code_orig, 
    reflarth.mpf_ind_orig as mpf_ind_orig,
    reflarth.art_code as art_code,
    article.art_lib as art_lib,
    sum(ligbe.ligbe_qte) as qte
    From  LIGBE, LIGCDE, REFLARTH, ARTICLE
    Where ligbe.be_id=1 and ligcde.ECD_NUM=ligbe.ECD_NUM
    And ligcde.LCD_LIGNE=ligbe.LCD_LIGNE
    And reflarth.ART_CODE=ligcde.ART_CODE
    And article.ART_CODE=ligcde.ART_CODE
    Group by ligbe.be_id, reflarth.ART_CODE_LARTH, reflarth.mpf_code_orig,
     reflarth.mpf_ind_orig, reflarth.art_code, article.art_lib

Discussions similaires

  1. [AC-2000] Récupérer la valeur d’une liste déroulante pour filtrer une requête SQL
    Par Gremandine dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/03/2010, 15h43
  2. [5.1.5] Filtrer une requête
    Par aqw12 dans le forum Débuter
    Réponses: 3
    Dernier message: 08/10/2008, 16h51
  3. Filtrer une requête avec des checkbox
    Par prizmose dans le forum Requêtes
    Réponses: 0
    Dernier message: 28/05/2008, 10h31
  4. [Oracle 10G] Filtrer une requête en fonction d'une autre table
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 4
    Dernier message: 27/04/2008, 04h49
  5. [RegEx] Filtrer une requête avec une regexp
    Par _kal_ dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2007, 12h05

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