|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2006 Messages : 20 ![]() |
Bonjour,
Je suis relativement nouveau dans l'utilisation des bases de données (INTERBASE) et je suis confronté à un problème que je n'arrive pas à résoudre. 1) Dans un premier temps, je vous expose la structure de la base: 1-1) A partir des données du client (base ACCESS utilisée pour gérer des opérations d'usinage, des contrôles,... sur des jeux de pièces, au cours de campagnes d'usinage), j'ai importé 8 tables sous INTERBASE dont 2 nous intéressent: - table PSA_Piece (Clef prim.: PSA_NUMPIECEINTERNE, autre champ PJA_NUMJEU, ...). ->A partir d'un SELECT, je peux obtenir la liste des pièces du jeu NUMJEU ->pas de pb. - table SVP_VieDePiece (PSA_NUMPIECEINTERNE et SVJ_NUMCAMPAGNE forment la clef primaire, autre champ ...). -> A partir d'un INNER JOIN sur les 2 tables et d'un SELECT, Je peux obtenir la liste des pièces au cours d'une campagne d'usinage et d'obtenir le jeu lié impliqué ->pas de pb. 1-2) J'ai eu a créer (Ici, nouveau développement de ma part, uniquement sous INTERBASE) la possibilité de mémoriser des opérations liées à chaque pièce au cours d'une campagne d'usinage. Pour cela j'ai créé: 1-2-1) une table d'opérations (noté encore "évènements") EV_PALPRECTIFDENTS avec comme clef primaire IX_EVENT. J'ai également mis à l'intérieur les deux champ PSA_NUMPIECEINTERNE et SVJ_NUMCAMPAGNE. Ces derniers me permettent de faire la relation avec la table du client SVP_VieDePiece. Il y a un champ IX_NOMOPE qui permet de référencer le type d'opération lié et de nombreux autres champs qui sont remplis pour certain en fonction du type d'opération. 1-2-2) J'ai créé une table GESTION_NOMOPE qui permet de gérer les types d'opérations déclarées (Clef prim. IX_NOMOPE, autre champ NONOMOPE, ...). 1-3) Fonctionnement: Ainsi structurée, dans un SELECT avec des INNER JOIN sur les 4 tables, j'arrive a obtenir toutes les opérations (et leurs type) de toutes les pièces de chaque jeu pour une campagne donnée ->pas de pb. 2) La problématique: Mon client me demande d'obtenir un écran qui permette d'afficher à l'aide d'une ligne par pièce, des données liées à la pièce (ex: angle d'affûtage pris dans la table PSA_Piece) et d'autres liées à une opération de type 730 pris dans la table EV_PALPRECTIFDENTS, et d'autres liées à une opération de type 740, toujours pris dans la table EV_PALPRECTIFDENTS. 730 et 740 (exemples) sont des valeurs déclarées dans la table GESTION_NOMOPE, dans le champ NONOMOPE. La liaison entre les tables GESTION_NOMOPE et EV_PALPRECTIFDENTS se fait via IX_NOMOPE. Noter que le champ EV_PALPRECTIFDENTS.IX_NOMOPE n'est jamais NULL. Les champs de EV_PALPRECTIFDENTS à afficher en correlation avec GESTION_NOMOPE.NONOMOPE égal une certaine valeur (Ex: 730 ou 740) sont définis codés en dur. La question: Comment peut-on afficher sur une même ligne, dans des colonnes différentes, des données issues d'une même table, mais situées sur des lignes différentes? ->Reccréer une table à partir de requêtes? ->Utiliser GROUP BY sur les évènements pièce par pièce? Merci d'avance. Je suis preneur de tout aide à ce sujet! |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : janvier 2006 Messages : 20 ![]() |
Bonjour,
Je tiens à apporter une précision, j'utilise comme environnement de développement DELPHI XE. |
|
|
00
|
|
|
#3 | |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 211 ![]() |
Citation:
comme piste les JOIN , les CTE (Common Table Expression enfin si elles existent sous Interbase, j'ai laché Interbase pour Firebird depuis des années maintenant)
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
|
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : janvier 2006 Messages : 20 ![]() |
Merci pour l'info sur CTE, je vais commencer à regarder dans ce coté là, et merci encore pour la rapidité de la réponse.
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2006 Messages : 20 ![]() |
Bonjour,
Je voudrais donner la manière dont j'ai résolu mon problème. La problématique était "Comment peut-on afficher sur une même ligne, dans des colonnes différentes, des données issues d'une même table, mais situées sur des lignes différentes". Pour chaque donnée que je devais afficher sur une même ligne, j'ai créé un TIBQuery (T1, T2,...). Chaque requête liée me permet d'obtenir la ligne de la donnée concernée. J'ai également créé un TIBQuery récapitulatif Tg avec une requête générale Rg. Dans son éditeur de champ, j'ai créé des champs qui, par des LookupKeyField, ont reliés les T1, T2,... à la requête Rg, et le tour est joué! Une TDBGrid liée au Tg et j'affiche mes données en ligne. Cette astuce pourra peut-être aider quelqu'un, et si il y a une manière plus simple de résoudre le problème, je suis à l'écoute. |
|
|
00
|
|
|
#6 | ||
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 211 ![]() |
je pense que c'est une solution 'lourde' , je suis sur qu'une solution SQL est possible l'avantage évident étant que c'est interbase qui fait le travail de 'base' .
Il est évident (encore une fois) que la solution SQL est possible au vue de ta méthode mais Citation:
par exemple : Citation:
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com