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 :

Problème rêquete imbriquée [WD17]


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut Problème rêquete imbriquée
    Bonjour à tous et à toutes,

    Je cherche simplement à exécuter une requête qui me renvoie plusieurs lignes, et pour chaque ligne de cette requête, exécuter une autre requête dessus. Est-il possible de faire cela?

    Merci d'avance,
    PS: Je ne suis pas expert en Windev, donc ne me critiquez pas si ma question semble bête...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 280
    Points : 12 974
    Points
    12 974
    Par défaut
    Bonjour,
    Oui, c'est possible.
    Suivant la base utilisée il est aussi possible de le faire avec une seule requête.

    Tatayo.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Merci pour la réponse mais je vois pas du tout comment le faire.

    J'ai réaliser deux requêtes, et j'aimerai bien que vous me donniez la voie pour réaliser cela, car malgré mes recherches, je ne comprend vraiment pas...

    Merci!

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    Comment utilises-tu tes requêtes ? Avec un chaîne et en utilisant HexécuteRequêteSQL, avec l'éditeur de requête et hExécuteRequête ?
    as-tu déjà construit des requêtes avec des paramètres ?
    Si non, regardes l'aide pour savoir comment le faire.
    Si oui, est-ce que la deuxième requête est bien avec paramètres et utilises-tu des valeurs de la première comme paramètres dans ta deuxième requête ?

    Page d'aides :
    http://doc.pcsoft.fr/fr-FR/?2032040&...dante-integree

    à bientôt,

    Nicolas

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Alors pour répondre à toutes ces questions :

    J'ai créer mes requêtes à partir de l'éditeur et je les utilises avec hExecuteRequete.
    J'ai déjà utilisé des requêtes avec des paramètres, mais pas avec des paramètres d'une autre requête.

    En faite voila mon code des deux requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HExécuteRequête(REQ_Benef,param)
    HExécuteRequête(REQ_Adres,REQ_Benef.MATPROP)
    Ma première requête s’exécute correctement, mais la deuxième me retourne une erreur disant qu'il ne connait pas REQ_Benef.MATPROP.
    Je comprend le problème, car la requête du haut s’exécute puis se termine donc la deuxième n'a pas le temps de récupérer le paramètre de la requête une.

    Il faudrait en gros que je dise, tant que j'ai des résultats de ma requête une, j'exécute ma deuxième requête pour chacun de ces résultats mais je vois pas du tout comment le coder...

    Merci à tous ceux qui m'aideront!

  6. #6
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Bonjour,

    mais tu as une seule ligne pour REQ_Benef.MATPROP ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SI HExécuteRequête(REQ_Benef,param) alors
      POUR TOUT REQ_Benef
         HExécuteRequête(REQ_Adres,REQ_Benef.MATPROP)
         // là tu traite tes résultats de REQ_Adres
      FIN
    FIN
    Sinon en une seule requête ça sera mieux.
    envoi le code SQL de tes deux requêtes qu'on regarde ça

  7. #7
    Membre du Club
    Homme Profil pro
    Admin Unix & Dev Sénior
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : Admin Unix & Dev Sénior

    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Points : 49
    Points
    49
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    HExécuteRequête(REQ_1, Param1)
    HLitPremier(REQ_1,hSansRafraîchir)
    TANTQUE PAS HEnDehors(REQ_1)
       HExécuteRequête(REQ_2, REQ_1.Res1)
       HLitSuivant(REQ_1)
    FIN

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Non, ma requête m'envoie pleins de lignes avec plusieurs attributs.

    Je l'ai faite pas l'assistant de requête donc je vous met le code de l'assistant :
    REQ_Adr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
    	ADRES.RUE1 AS RUE1,	
    	ADRES.RUE2 AS RUE2,	
    	ADRES.RUE3 AS RUE3,	
    	ADRES.CODPOS AS CODPOS,	
    	ADRES.BURDIS AS BURDIS
    FROM 
    	ADRES
    REQ_Benef:
    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
    SELECT 
    	BENEF.MATPROP AS MATPROP,	
    	 LEFT(BENEF.MATPROP,2) AS MATRICULE,	
    	BENEF.NOM AS NOM,	
    	BENEF.PRENOM AS PRENOM,	
    	BENEF.DTCARTA AS DTCARTA,	
    	BENEF.DTEADH AS DTEADH,	
    	BENEF.NSS AS NSS,	
    	BENEF.DTESOUS AS DTESOUS,	
    	BENEF.DTNAIS AS DTNAIS,	
    	BENEF.DTEDEBCART AS DTEDEBCART,	
    	BENEF.DTEFINCART AS DTEFINCART,	
    	BENEF.CLENSS AS CLENSS,	
    	BENEF.NOCATEG AS NOCATEG,	
    	BENEF.DTERAD AS DTERAD,	
    	BENEF.QUALITE AS QUALITE,	
    	LEFT(BENEF.MATPROP,8) AS Beneficiaire
    FROM 
    	BENEF
    WHERE 
    	 LEFT(BENEF.MATPROP,2) IN ({Param1}) 
    	 AND	BENEF.DTERAD = 0
    ORDER BY 
    	MATPROP ASC,	
    	QUALITE ASC
    J'ai testé vos 2 codes, et cela ne marche pas malheureusement

    En tous cas, merci de votre aide!

  9. #9
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    A voir ta requête REQ_Adr, elle n'attend pas de paramètre, donc il est normal que ça ne marche pas comme tu veux, ou alors tu ne nous a pas tout collé

    Après le FROM ADRES, tu devrais avoir quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where MaRubrique = {param1}
    Revois la conception de ta requête et les codes d'Atsibat et d'hartyshow devraient fonctionner.

    Bonne continuation.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Je crois j'ai voulu allé trop vite et je me suis pas assez posé...
    Je vais essayez de rectifier tout sa alors!

    Merci pour votre aide!

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Bon bon bon...

    Malgré mon erreur sur ma requête où je n'avais effectivement pas demandé à ma requête un paramètre, les deux codes données ne marchent toujours pas...

    Pour le code d'hartyshow, le HLitPremier ne marche pas... Il me dis que la REQ_Benef n'est pas connu dans mon analyse... Je ne comprend pas...

    Puis pour le code d'Astibat, il ne rentre même pas dans ma boucle si...

    Je ne comprend vraiment rien là...

  12. #12
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Si il te dit que la requête est inconnu dans l'analyse, c'est que tu as une erreur dans cette requête mais à la regarder comme cela, je n'en vois pas.

    Regarde dans le code SQL de la requête si tu n'as pas quelque chose de souligné, ça pourra t'aider à trouver où est l'erreur.

    Puis pour le code d'Astibat, il ne rentre même pas dans ma boucle si...
    Justement, le hExecuteRequete renvois Faux car il n'arrive pas à exécuter la requête.
    Si tu modifie un peu le code d'Atsibat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SI HExécuteRequête(REQ_Benef,param) alors
      POUR TOUT REQ_Benef
         HExécuteRequête(REQ_Adres,REQ_Benef.MATPROP)
         // là tu traite tes résultats de REQ_Adres
      FIN
    SINON
      Erreur(HErreurInfo(hErrComplet))
    FIN
    Tu devrais avoir un beau message d'erreur.

  13. #13
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Et puis voici quelques conseils gratos que tu vas marquer en rouge et en gros pas loin de ton écran.
    "Nommer les variables de façon à ce que leur nom évoque une données concrète même lorsque je reviendrai sur ce code dans un an. Valable aussi pour les noms de champs dans les bases de données."

    "Quand je donne des requêtes sur le forum je précise au moins les clés primaires et secondaires de mes fichiers pour que les pauvres bougres qui voudraient m'aider arrivent à quelque chose."

    Allez je tente le coup de bluff tu corrigera :
    on prends NSS comme ID qui veut dire NumSecu

    voilà les deux requêtes en une :

    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
     
    SELECT 
            ADRES.RUE1 AS RUE1,	
    	ADRES.RUE2 AS RUE2,	
    	ADRES.RUE3 AS RUE3,	
    	ADRES.CODPOS AS CODPOS,	
    	ADRES.BURDIS AS BURDIS,
    	BENEF.MATPROP AS MATPROP,	
    	 LEFT(BENEF.MATPROP,2) AS MATRICULE,	
    	BENEF.NOM AS NOM,	
    	BENEF.PRENOM AS PRENOM,	
    	BENEF.DTCARTA AS DTCARTA,	
    	BENEF.DTEADH AS DTEADH,	
    	BENEF.NSS AS NSS,	
    	BENEF.DTESOUS AS DTESOUS,	
    	BENEF.DTNAIS AS DTNAIS,	
    	BENEF.DTEDEBCART AS DTEDEBCART,	
    	BENEF.DTEFINCART AS DTEFINCART,	
    	BENEF.CLENSS AS CLENSS,	
    	BENEF.NOCATEG AS NOCATEG,	
    	BENEF.DTERAD AS DTERAD,	
    	BENEF.QUALITE AS QUALITE,	
    	LEFT(BENEF.MATPROP,8) AS Beneficiaire
    FROM 
    	BENEF LEFT OUTER JOIN ADRES ON BENEF.NSS=ADRES.NSS
    WHERE 
    	 LEFT(BENEF.MATPROP,2) IN ({Param1}) 
    	 AND	BENEF.DTERAD = 0
    ORDER BY 
    	MATPROP ASC,	
    	QUALITE ASC

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Désolé pas l'habitude de poster sur des forums, mais je note!

    J'ai trouvé mon erreur, c'était le paramètre que j'avais mal affecter à ma requête, car maintenant, aucun problème avec le code d'Atsibat.

    Merci pour votre aide!

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

Discussions similaires

  1. [MySQL] Problème requete imbriquée
    Par SrK dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2007, 15h03
  2. Problème requêtes imbriquées
    Par jean-paul lepetit dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 20/03/2007, 10h32
  3. Problème Requête Imbriquée
    Par PaulPersonne820 dans le forum Hibernate
    Réponses: 1
    Dernier message: 31/01/2007, 22h40
  4. Problème Requête imbriquée
    Par EddieN dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/10/2006, 07h52
  5. problème iterations imbriquées
    Par mitje dans le forum Struts 1
    Réponses: 3
    Dernier message: 03/10/2006, 12h25

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