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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 92
    Points : 35
    Points
    35
    Par défaut Erreur dans le code SQL de la requête <nom de la requête>. Initialisation de la requête impossible. Les fonc
    bonsoir à tous merci pour votre soutien infini.
    je rencontre un problème avec ma requête SQL dans WinDev
    ma requête est la suivante:
    Code SQL : 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
    SELECT t1.CommandeId, t1.CommandeDate, t1.FournisseurId, t1.FournisseurNom, t1.MaterielId, t1.MaterielLibelle, t1.qte_commandee, 
        t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) AS reste_a_livrer
    FROM 
    (
        SELECT lc.CommandeId, lc.MaterielId, m.MaterielLibelle, c.FournisseurId, f.FournisseurNom, c.CommandeDate, 
        lc.Quantite AS qte_commandee
        FROM ligne_commande_fournisseur lc
        INNER JOIN commande_fournisseur c ON c.CommandeId = lc.CommandeId
            INNER JOIN fournisseur f ON f.FournisseurId = c.FournisseurId
        		INNER JOIN materiel m ON lc.MaterielId = m.MaterielId
        WHERE lc.CommandeId = 2
    ) t1
    LEFT OUTER JOIN
    (
        SELECT lr.MaterielId, lr.ReceptionQuantite
        FROM ligne_reception lr
        INNER JOIN reception r ON r.ReceptionId = lr.ReceptionId
        WHERE r.CommandeId = 2
    ) t2 ON t2.MaterielId = t1.MaterielId
    GROUP BY t1.CommandeId, t1.CommandeDate, t1.FournisseurId, t1.FournisseurNom, t1.MaterielId, t1.MaterielLibelle, t1.qte_commandee
    HAVING t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) > 0
    Elle marche très dans mysql par contre dans windev non

    l'erreur est:
    Erreur dans le code SQL de la requête <nom de la requête>.
    Initialisation de la requête impossible.
    Les fonctions agrégats(COUNT,AVG, SUM, MIN, MAX) ne sont pas autorisées en dehors des clauses SELECT ou HAVING
    j'utilise WinDev 20 et MySQL
    Merci de m'aider

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 120
    Points : 9 533
    Points
    9 533
    Par défaut
    Quand tu lances ta requête, j'imagine que tu passes par une fonction hExecuteRequete() , ou bien hExecuteRequeteSQL().
    Il faut ajouter le paramètre hRequeteSansCorrection. Regarde l'aide pour avoir l'ordre des paramètres.

    Comme ça, Windev ne vérifie pas la syntaxe, il envoie ta requête directement à MySQL.
    Windev considère que ta requête n'est pas valide, elle ne marcherait pas avec HFSQL.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 92
    Points : 35
    Points
    35
    Par défaut
    mon code windev est:
    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
     
    TableSupprimeTout(TABLE_MaterielReception)
    nNumCommande est un entier=TABLE_Reception.COL_CommandeId
    Req_Combo est une Source de Données
    SI PAS HExécuteRequêteSQL(Req_Combo, hRequêteDéfaut, " SELECT t1.CommandeId CommandeId, t1.CommandeNo CommandeNo, t1.CommandeDate CommandeDate, t1.FournisseurId FournisseurId, t1.FournisseurNom FournisseurNom, t1.MaterielId MaterielId, t1.MaterielLibelle MaterielLibelle, t1.qte_commandee qte_commandee, t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) AS reste_a_livrer"+...
    	" FROM"+... 
    	"("+...
    	" SELECT lc.CommandeId , c.CommandeNo, lc.MaterielId, m.MaterielLibelle, c.FournisseurId, f.FournisseurNom, c.CommandeDate, "+...
    	" lc.Quantite AS qte_commandee"+...
    	"FROM ligne_commande_fournisseur lc"+...
    	" INNER JOIN commande_fournisseur c ON c.CommandeId = lc.CommandeId"+...
    	" INNER JOIN fournisseur f ON f.FournisseurId = c.FournisseurId"+...
    	" INNER JOIN materiel m ON lc.MaterielId = m.MaterielId"+... 
    	" WHERE lc.CommandeId ="+nNumCommande+""+...
    	") t1"+...
    	"LEFT OUTER JOIN"+...
    	"("+...
    	" SELECT lr.MaterielId, lr.ReceptionQuantite FROM ligne_reception lr INNER JOIN reception r ON r.ReceptionId = lr.ReceptionId"+...
    	" WHERE r.CommandeId ="+nNumCommande+""+...
    	") t2 ON t2.MaterielId = t1.MaterielId"+...
    	" GROUP BY t1.CommandeId, t1.CommandeDate, t1.FournisseurId, t1.FournisseurNom, t1.MaterielId, t1.MaterielLibelle, t1.qte_commandee"+...
    	"HAVING t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) > 0 ") ALORS 
    	Info("Pb dans la requête"+HErreurInfo()) 
    	RETOUR 
    FIN 
    HLitPremier(Req_Combo) 
    TANTQUE PAS HEnDehors(Req_Combo)
    	TableAjoute(TABLE_MaterielReception,Req_Combo.CommandeId+TAB+Req_Combo.CommandeNo+TAB+Req_Combo.CommandeDate+TAB+Req_Combo.FournisseurId+TAB+Req_Combo.FournisseurNom+TAB+Req_Combo.MaterielId+TAB+Req_Combo.MaterielLibelle+TAB+Req_Combo.qte_commandee+TAB+Req_Combo.reste_a_livrer)
    	HLitSuivant(Req_Combo) 
    FIN

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 92
    Points : 35
    Points
    35
    Par défaut
    Merci pour votre aide mais les modifications une nouvelle erreur:
    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
    TableSupprimeTout(TABLE_MaterielReception)
    nNumCommande est un entier=TABLE_Reception.COL_CommandeId
    Req_Combo est une Source de Données
    SI PAS HExécuteRequêteSQL(Req_Combo, ConnexionMySQL, hRequêteSansCorrection, " SELECT t1.CommandeId CommandeId, t1.CommandeNo CommandeNo, t1.CommandeDate CommandeDate, t1.FournisseurId FournisseurId, t1.FournisseurNom FournisseurNom, t1.MaterielId MaterielId, t1.MaterielLibelle MaterielLibelle, t1.qte_commandee qte_commandee, t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) AS reste_a_livrer"+...
    	" FROM"+... 
    	"("+...
    	" SELECT lc.CommandeId , c.CommandeNo, lc.MaterielId, m.MaterielLibelle, c.FournisseurId, f.FournisseurNom, c.CommandeDate, "+...
    	" lc.Quantite AS qte_commandee"+...
    	"FROM ligne_commande_fournisseur lc"+...
    	" INNER JOIN commande_fournisseur c ON c.CommandeId = lc.CommandeId"+...
    	" INNER JOIN fournisseur f ON f.FournisseurId = c.FournisseurId"+...
    	" INNER JOIN materiel m ON lc.MaterielId = m.MaterielId"+... 
    	" WHERE lc.CommandeId ="+nNumCommande+""+...
    	") t1"+...
    	"LEFT OUTER JOIN"+...
    	"("+...
    	" SELECT lr.MaterielId, lr.ReceptionQuantite FROM ligne_reception lr INNER JOIN reception r ON r.ReceptionId = lr.ReceptionId"+...
    	" WHERE r.CommandeId ="+nNumCommande+""+...
    	") t2 ON t2.MaterielId = t1.MaterielId"+...
    	" GROUP BY t1.CommandeId, t1.CommandeDate, t1.FournisseurId, t1.FournisseurNom, t1.MaterielId, t1.MaterielLibelle, t1.qte_commandee"+...
    	"HAVING t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) > 0 ") ALORS 
    	Info("Pb dans la requête"+HErreurInfo()) 
    	RETOUR 
    FIN 
    HLitPremier(Req_Combo) 
    TANTQUE PAS HEnDehors(Req_Combo)
    	TableAjoute(TABLE_MaterielReception,Req_Combo.CommandeId+TAB+Req_Combo.CommandeNo+TAB+Req_Combo.CommandeDate+TAB+Req_Combo.FournisseurId+TAB+Req_Combo.FournisseurNom+TAB+Req_Combo.MaterielId+TAB+Req_Combo.MaterielLibelle+TAB+Req_Combo.qte_commandee+TAB+Req_Combo.reste_a_livrer)
    	HLitSuivant(Req_Combo) 
    FIN
    la nouvelle erreur
    Images attachées Images attachées  

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 251
    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 251
    Points : 12 903
    Points
    12 903
    Par défaut
    Bonjour,
    Il manque un espace dans la requête, soit ligne 8 après qte_commandee, soit ligne 10 avant le FROM. Tu as le même problème entre les lignes 14 et 15, ainsi que 20 et 21.
    A mon avis pour éviter ce genre de problème il vaut mieux utiliser une chaine multiligne, et ChaineConstruit pour les paramètres.
    Enfin tu devrais passer hErrComplet en paramètre de hErreurInfo pour avoir le détail de l'erreur, ça aide souvent pour en trouver l'origine.

    Tatayo.

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 120
    Points : 9 533
    Points
    9 533
    Par défaut
    Un conseil, comme ça, en passant.
    Tu crées ta requête, tu la vérifies , puis tu l'exécutes:

    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
     
    TableSupprimeTout(TABLE_MaterielReception)
    sReq est une chaine 
    nNumCommande est un entier=TABLE_Reception.COL_CommandeId
    Req_Combo est une Source de Données
    sreq = [
     SELECT t1.CommandeId CommandeId, t1.CommandeNo CommandeNo, t1.CommandeDate CommandeDate, t1.FournisseurId FournisseurId, t1.FournisseurNom FournisseurNom,
          t1.MaterielId MaterielId, t1.MaterielLibelle MaterielLibelle, t1.qte_commandee qte_commandee, t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) AS reste_a_livrer
    	 FROM
    	(
    	 SELECT lc.CommandeId , c.CommandeNo, lc.MaterielId, m.MaterielLibelle, c.FournisseurId, f.FournisseurNom, c.CommandeDate, 
    	 lc.Quantite AS qte_commandee
    	FROM ligne_commande_fournisseur lc
    	 INNER JOIN commande_fournisseur c ON c.CommandeId = lc.CommandeId
    	 INNER JOIN fournisseur f ON f.FournisseurId = c.FournisseurId
    	 INNER JOIN materiel m ON lc.MaterielId = m.MaterielId
    	 WHERE lc.CommandeId = %1  
    	) t1
    	LEFT OUTER JOIN
    	(
    	 SELECT lr.MaterielId, lr.ReceptionQuantite FROM ligne_reception lr INNER JOIN reception r ON r.ReceptionId = lr.ReceptionId
    	 WHERE r.CommandeId =  %1   
    	) t2 ON t2.MaterielId = t1.MaterielId
    	 GROUP BY t1.CommandeId, t1.CommandeDate, t1.FournisseurId, t1.FournisseurNom, t1.MaterielId, t1.MaterielLibelle, t1.qte_commandee
    	HAVING t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) > 0 
    ]
    sreq = chaineconstruit( sreq, nNumCommande )
     
    versPressePapier(sreq)  //  pour copierColler la requete dans MySQL, pour la contrôler 
    info( sreq ) 
     
    SI PAS HExécuteRequêteSQL(Req_Combo, ConnexionMySQL, hRequêteSansCorrection,  sreq  ) ALORS 
    	erreur("Pb dans la requête"+HErreurInfo()) 
    	RETOUR 
    FIN 
    HLitPremier(Req_Combo) 
    TANTQUE PAS HEnDehors(Req_Combo)
            TableAjoute(TABLE_MaterielReception,Req_Combo.CommandeId+TAB+Req_Combo.CommandeNo+TAB+Req_Combo.CommandeDate+TAB+Req_Combo.FournisseurId
                 +TAB+Req_Combo.FournisseurNom+TAB+Req_Combo.MaterielId+TAB+Req_Combo.MaterielLibelle+TAB+Req_Combo.qte_commandee+TAB+Req_Combo.reste_a_livrer)
    	HLitSuivant(Req_Combo) 
    FIN
    Les 2 instructions VersPressePapier et info() au milieu ne sont pas nécessaires dans la version finale. Elles sont là juste pour permettre de relire la requête.
    J'ai recopié la requête telle quelle, je ne l'ai pas regardée , et je n'ai pas appliqué le conseil (certainement très bon) de Tatayo.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 92
    Points : 35
    Points
    35
    Par défaut
    j'ai utilisé SQLEXEC
    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
    nIdConnection est un entier = SQLConnecte(NomSource,NomUtilisateur,PasseUtilisateur,"",TypeBase)
    SI nIdConnection ALORS
    	TableSupprimeTout(TABLE_MaterielReception)
    	nNumCommande est un entier=TABLE_Reception.COL_CommandeId
    	//sdReq_Combo est une Source de Données
    	i est un entier = 0
    	gnMyRep=SQLExec(" SELECT t1.CommandeId CommandeId, t1.CommandeNo CommandeNo, t1.CommandeDate CommandeDate, t1.FournisseurId FournisseurId, t1.FournisseurNom FournisseurNom, t1.MaterielId MaterielId, t1.MaterielLibelle MaterielLibelle, t1.qte_commandee qte_commandee, t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) AS reste_a_livrer"+...
    		" FROM"+... 
    		" ("+...
    		" SELECT lc.CommandeId , c.CommandeNo, lc.MaterielId, m.MaterielLibelle, c.FournisseurId, f.FournisseurNom, c.CommandeDate, "+...
    		" lc.Quantite AS qte_commandee"+...
    		"FROM ligne_commande_fournisseur lc"+...
    		" INNER JOIN commande_fournisseur c ON c.CommandeId = lc.CommandeId"+...
    		" INNER JOIN fournisseur f ON f.FournisseurId = c.FournisseurId"+...
    		" INNER JOIN materiel m ON lc.MaterielId = m.MaterielId"+... 
    		" WHERE lc.CommandeId ="+nNumCommande+""+...
    		") t1"+...
    		" LEFT OUTER JOIN"+...
    		" ("+...
    		" SELECT lr.MaterielId, lr.ReceptionQuantite FROM ligne_reception lr INNER JOIN reception r ON r.ReceptionId = lr.ReceptionId"+...
    		" WHERE r.CommandeId ="+nNumCommande+""+...
    		") t2 ON t2.MaterielId = t1.MaterielId"+...
    		" GROUP BY t1.CommandeId, t1.CommandeDate, t1.FournisseurId, t1.FournisseurNom, t1.MaterielId, t1.MaterielLibelle, t1.qte_commandee"+...
    		" HAVING t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) > 0 ","req1") 
    		SI gnMyRep ALORS
    			TANTQUE SQLFetch("req1")// Il y a encore une ligne à lire
    				CommandeId est un entier=SQLLitCol("req1", 1)
    				CommandeNo est une chaîne=SQLLitCol("req1", 2)
    				CommandeDate est une Date=SQLLitCol("req1", 3)
    				FournisseurId est un entier=SQLLitCol("req1", 4)
    				FournisseurNom est une chaîne=SQLLitCol("req1", 5)
    				MaterielId est un entier=SQLLitCol("req1", 6)
    				MaterielLibelle est une chaîne=SQLLitCol("req1", 7)
    				qte_commandee est un numérique=SQLLitCol("req1", 8)
    				reste_a_livrer est un numérique=SQLLitCol("req1", 9)
    				TableAjoute(TABLE_MaterielReception,CommandeId+TAB+CommandeNo+TAB+CommandeDate+TAB+FournisseurId+TAB+FournisseurNom+TAB+MaterielId+TAB+MaterielLibelle+TAB+qte_commandee+TAB+reste_a_livrer)
    			FIN
    		SINON
    			Info("erreur d'exécution de la reque"+Erreur(ErreurInfo()))
    		FIN 
    	SQLFerme("req1")
    	//HLitPremier(Req_Combo) 
    	//TANTQUE PAS HEnDehors(Req_Combo)
    		//TableAjoute(TABLE_MaterielReception,Req_Combo.CommandeId+TAB+Req_Combo.CommandeNo+TAB+Req_Combo.CommandeDate+TAB+Req_Combo.FournisseurId+TAB+Req_Combo.FournisseurNom+TAB+Req_Combo.MaterielId+TAB+Req_Combo.MaterielLibelle+TAB+Req_Combo.qte_commandee+TAB+Req_Combo.reste_a_livrer)
    		//HLitSuivant(Req_Combo) 
    	//FIN
    FIN
    ça ne me donne pas l'erreur et ça ne passe pas
    j'ai besoin de votre aide pour contourner ce problème

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 120
    Points : 9 533
    Points
    9 533
    Par défaut
    Option 1 : tu lis les réponses et les conseils qu'on te donne. Tu n'es pas obligé, mais souvent, ça t'aide à résoudre tes problèmes.
    Option 2 : tu regardes la documentation : https://doc.pcsoft.fr/fr-FR/?3072007&name=SQLExec et tu verras comment on fait pour récupérer le message d'erreur.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 251
    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 251
    Points : 12 903
    Points
    12 903
    Par défaut
    Tu as plusieurs problèmes ici:
    1. SqlAvance/SqlFetch renvoie un entier, pas un booléen
    2. Tu n'as pas corrigé les erreurs que je t'ai indiquées
    3. Tu n'utilises pas les bonnes fonctions pour récupérer l'erreur

    Tu devrais donc revoir l'aide en ligne de SqlExec, et revoir le code de ta requête, comme nous te l'avons conseillé.

    Tatayo.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 92
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup à vous, et mille fois merci. la methode de tbc92 marche parfaitement. ouaho soyez béni

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 92
    Points : 35
    Points
    35
    Par défaut
    le code qui marche
    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
    TableSupprimeTout(TABLE_MaterielReception)
    sReq est une chaine 
    nNumCommande est un entier=TABLE_Reception.COL_CommandeId
    Req_Combo est une Source de Données
    sreq = [
     SELECT t1.CommandeId CommandeId, t1.CommandeNo CommandeNo, t1.CommandeDate CommandeDate, t1.FournisseurId FournisseurId, t1.FournisseurNom FournisseurNom,
          t1.MaterielId MaterielId, t1.MaterielLibelle MaterielLibelle, t1.qte_commandee qte_commandee, t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) AS reste_a_livrer
    	 FROM
    	(
    	 SELECT lc.CommandeId , c.CommandeNo, lc.MaterielId, m.MaterielLibelle, c.FournisseurId, f.FournisseurNom, c.CommandeDate, 
    	 lc.Quantite AS qte_commandee
    	FROM ligne_commande_fournisseur lc
    	 INNER JOIN commande_fournisseur c ON c.CommandeId = lc.CommandeId
    	 INNER JOIN fournisseur f ON f.FournisseurId = c.FournisseurId
    	 INNER JOIN materiel m ON lc.MaterielId = m.MaterielId
    	 WHERE lc.CommandeId = %1  
    	) t1
    	LEFT OUTER JOIN
    	(
    	 SELECT lr.MaterielId, lr.ReceptionQuantite FROM ligne_reception lr INNER JOIN reception r ON r.ReceptionId = lr.ReceptionId
    	 WHERE r.CommandeId =  %1   
    	) t2 ON t2.MaterielId = t1.MaterielId
    	 GROUP BY t1.CommandeId, t1.CommandeDate, t1.FournisseurId, t1.FournisseurNom, t1.MaterielId, t1.MaterielLibelle, t1.qte_commandee
    	HAVING t1.qte_commandee - COALESCE(SUM(t2.ReceptionQuantite), 0) > 0 
    ]
    sreq = chaineconstruit( sreq, nNumCommande )
     
    versPressePapier(sreq)  //  pour copierColler la requete dans MySQL, pour la contrôler 
    info( sreq ) 
     
    SI PAS HExécuteRequêteSQL(Req_Combo, ConnexionMySQL, hRequêteSansCorrection,  sreq  ) ALORS 
    	erreur("Pb dans la requête"+HErreurInfo()) 
    	RETOUR 
    FIN 
    HLitPremier(Req_Combo) 
    TANTQUE PAS HEnDehors(Req_Combo)
            TableAjoute(TABLE_MaterielReception,Req_Combo.CommandeId+TAB+Req_Combo.CommandeNo+TAB+Req_Combo.CommandeDate+TAB+Req_Combo.FournisseurId
                 +TAB+Req_Combo.FournisseurNom+TAB+Req_Combo.MaterielId+TAB+Req_Combo.MaterielLibelle+TAB+Req_Combo.qte_commandee+TAB+Req_Combo.reste_a_livrer)
    	HLitSuivant(Req_Combo) 
    FIN
    Vous etes des génies j'en suis fiers

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

Discussions similaires

  1. [Toutes versions] Rechercher un mot incomplet dans le code SQL des requêtes.
    Par loufab dans le forum Contribuez
    Réponses: 8
    Dernier message: 20/02/2012, 11h53
  2. Erreur dans le code SQL de la requête
    Par FreeDo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/04/2011, 14h41
  3. [phpMyAdmin] erreur dans le code sql
    Par quomeiha dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/08/2010, 16h26
  4. [SQL] Erreur dans mon code de back office
    Par alainboiteau dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/06/2007, 11h03
  5. [SQL] erreur dans la requette SQL ou dans le code PHP
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 11/07/2006, 21h21

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