locked
passage de fp6 a fp9 RRS feed

  • Question

  • Voici mon probleme : erreur 1807 sql group by clause is missing or invalid

    Quelqu'un aurait-il la solution de modification des group by clause dans fp9

    lundi 21 mai 2007 13:52

Réponses

Toutes les réponses

  • Bonjour,

     

    ce serait plus simple de te répondre si on avait la requète qui cause l'erreur, mais en gros:

    VFP9 est moins permissif que VFP6, et conforme à la norme SQL92., en particulier sur cette question des requètes avec des aggrégations (SUM, COUNT, etc..)

    Par conséquent, tous les champs figurant dans le SELECT doivent ou bien être aggrégés, ou bien être dans le GROUP BY. Si tu y réfléchis bien, c'est normal, le moteur de VFP ne peut pas savoir ce qu'il faut faire d'un champ dans le regroupement défini par le group by, si tu ne lui indiques pas.

    En VFP6, le moteur "présumait" que les champs qui n'étaient pas aggrégés et qui n'étaient pas groupés devaient avoir la même valeur pour tous les enregistrements du groupement, et il en prenait une (laquelle?)

    En VFP9, même si toi tu sais que le champ "Truc" a la même valeur pour tout le group by, tu dois le dire expressément avec par exemple un MAX(truc).

     

    Donc, il te faut réécrire cette requète, et vérifier toutes les requètes de l'application. Si tu ne veux pas le faire tout de suite, tu peux quand même émuler le fonctionnement de VFP6 dans VFP9 en lui mettant un SET ENGINEBEHAVIOR 70. Tu n'auras plus l'erreur, mais ta requète sera quand même incorrecte  

     

    lundi 21 mai 2007 17:31
  • Merci c'est déja un peu plus clair dans ma tête, comme vous me le demander je vous publie la partie qui pose probleme :

     

    erreur 1807 sql group by clause is missing or invalid

     

    SELECT hisdate, hisheure, hismilsec, histypm, SUM(hisqent) AS hisqent,;

    SUM(hisqsor) AS hisqsor, hisqsto, SUM(hisqcom) AS hisqcom, hisnbc, hisnbl, hisnfac, hislot ;

    FROM his WHERE hisart=lobroart ORDER BY hisdate DESC, hisheure DESC, hismilsec DESC ;

    GROUP BY histypm,hislot INTO CURSOR &loficreq

    mardi 22 mai 2007 08:46
  • Donc, dans ta requête, les résultats étant groupés sur histypm et hislot, tous les autres champs doivent être dans des fonctions d'aggrégation.

     

    SELECT ;

        max(hisdate) as ..., ;

        max(hisheure) as ..., , ;

        max(hismilsec) as ..., , ;

        histypm, ;

        SUM(hisqent) AS hisqent,;

        SUM(hisqsor) AS hisqsor, ;

        max(hisqsto) as ..., ;

        SUM(hisqcom) AS hisqcom, ;

        max(hisnbc) as ..., ;

        max(hisnbl) as ..., ;

        max(hisnfac) as ..., ;

        hislot ;

    FROM his ;

    WHERE hisart=lobroart ;

    ORDER BY hisdate DESC, hisheure DESC, hismilsec DESC ;

    GROUP BY histypm,hislot ;

    INTO CURSOR &loficreq

     

    Est-ce plus clair?

    mardi 22 mai 2007 12:17
  • Oui cela est plus clair... Merci pour le coup de pouce
    mardi 22 mai 2007 13:20