Demande d'aide

manita19 - 9 avril 2013 à 10:38
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 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

10 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
9 avril 2013 à 22:51
Bonsoir,

c'est juste un souci de modélisation des tables:
table du mobilier, table des types, table des styles, table des fournisseurs etc. etc.

après que du SQL.


cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
10 avril 2013 à 12:56
Bonjour à vous 2,

@Cantador :
tu sais comment on peut concaténer le résultat d'un select pour avoir un résultat comme "3 bureau 1560,1561,1563 mobilier" ?

@manita19 :
Attention... tu risque d'avoir en résultat :
Désignation n°_inventaire type
----------- ------------- ----
2 Bureau 1560,1561 mobilier
1 bureau 1563 mobilier
1 armoir 1562 mobilier
1 chaise 1780 mobilier
1 table 1890 mobilier


Simon
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
10 avril 2013 à 20:47
@simonpelloquin:

d'abord il faut compter : select count(*) from -------- Group by ---------- having
après c'est juste une mise en forme de l'information..

cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
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
0

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

Posez votre question
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
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
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
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
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
16 avril 2013 à 15:26
@solilog :
souci de hoquet..
et on fait des bis..
Qu'est ce que tu veux..
c'est la vieillesse..


cantador
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
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
0
j'utilise une base de données access et non paradox donc je ne vois pas comment je peux utiliser l'even OnCalcField?
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
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.

solilog
0
Rejoignez-nous