Remplir 1 Stringgrid avec le resultat de plusieurs Adoquery

galabes Messages postés 3 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 21 novembre 2008 - 19 nov. 2008 à 19:58
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 - 12 déc. 2008 à 13:03
Bonjour à tous,

Je souhaite "synthetiser" le resultat de plusieurs Adoquery dans une stringgrid...
Je ne sais pas comment m'y prendre :
j'ai une table "tbarticle", une table "tbvente" et une "tbachat" (c'est simplifié evidemment, mais le probleme est le meme).

Champs table article :
Codearticle - Libelle - Unitecomptage - Prixachat - etc...

je fais 1 Adoquery pour mes achats, et 1 Adoquery pour mes ventes
Ma question : comment remplir une Stringgrid avec ces resultats, sachant que je veux ma correspondance code article / Info achats / Infos ventes ??
SOIT :
Codearticle - Ca Achats - Ca Ventes - etc...
ABC01       - 5000         - 8000        - etc...
etc...

Merci d'avance pour vos reponses...

5 réponses

beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
19 nov. 2008 à 22:00
bonsoir,

j'ai fait une petite base de test :
create table art (
  codart varchar(5),
  libart varchar(5),
  prxach integer,
  prxven integer
);

create table achat (
  codart varchar(5),
  qteach integer);

create table vente (
  codart varchar(5),
  qteven integer);

insert into art (codart,libart,prxach,prxven) values ('02art', 'art 2', 4, 13);
insert into art (codart,libart,prxach,prxven) values ('01art', 'art 1', 5, 15);
insert into art (codart,libart,prxach,prxven) values ('03art', 'art 3', 6, 25);

insert into achat (codart, qteach) values ('01art', 100);
insert into achat (codart, qteach) values ('01art', 100);
insert into achat (codart, qteach) values ('01art', 50);
insert into achat (codart, qteach) values ('01art', 75);
insert into achat (codart, qteach) values ('01art', 50);
insert into achat (codart, qteach) values ('02art', 10);
insert into achat (codart, qteach) values ('02art', 60);
insert into achat (codart, qteach) values ('03art', 55);
insert into achat (codart, qteach) values ('03art', 30);

insert into vente (codart, qteven) values ('01art', 15);
insert into vente (codart, qteven) values ('01art', 13);
insert into vente (codart, qteven) values ('01art', 10);
insert into vente (codart, qteven) values ('01art', 6);
insert into vente (codart, qteven) values ('02art', 14);
insert into vente (codart, qteven) values ('03art', 22);
insert into vente (codart, qteven) values ('03art', 4);

select a.codart, a.libart, sum(b.qteAch * a.prxach) CAAchat, sum(v.qteVen * a.Prxven) CAVente
from art a, achat b, vente v
where
v.Codart = a.Codart
and b.codart = a.Codart
group by a.codart, a.libart

ensuite, tu sélectionnes comme tu veux...
J'espère que cela te mets sur la voie.
Luc.
0
galabes Messages postés 3 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 21 novembre 2008
20 nov. 2008 à 10:52
Bonjour, Merci de vos reponses

Concernant mes tables : Db2 sur serveur I520...
J'utilise Adoconnection avec : IBM DB2 UDB For Iserie / IBMDA400 Ole Provider
Version :Delphi7

Mon probleme est que les tables sont assez nombreuses, donc c'est difficile de faire qu'une seule requete pour tout recuperer... je fais donc plusieurs requetes (obligé car en une seule requete je deviens fou...).

J'utilise un array dans lequel je mets tous mes articles, j'inscris mes codes articles dans la colonne 1 de ma stringgrid, et je boucle dessus avec des array qui contiennent les infos venant de mes differentes Adoquery...quand il y a correspondance, j'inscris l'info dans la bonne colonne de la ligne correspondante...

Je suis pas sur que ce soit le meilleur moyen d'y arriver ???
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 nov. 2008 à 16:57
C'est une piste comme une autre mais pour répondre correctement à ta question il faudrait disposer du modèle conceptuel des données de la base.

cantador
0
galabes Messages postés 3 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 21 novembre 2008
21 nov. 2008 à 09:48
Merci à tous,

Mais je vais me debrouiller comme indiqué plus haut (array et boucle)...ca fonctionne pas trop mal.
1 seule requete me parait pas faisable de toute façon....j'ai aussi besoin de ressortir les infos du stock et d'autres elements en fonction de date et de critères par options car plusieurs depots, c'est compliqué (enfin pour moi)

A tres bientot
0

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

Posez votre question
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 2
12 déc. 2008 à 13:03
Salut!

Je sais pas si tu as trouvé ta réponse, alors en voilà une (qui reprend la base de test de Beckerich):
select a.codart, a.libart,
(select sum(qteAch * prxach) from achat, art  where achat.Codart=art.Codart group by art.codart having art.Codart=a.codart) as Tot_Ach,
(select sum(qteVen * Prxven) from vente, art  where vente.Codart=art.Codart group by art.codart having art.Codart=a.codart) as Tot_Ven
from art a, achat b, vente v
where v.Codart = a.Codart
and b.codart = a.Codart
group by a.codart, a.libart

Il faut utiliser des requêtes imbriquées pour calculer indépendamment les valeurs calculées, pour éviter le pb du nbre d'enregistrements soulevé par Cantador.

L'avantage d'utiliser une requête unique, outre le fait de limiter les accès à la base, c'est que tu peux utiliser un DBGrid, quand même vachement + pratique que de se faire chier à coller toutes tes valeurs à la mano dans un StringGrid!

@+.
0
Rejoignez-nous