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 :

Exécution requête sql [WD19]


Sujet :

WinDev

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 324
    Points : 40
    Points
    40
    Par défaut Exécution requête sql
    Bonjour,

    Je rencontre une erreur lorsque j'exécute, une requête SQL:
    Mot ( inattendu

    Mais je ne vois pas où est mon erreur car mon code sql fonctionne dans SQL Management Studio.
    Voici mon code, pouvez-vous m'aider ?
    Merci d'avance.

    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
    sdReq est une Source de Données
    sMaReq est une chaîne
    sMaReq = "SELECT TOP (100) PERCENT dbo.INVENTTRANS.DATEPHYSICAL, dbo.INVENTTRANS.TRANSTYPE, dbo.INVENTTRANS.TRANSREFID, SUM(dbo.INVENTTRANS.QTY) AS la_somme_QTY, dbo.PRODTABLE.ITEMID, dbo.PRODTABLE.NAME, dbo.PRODROUTE.WRKCTRID, dbo.PRODROUTE.WRKCTRLOADPCT,dbo.PRODROUTE.WRKCTRNUMOF, dbo.PRODROUTE.SPL_QTYDEAL, dbo.PRODROUTE.SPL_UNITDEAL, dbo.PRODROUTE.SETUPTIME, dbo.PRODROUTE.TOHOURS,dbo.PRODROUTE.OPRPRIORITY, dbo.PRODROUTE.CALCPROC, dbo.PRODROUTE.CALCSETUP, dbo.WRKCTRTABLE.EFFECTIVITYPCT,dbo.INVENTTABLE.SPL_FAMILLENUMID, dbo.INVENTTABLE.SPL_SOUSFAMILLENUM, dbo.INVENTTABLEMODULE.UNITID,dbo.INVENTTABLEMODULE.MODULETYPE"+...
    "FROM dbo.PRODROUTE INNER JOIN dbo.PRODTABLE INNER JOIN dbo.INVENTTRANS ON dbo.PRODTABLE.PRODID = dbo.INVENTTRANS.TRANSREFID ON dbo.PRODROUTE.PRODID = dbo.PRODTABLE.PRODID INNER JOIN dbo.WRKCTRTABLE ON dbo.PRODROUTE.WRKCTRID = dbo.WRKCTRTABLE.WRKCTRID INNER JOIN dbo.INVENTTABLE ON dbo.INVENTTRANS.ITEMID = dbo.INVENTTABLE.ITEMID INNER JOIN dbo.INVENTTABLEMODULE ON dbo.INVENTTABLE.ITEMID = dbo.INVENTTABLEMODULE.ITEMID"+...
    "WHERE (dbo.INVENTTRANS.TRANSTYPE = 2) AND (dbo.INVENTTRANS.DATEPHYSICAL BETWEEN '01/09/2012' AND '31/08/2013') AND (dbo.PRODROUTE.OPRPRIORITY = 0)"+...
    "AND (dbo.PRODROUTE.WRKCTRID NOT IN ('MELANGES', 'Chaîne RTA', 'BUSS', 'MOD', 'SST', 'TAMBOUR250', 'TRIC12', 'TRIC19', 'SERTISSAGE', 'BLANC01','ARROSEURS'))"+...
    "GROUP BY dbo.INVENTTRANS.DATEPHYSICAL, dbo.INVENTTRANS.TRANSTYPE, dbo.INVENTTRANS.TRANSREFID, dbo.PRODTABLE.ITEMID, dbo.PRODTABLE.NAME,"+...
    "dbo.PRODROUTE.WRKCTRID,dbo.PRODROUTE.WRKCTRLOADPCT, dbo.PRODROUTE.WRKCTRNUMOF, dbo.PRODROUTE.SPL_QTYDEAL,"+...
    "dbo.PRODROUTE.SPL_UNITDEAL,dbo.PRODROUTE.SETUPTIME, dbo.PRODROUTE.TOHOURS, dbo.PRODROUTE.OPRPRIORITY, dbo.PRODROUTE.CALCPROC,"+...
    "dbo.PRODROUTE.CALCSETUP,dbo.WRKCTRTABLE.EFFECTIVITYPCT, dbo.INVENTTABLE.SPL_FAMILLENUMID, dbo.INVENTTABLE.SPL_SOUSFAMILLENUM,"+...
    "dbo.INVENTTABLEMODULE.UNITID, dbo.INVENTTABLEMODULE.MODULETYPE"+...
    "HAVING (dbo.INVENTTABLEMODULE.MODULETYPE = 0) ORDER BY dbo.INVENTTRANS.DATEPHYSICAL, dbo.INVENTTRANS.TRANSREFID"
     
    SI PAS HExécuteRequêteSQL(sdReq, hRequêteDéfaut, sMaReq) ALORS
    	Erreur(HErreurInfo())
    SINON
    	//HExécuteRequêteSQL(sdReq,sMaReq)
    	HLitPremier(sdReq)
            Code...
    FIN

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Pourquoi TOP (100) et pas TOP 100 ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 324
    Points : 40
    Points
    40
    Par défaut
    J'ai fait un peu de ménage dans 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
    sMaReq = "SELECT TOP 100 PERCENT INVENTTRANS.DATEPHYSICAL,INVENTTRANS.TRANSTYPE,INVENTTRANS.TRANSREFID, SUM(INVENTTRANS.QTY) AS la_somme_QTY, PRODTABLE.ITEMID, PRODTABLE.NAME, PRODROUTE.WRKCTRID,PRODROUTE.WRKCTRLOADPCT,PRODROUTE.WRKCTRNUMOF, PRODROUTE.SPL_QTYDEAL, PRODROUTE.SPL_UNITDEAL, PRODROUTE.SETUPTIME, PRODROUTE.TOHOURS,PRODROUTE.OPRPRIORITY, PRODROUTE.CALCPROC, PRODROUTE.CALCSETUP, WRKCTRTABLE.EFFECTIVITYPCT,INVENTTABLE.SPL_FAMILLENUMID, INVENTTABLE.SPL_SOUSFAMILLENUM, INVENTTABLEMODULE.UNITID,INVENTTABLEMODULE.MODULETYPE "+...
    "FROM PRODROUTE INNER JOIN PRODTABLE INNER JOIN INVENTTRANS "+...
    "ON PRODTABLE.PRODID = INVENTTRANS.TRANSREFID "+...
    "ON PRODROUTE.PRODID = PRODTABLE.PRODID INNER JOIN WRKCTRTABLE "+...
    "ON PRODROUTE.WRKCTRID = WRKCTRTABLE.WRKCTRID INNER JOIN INVENTTABLE "+...
    "ON INVENTTRANS.ITEMID = INVENTTABLE.ITEMID INNER JOIN INVENTTABLEMODULE "+...
    "ON INVENTTABLE.ITEMID = INVENTTABLEMODULE.ITEMID"+...
    "WHERE INVENTTRANS.TRANSTYPE = 2 "+...
    "AND INVENTTRANS.DATEPHYSICAL BETWEEN '01/09/2012' AND '31/08/2013' "+...
    "AND PRODROUTE.OPRPRIORITY = 0 "+...
    "AND PRODROUTE.WRKCTRID NOT IN ('MELANGES', 'Chaîne RTA', 'BUSS', 'MOD', 'SST', 'TAMBOUR250', 'TRIC12', 'TRIC19', 'SERTISSAGE', 'BLANC01','ARROSEURS') "+...
    "GROUP BY INVENTTRANS.DATEPHYSICAL, INVENTTRANS.TRANSTYPE, INVENTTRANS.TRANSREFID, PRODTABLE.ITEMID, PRODTABLE.NAME,PRODROUTE.WRKCTRID,PRODROUTE.WRKCTRLOADPCT, PRODROUTE.WRKCTRNUMOF, PRODROUTE.SPL_QTYDEAL,PRODROUTE.SPL_UNITDEAL,PRODROUTE.SETUPTIME, PRODROUTE.TOHOURS, PRODROUTE.OPRPRIORITY, PRODROUTE.CALCPROC,PRODROUTE.CALCSETUP,WRKCTRTABLE.EFFECTIVITYPCT, INVENTTABLE.SPL_FAMILLENUMID, INVENTTABLE.SPL_SOUSFAMILLENUM,INVENTTABLEMODULE.UNITID, INVENTTABLEMODULE.MODULETYPE "+...
    "HAVING INVENTTABLEMODULE.MODULETYPE = 0 "+...
    "ORDER BY INVENTTRANS.DATEPHYSICAL, INVENTTRANS.TRANSREFID"

    Par contre maintenant j'ai une nouvelle erreur: Mot INVENTTRANS inattendu.

    Je ne trouve pas où est le problème...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut
    C'est le INNER JOIN sur PRODTABLE qui n'a pas de ON

    Citation Envoyé par mimi1255 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sMaReq = "SELECT TOP 100 PERCENT INVENTTRANS.DATEPHYSICAL,INVENTTRANS.TRANSTYPE,INVENTTRANS.TRANSREFID, SUM(INVENTTRANS.QTY) AS la_somme_QTY, PRODTABLE.ITEMID, PRODTABLE.NAME, PRODROUTE.WRKCTRID,PRODROUTE.WRKCTRLOADPCT,PRODROUTE.WRKCTRNUMOF, PRODROUTE.SPL_QTYDEAL, PRODROUTE.SPL_UNITDEAL, PRODROUTE.SETUPTIME, PRODROUTE.TOHOURS,PRODROUTE.OPRPRIORITY, PRODROUTE.CALCPROC, PRODROUTE.CALCSETUP, WRKCTRTABLE.EFFECTIVITYPCT,INVENTTABLE.SPL_FAMILLENUMID, INVENTTABLE.SPL_SOUSFAMILLENUM, INVENTTABLEMODULE.UNITID,INVENTTABLEMODULE.MODULETYPE "+...
    "FROM PRODROUTE INNER JOIN PRODTABLE INNER JOIN INVENTTRANS "+...

    Par contre maintenant j'ai une nouvelle erreur: Mot INVENTTRANS inattendu.

    Je ne trouve pas où est le problème...

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je pense que les jointures sont incorrectes:
    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
     
    SELECT TOP 100 PERCENT INVENTTRANS.DATEPHYSICAL,INVENTTRANS.TRANSTYPE,INVENTTRANS.TRANSREFID, SUM(INVENTTRANS.QTY) AS la_somme_QTY, PRODTABLE.ITEMID, PRODTABLE.NAME, PRODROUTE.WRKCTRID,PRODROUTE.WRKCTRLOADPCT,PRODROUTE.WRKCTRNUMOF, PRODROUTE.SPL_QTYDEAL, PRODROUTE.SPL_UNITDEAL, PRODROUTE.SETUPTIME, PRODROUTE.TOHOURS,PRODROUTE.OPRPRIORITY, PRODROUTE.CALCPROC, PRODROUTE.CALCSETUP, WRKCTRTABLE.EFFECTIVITYPCT,INVENTTABLE.SPL_FAMILLENUMID, INVENTTABLE.SPL_SOUSFAMILLENUM, INVENTTABLEMODULE.UNITID,INVENTTABLEMODULE.MODULETYPE 
    FROM PRODROUTE 
    INNER JOIN PRODTABLE ON PRODROUTE.PRODID = PRODTABLE.PRODID <= la condition de jointure était mal placée
    INNER JOIN INVENTTRANS  ON PRODTABLE.PRODID = INVENTTRANS.TRANSREFID 
    INNER JOIN WRKCTRTABLE ON PRODROUTE.WRKCTRID = WRKCTRTABLE.WRKCTRID
    INNER JOIN INVENTTABLE ON INVENTTRANS.ITEMID = INVENTTABLE.ITEMID
    INNER JOIN INVENTTABLEMODULE ON INVENTTABLE.ITEMID = INVENTTABLEMODULE.ITEMID
    WHERE INVENTTRANS.TRANSTYPE = 2 
    AND INVENTTRANS.DATEPHYSICAL BETWEEN '01/09/2012' AND '31/08/2013' 
    AND PRODROUTE.OPRPRIORITY = 0 
    AND PRODROUTE.WRKCTRID NOT IN ('MELANGES', 'Chaîne RTA', 'BUSS', 'MOD', 'SST', 'TAMBOUR250', 'TRIC12', 'TRIC19', 'SERTISSAGE', 'BLANC01','ARROSEURS') 
    GROUP BY INVENTTRANS.DATEPHYSICAL, INVENTTRANS.TRANSTYPE, INVENTTRANS.TRANSREFID, PRODTABLE.ITEMID, PRODTABLE.NAME,PRODROUTE.WRKCTRID,PRODROUTE.WRKCTRLOADPCT, PRODROUTE.WRKCTRNUMOF, PRODROUTE.SPL_QTYDEAL,PRODROUTE.SPL_UNITDEAL,PRODROUTE.SETUPTIME, PRODROUTE.TOHOURS, PRODROUTE.OPRPRIORITY, PRODROUTE.CALCPROC,PRODROUTE.CALCSETUP,WRKCTRTABLE.EFFECTIVITYPCT, INVENTTABLE.SPL_FAMILLENUMID, INVENTTABLE.SPL_SOUSFAMILLENUM,INVENTTABLEMODULE.UNITID, INVENTTABLEMODULE.MODULETYPE 
    HAVING INVENTTABLEMODULE.MODULETYPE = 0 
    ORDER BY INVENTTRANS.DATEPHYSICAL, INVENTTRANS.TRANSREFID

    Tatayo.

    P.S. avec la balise SQL, c'est plus lisible.
    Je pense aussi que tu devrais utiliser les chaines multilignes dans ton code (avec [ et ] ), c'est plus lisible et plus maintenable.

    edit: et je me suis fait grillé...

  6. #6
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 324
    Points : 40
    Points
    40
    Par défaut
    Je ne comprends pas, si j'utilise cette requête directement dans SQL Management Studio, ça fonctionne:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FROM         dbo.PRODROUTE INNER JOIN
                          dbo.PRODTABLE INNER JOIN
                          dbo.INVENTTRANS ON dbo.PRODTABLE.PRODID = dbo.INVENTTRANS.TRANSREFID ON dbo.PRODROUTE.PRODID = dbo.PRODTABLE.PRODID INNER JOIN
                          dbo.WRKCTRTABLE ON dbo.PRODROUTE.WRKCTRID = dbo.WRKCTRTABLE.WRKCTRID INNER JOIN
                          dbo.INVENTTABLE ON dbo.INVENTTRANS.ITEMID = dbo.INVENTTABLE.ITEMID INNER JOIN
                          dbo.INVENTTABLEMODULE ON dbo.INVENTTABLE.ITEMID = dbo.INVENTTABLEMODULE.ITEMID

    J'ai bien deux INNER JOIN qui se suivent, dans ce cas où dois-je placer mon ON ?
    Je ne suis pas très fort en SQL.

    Merci encore.

  7. #7
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 324
    Points : 40
    Points
    40
    Par défaut
    Désolé je n'avais pas vu entre temps la réponse de tatayo.
    J'ai donc repris le code tatayo.
    Mais j'ai à nouveau une autre erreur SQL:

    Erreur de l'accès natif SQLSESRVER
    Numéro d'erreur = 117
    SQL Server a renvoyé l'erreur 80040e21
    Description: Valeur de caractère non valide pour la spécification de la casse
    SQL State: 22018
    SQL Error Number: 0
    Avez-vous une idée de l'origine du problème ?
    ça correspondrait à cela, mais où est le problème dans le code ? http://www.sqlerror.de/db2_sql_error...ate_22018.html

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Peut-être un problème dans le format de la date ?
    Sinon le plus simple est de supprimer toutes les conditions, puis de les ajouter une par une jusqu'à avoir l'erreur.
    Ainsi tu sauras où se trouve le problème.
    Si la requête prends trop de temps, un EXPLAIN permet de n'avoir que le plan d'exécution, mais la syntaxe est tout de même vérifiée.

    Tatayo.

  9. #9
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 324
    Points : 40
    Points
    40
    Par défaut
    En effet il s'agît bien d'un problème de format de date.
    Dernière question, si dans ma requete je souhaite que mes dates soient des paramètres, comment puis-je faire ?

    Encore merci.

  10. #10
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 324
    Points : 40
    Points
    40
    Par défaut
    J'ai trouvé la réponse à ma question, merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "AND INVENTTRANS.DATEPHYSICAL BETWEEN "+SAI_Date_de_début+" AND "+SAI_Date_de_fin+" "+...

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Pour rendre ton code un peu plus lisible, tu peux aussi utiliser ChaineConstruit().

    Tatayo.

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

Discussions similaires

  1. exécuter requête sql en tâche planifiée
    Par paupiau dans le forum Développement
    Réponses: 2
    Dernier message: 20/03/2008, 16h34
  2. Exécution requête SQL
    Par ekke dans le forum VB.NET
    Réponses: 2
    Dernier message: 08/02/2008, 15h30
  3. [Requête] Exécution requête SQL.
    Par ptisinge dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/10/2006, 08h17
  4. Exécution requête SQL + easyphp1.8
    Par Chengj dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2006, 16h39
  5. Réponses: 2
    Dernier message: 04/04/2006, 11h46

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