manita19
-
9 avril 2013 à 10:38
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 2015
-
21 avril 2013 à 14:02
bonjour,
voila je suis débutante en delphi voici mon probleme
j'ai une table Produit, voila un exemple:
N°_inventaire Désignation Type ....
------------- ----------- ---- ------
1560 Bureau mobilier
1561 Bureau mobilier
1562 Armoire mobilier
1563 bureau mobilier
1780 chaise mobilier
1890 table mobilier
je veux avoir ça:
Désignation n°_inventaire type
----------- ------------- ----
3 bureau 1560,1561,1563 mobilier
1 armoir 1562 mobilier
1 chaise 1780 mobilier
1 table 1890 mobilier
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 11 avril 2013 à 09:29
@Cantador :
On est d'accord, mais la mise en forme de l'information dont tu parles, sais-tu si on peut la faire directement en SQL ou cela doit il faire l'objet d'un traitement Delphi ?
Simon
Vous n’avez pas trouvé la réponse que vous recherchez ?
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 12 avril 2013 à 22:53
Bonsoir,
Il n'a pas de fonction SQL simple pour contaténer des records, car pas recursif, par contre tu peux faire par ex avec 2 query et 1 datasource: qry1 => ds1 et qry2
qry1: (comme le disait cantador)
select count(*), Désignation, type from produit
group by type, Désignation
order by type, Désignation
et tu ajoutes à qry1 un champ calculé "LesProd" : string et dans l'even OnCalcField;
va balayer tous les produits de type et design de qry1, et tu charges ton champ LesProd
qry2:
qry2.datatsourse = ds1 pour "filtrer" designation et type
select designation, type, n_inventaire from produit
where and type:type and designation :Designation
order by type, n_designation, n_inventaire
procedure qryCalcFields(DataSet: TDataSet)
var vProd : string;
begin
vProd:='';
qry2.close; qry2.open; qry2.first;
while not qry2.eof do begin
vProd := vProd + qry2.fieldbyname('n_inventaire').asstring + ' ';
qry2.next;
end;
LesProd.asstring := vProd; // et tu renseignes tu champ calculé
end;
et tu auras tous les n_Inventaire dans le champs LesProd. Je viens d'essayer avec mes tables.
Salut
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 12 avril 2013 à 22:53
Bonsoir,
Il n'a pas de fonction SQL simple pour contaténer des records, car pas recursif, par contre tu peux faire par ex avec 2 query et 1 datasource: qry1 => ds1 et qry2
qry1: (comme le disait cantador)
select count(*), Désignation, type from produit
group by type, Désignation
order by type, Désignation
et tu ajoutes à qry1 un champ calculé "LesProd" : string et dans l'even OnCalcField;
va balayer tous les produits de type et design de qry1, et tu charges ton champ LesProd
qry2:
qry2.datatsourse = ds1 pour "filtrer" designation et type
select designation, type, n_inventaire from produit
where and type:type and designation :Designation
order by type, n_designation, n_inventaire
procedure qryCalcFields(DataSet: TDataSet)
var vProd : string;
begin
vProd:='';
qry2.close; qry2.open; qry2.first;
while not qry2.eof do begin
vProd := vProd + qry2.fieldbyname('n_inventaire').asstring + ' ';
qry2.next;
end;
LesProd.asstring := vProd; // et tu renseignes tu champ calculé
end;
et tu auras tous les n_Inventaire dans le champs LesProd. Je viens d'essayer avec mes tables.
Salut
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 16 avril 2013 à 16:19
Bonjour,
Non, je ne suis pas encore trop vieux (bientot), c'est ma session a planté pendant que je clickait sur "envoyer" et le resultat c'est 2 messages. Pas grave. Il a sa reponse, il aura dans un champ les ref de ses produits.
Bonne fin de journee.
solilog
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 21 avril 2013 à 14:02
Bjr,
Oncalcfield ne dépend ni d'AXS ni de Pdx, c'est un évènement de ton dataset (tQuery, tTable, ...) donc de delphi. Reprenons depuis le début:
- tu crées qry1 idem expliqué précéd et un datasource (ds1) dessus;
- dbl click sur qry1, puis click droit dans la fenêtre, charger tous les champs, re click droit sur la fenêtre, puis ajouter un champ, nom LesProd, type string, mode calculé. Ce nouveau champ LesProd qui n'existe pas dans la table d'origine sera calculé (donc renseigné) par une proc OnCalcField qui tu vas écrire).
- sur qry1, F11 pour les propriété, onglet évenements, cherche OncalcField, dbl click desssus et là tu copie/paste mon exemple OnCalcfield.
Plus que çà, je ne peux pas.
Bonne journée manita19.