IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Jointure 1,N - 1,N


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 190
    Points : 112
    Points
    112
    Par défaut Jointure 1,N - 1,N
    --------------------------------------------------------------------------

    Bonjour à tous.

    Dans un sous système de gestion de scolarité j'ai, pour simplifier, trois tables:
    * spécialité
    Code_sp (Clé primaire)
    Lib_Sp
    * Matière
    Code_Mat (Clé primaire)
    Lib_Mat
    * Avoir
    Code_Sp (Clé externe)
    Code_Mat (Clé externe)
    Coefficient
    La table "spécialité" regroupe toutes les spécialités enseignées, la table "matière" contient également toutes les matières enseignées dans les différentes spécialités. La table "Avoir" définit pour chaque spécialité, les coefficients des matières enseignés dans cette spécialité.
    A préciser que dans une spécialité, plusieurs matières sont enseignées, et qu'une matière peut être enseignée dans plusieurs spécialités.

    Mon but est de consulter sur la même form :
    * La liste des spécialités sur un DBGrid
    * La liste des matières sur un deuxième DBGrid
    mais je voudrai ne voir afficher sur le deuxième DBGrid que les matières qui correspondent à la spécialité sélectionnée sur le premier DBGrid et qu'à chaque fois que je déplace le curseur (pointeur d'enregistrement du 1er DBGrid) d'une spécialité à une autre, les matières qui s'affichent sur le 2ème DBGrid doivent suivre les modifications

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Faut faire un maître-détail.
    La 2ième query doit avoir un critère sur un paramètre de la 1ière.
    Le 2ième datasource doit être relier à la 1ière query.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 190
    Points : 112
    Points
    112
    Par défaut
    Veuillez m'excuser mais je n'ai pas bien saisi l'idée des deux query. (je ne suis pas un pro de delphi).
    Que doivent contenir les deux query comme requêtes?

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Quelque chose comme ça :

    Query 1
    select * from specialite
    datasource 1 (relié à query 1)
    dbgrid 1 (relié au datasource 1)

    Query 2 (relié au datasource 1)
    select * from matiere, avoir
    where matiere.Code_Mat = avoir.Code_Mat
    and Code_Sp = :Code_Sp
    datasource 2 (relié à query 2)
    dbgrid 2 (relié au datasource 2)
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 190
    Points : 112
    Points
    112
    Par défaut
    Peut être que j'abuse, mais ça ne fonctionne toujours pas.

  6. #6
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    Il te faut une troisième table à utiliser comme intermédière entre la table "specialite" et la table "matiere"; elle seras une table détail par rapport a la table "specialite" qui seras la table maitre.

    Cette table auras une structure comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nom de la table : Table_Spe_Mat.
    code_table : integer ou autoincremente.
    code_sp     : cle de la table specialite/integer
    code_mat   :cle de la table matiere/integer
    Donc pour chaque "specialite" tu doit créer dans cette table détail un ou plusieurs enregistrements qui correspendrons aux matières enseignées dans cette spécialté.
    A partir de la tu crée une requette ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TM.Lib_Mat
    FROM Table_Spe_Mat TSM, Table_Matiere TM
    WHERE (TSM.Code_Mat=TM.Code_Mat AND TSM.code_sp=:code_sp)
    Cette requette (TQUERY) sera relié a la table "Specialite" par sa propriété "DataSource" et au DBGrid par un composant "DataSource".
    ....................................................................
    Aidez-vous... Dieu vous aideras et nous aussi..
    ....................................................................

  7. #7
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 190
    Points : 112
    Points
    112
    Par défaut
    Bonjour à tous.
    Je vous remercie infiniment BEJAIA-IN, vous êtes un génie. ça marche très bien sauf qu'il fallait ajouter un DISTINCT avant "TM.Lib_Mat". Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pb jointure texture
    Par dweis dans le forum DirectX
    Réponses: 2
    Dernier message: 24/06/2003, 13h33
  2. Jointures en SQL
    Par Guizz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/06/2003, 12h21
  3. Réponses: 14
    Dernier message: 17/03/2003, 18h31
  4. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 10h29
  5. jointure renvois pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/08/2002, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo