locked
Programme personnel, problème de commande

    Question

  • Bonjour à tous,

    Un ancien collègue de travail avait créé un programme qui généraient à partir de fox pro, plusieurs table à partir d'une seule. Le programme fonctionne à merveille dans VFP 5.0. J'essaie d'exécuter le programme dans VFP 9.0 et il me génèrent une erreur sur la commande GROUP BY.

    Voici le programme :

                data = "Chemin vers le fichier source"
               
                CLOSE ALL DATABASES

                SET DELETE ON
                SET CENTURY ON
                SET SAFETY OFF

    *!*                SET DEFAULT TO &data

       
                SELECT 1
                USE &data\invti.dbf
                REPLACE ALL cle WITH aire_com + saison + no_ue + no_pe
               
           
                SELECT aire_com, saison, no_ue, dec,;
                  nom, code_trait, source, code_benef,;
                  code_verif, code_emart, code_eexpl, etape,;
                  tag_transf, date_cree, date_modif, superf;
                 FROM invti;
                 GROUP BY aire_com, saison, no_ue;
                 ORDER BY aire_com, saison, no_ue;
                 INTO TABLE &data/ue_micro.dbf

                 CLOSE ALL DATABASES

     

    J'ai tronqué le programme puisque les commandes étaient redondante.

     

    Si vous avez une idée de ce que je peux apporté comme modifications, je suis toute "ouïe"!

     

    Merci à l'avance!

     

     

    samedi 22 janvier 2011 18:15

Toutes les réponses

  • Jette un coup d'oeil au help de VFP9 au sujet de GROUP BY. Ca a change depuis VFP5. Il te faut mentionner tous les field, a part les "aggregate" comme SUM(fld), CNT(fld) etc. dans la clause GROUP BY.

    Ca fera ceci:

    ... GROUP BY  aire_com, saison, no_ue, dec,;
                  nom, code_trait, source, code_benef,;
                  code_verif, code_emart, code_eexpl, etape,;
                  tag_transf, date_cree, date_modif, superf;

    Tu pourrais aussi eviter cela en changeant SET Enginebehavior. Tu le met a 70 et ta query devrait marcher, mais il parait que cela peut te ramener de faux resultats. Je ne sais pas exactemant quels faux resultats, donc moi j'essaie d'eviter de changer le comportement du moteur (in english: enginebehavior :-) )


    Marcel
    • Proposé comme réponse Francis Faure lundi 24 janvier 2011 14:54
    samedi 22 janvier 2011 19:03
  • Bonjour Bamizas,

    Je pense que Marcel a raison :

    soit tu rajoutes :

     SET ENGINEBEHAVIOR 70
     

    au début de ton code
     

    soit tu est en

     SET ENGINEBEHAVIOR 90
     

    et tu met tous les champs dans ton group by (excepté les "aggrégations")


    donc dans ton exemple  :

     
    SELECT aire_com, saison, no_ue, dec, nom, code_trait, source, code_benef, code_verif, code_emart, code_eexpl, etape, tag_transf, date_cree, date_modif, superf;
    FROM invti;
    GROUP BY aire_com, saison, no_ue, dec, nom, code_trait, source, code_benef, code_verif, code_emart, code_eexpl, etape, tag_transf, date_cree, date_modif, superf;
    ORDER BY aire_com, saison, no_ue
     

    c'est juste une question de changement de norme


    cordialement

    Francis


    --------------------------------------------------------------------------------
    VFP MVP

    lundi 24 janvier 2011 14:54