Adoquery et avec un COUNT + GROUP BY

korichitarek Messages postés 37 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 14 novembre 2016 - 15 avril 2007 à 19:27
cs_Toukal Messages postés 2 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 31 décembre 2010 - 31 déc. 2010 à 09:08
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>
 





Bonjour tout le monde  j’ai un probleme serieux?????






 






Lorsque  je lance l’execution de la requete ADOQuery1 à partir d’un bouton et cela pour calculer le nombre ,sachant que :






 -- la table1 est une table access ;






      -- les propriètes de ADOQuery1 :







  
        - cursor location

 : clUseServer







           - cursor type

 : ctKeyset







           - lock type

: ltOptimistic







           - sql

:  SELECT x,y,COUNT( * ) as nombre






       
             
 FROM TABLE1






        
            GROUP BY x,y






        
            ORDER BY x,y






 






procedure FORM1.Button1Click(Sender: TObject);





BEGIN






       ADOQuery1.Active :=false;






       ADOQuery1.SQL.Clear;






       ADOQuery1.SQL.Add('select x,y,COUNT( * ) as nombre');






       ADOQuery1.SQL.Add('from TABLE1);






       ADOQuery1.SQL.Add('GROUP BY x,y');






     
 ADOQuery1.SQL.Add('ORDER BY x,y');






    
 ADOQuery1.Active :=true;





END ;






 








un message d’erreur qui s’affiche :





---------------------------



Notification d'une exception du débogueur




---------------------------



"Le projet projet.exe a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse 1B041FC6 dans le module 'msjet40.dll'. Lecture de l'adresse 0003242E'.  Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer."






 








N.B


 :

 Tout va bien lorsque s’il s’ agit de l’execution lors de la conception de  la FORM1 (c-à-d lors de l’affectation du valeur TRUE à la propriété ACTIVE de  ADOQuery1 car le sql est définit dans la propriété SQL de la requete  -le meme SQL-)






 





----

9 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 avril 2007 à 22:39
et la connection à la base ?
0
korichitarek Messages postés 37 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 14 novembre 2016
17 avril 2007 à 12:26
Merci de me repondre;
 mais je vous confirme que tous les proprietées nécessaire  sont faite dans l'inspecteur d'objet de adoquery y compris la connection à la base access, en plus de ça je vous ai spécifier dans N.B que Tout va bien lorsque s'il s' agit de l'execution de la requete lors de la conception de  la FORM1 (c-à-d lors de l'affectation du valeur TRUE à la propriété ACTIVE de  ADOQuery1 car le sql est définit dans la propriété SQL de la requete  -le meme SQL-)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

  et le resultat de la requete s'affiche sur le dbgrid comme je le veux ,pas d'erreur;

donc d'apres mon analyse tout est bon coté delphi je pense que le pbm coté acces ???
je ne sais pas .

l'essentiel pour moi je veux executer une requete adoquery qui contient un GROUP BY ,biensur pour béneficier des fonctions d'agregat comme sum,count .

cordial
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
20 avril 2007 à 19:59
oui korichitarek, mais tu ne réponds à ma question..
il faut à un moment :

ADOConnection1.Connected := false;
ADOConnection1.Connected := true;
0
korichitarek Messages postés 37 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 14 novembre 2016
21 avril 2007 à 10:23
merci bien de me repondre ;

mais c pas la premiere fois que j'execute un adoquery et j'ai jamais je touche à  la connection par :
 ADOConnection1.Connected := false;
ADOConnection1.Connected := true

il suffit que dés le debut dans l'inspecteur d'objet de la  ADOConnection1 spécifier la propriétée connection à true et tout va bien pour adoquery ;

l'essentiel je vais essayer ta ideé et ensuite je te répond ?????
 cordial
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 avril 2007 à 13:28
ben oui bien sûr çà marche, mais on doit éviter autant que faire se peut de forcer des propriétés par défaut.

Tout doit être mis dans le code !
Ainsi celui qui lit ton source n'a pas à savoir si tu as des true ou des false ici ou là..

sinon il faut lire à deux endroits pour comprendre !

Cela dit, ce n'est peut-être pas la cause du message..

A bientôt
0
korichitarek Messages postés 37 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 14 novembre 2016
21 avril 2007 à 16:50
Voila Monsieur;


j'ai essayer :
ADOConnection1.Connected := false;
ADOConnection1.Connected := true;
comme t'as dit mais toujours le meme pbm;

soyez sur q c pas la premier fois q j'execute un adoquery



une petite remarque ça peut t'aider à m'aider :

lorsque j'enleve le "COUNT( * ) as nombre" de mon sql  malgré je laisse le "GROUP BY x,y", resulat est bonne et  s'affiche bien sur le DBGRID avec le regroupement par le champ x et y , mais lorsque j'ajoute le COUNT le pbm intervient. avec le meme message.
je pense q le pbm a un lien avec
    - les fonction d'agrégat comme SUM,COUNT etc... dans ADOQUERY el moteur jet de ACCESS...


l'essentiel essaye un petit exemple avec un ADOQUERY, ACCESS   et COUNT et tu viras ?
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 avril 2007 à 19:04
je ne mets pas en cause tes compétences korichitarek mais si tu poses une question
c'est que tu as bien un souci que tu n'as pas résolu..
on en est tous là figure toi..
Moi aussi il m'arrive de buter sur des trucs élémentaires et je pose aussi des questions de temps en temps sur le forum..
c'est normal et en plus c'est fait pour çà le forum !

pour ma part :
Ta requête est correcte et fonctionne..Je l'ai testée avec SQL manager..
Mais c'est vrai que le SQL avec ADO n'est pas le même..
Mais je pense que l'os est ailleurs..

une autre piste :
vérifie quels champs sont stockés dans ton query et dans le DBGrid

@+
0
korichitarek Messages postés 37 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 14 novembre 2016
26 avril 2007 à 17:15
les champs sont corrects est bien puisque je vous ai dit avant  que Tout va bien lorsque s'il s' agit de l'execution de la requete lors de la conception de  la FORM1  et tout s'affiche dans l'ordre sur le dbgrid

cordial
0
cs_Toukal Messages postés 2 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 31 décembre 2010
31 déc. 2010 à 09:08
Essayes ceci:
ADOQuery1:=TADOQuery.Create(Application);
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select x,y,COUNT( * ) as nombre');
ADOQuery1.SQL.Add('from TABLE1);
ADOQuery1.SQL.Add('GROUP BY x,y');
ADOQuery1.SQL.Add('ORDER BY x,y');
cursor type : ctKeyset
lock type : ltOptimistic
Connection:=ADOConnection1;
ADOQuery1.Active :=true;
END ; Toukal
0
Rejoignez-nous