Programme personnel, problème de commande
-
samedi 22 janvier 2011 18:15
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.dbfCLOSE 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!
Toutes les réponses
-
samedi 22 janvier 2011 19:03
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
-
lundi 24 janvier 2011 14:54
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
cordialementFrancis
--------------------------------------------------------------------------------
VFP MVP

