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 :

Requête SQL : Jointure sur 3 tables - Bd Access 1997 & Delphi 7


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut Requête SQL : Jointure sur 3 tables - Bd Access 1997 & Delphi 7
    Je souhaite créer une requette sur 3 tables qui se trouvent dans la même base de données (fichier .mdb MS Access 97).
    Je me suis amusé à créer ce petit desin pour faciliter la comprehention des index ....:


    Cette requette (réduite pour faciliter la compréhention du problème)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AdoQuery1.SQL.Clear;
    AdoQuery1.SQL.Add('SELECT * FROM DOSSIER ');
    AdoQuery1.SQL.Add('INNER JOIN LOGEMENT ON LOGEMENT.LGT_ID = DOSSIER.LGT_ID');
    AdoQuery1.SQL.Add('INNER JOIN SUPPORT ON  SUPPORT.SUP_ID = DOSSIER.SUP_ID');
    provoque une Erreur disant :
    Le Projet testprogram.exe a provoque une classe d'exception EOleException avec le message 'Erreur de syntaxe (opérateur absent) dans l'expression 'LOGEMENT.LGT_ID=DOSSIER.LGT_ID
    INNER JOIN SUPPORT ON SUPPORT.SUP_ID=DOSSIER.SUP_ID". Processus stoppé. Utilisez Pas-à-pas ou Excécuter pour continuer.
    Ma question comment doit je formuler la requette pour liéer les enregistrements des trois tables.

    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Pour le moment j'ai réussi à faire tourner mon programme avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        AdoQuery1.SQL.Clear;
        AdoQuery1.SQL.Add('SELECT D.DOS_ID, D.DOS_EMPR_NOM, D.DOS_EMPR_PRENOM, D.DOS_DATE_PREMIERE_SAISIE, D.ID_ORDER, D.PROVENANCE_PERFEO, ');
        AdoQuery1.SQL.Add('D.DOS_RETOUR_PHASE2, D.DOS_DATE_DEBLOCAGE_PHASE3, D.SUP_ID, D.LGT_ID, D.DOS_COMMISION, D.PH1_ID, D.DOS_DATE_PHASE1, ');
        AdoQuery1.SQL.Add('L.LGT_ID, L.LGT_STATUT, S.SUP_ID, S.SUP_LIBELLE ');
        AdoQuery1.SQL.Add('FROM (DOSSIER as D INNER JOIN  LOGEMENT  as L ON D.LGT_ID = L.LGT_ID )');
        AdoQuery1.SQL.Add('INNER JOIN SUPPORT AS S ON S.SUP_ID = D.SUP_ID');
        AdoQuery1.SQL.Add('WHERE (DOS_DATE_PREMIERE_SAISIE >= :MY_START_Date) ');
        AdoQuery1.SQL.Add('AND (DOS_DATE_PREMIERE_SAISIE <= :MY_END_Date) AND (ID_ORDER <> '''') order by DOS_ID');
        AdoQuery1.Parameters.ParamByName('MY_START_Date').Value := StrToDate(Edit9.Text);   //format date '15/11/2007'
        AdoQuery1.Parameters.ParamByName('MY_END_Date').Value := StrToDate(Edit10.Text);    //format date '15/11/2007'

    Ca d'allair de fonctionner .... mais je suis pas sur de l'emploi de la jointure "INNER JOIN" .... Je travaille très peut avec l'SQL ....

    Bref, je me suis rende compte qu'il manque encore une table dans ma requette:

    Je doit donc à remodifier ma requette .....

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Voici ma requette pour 4 tables qui fonctionne très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    AdoQuery1.SQL.Clear;
    AdoQuery1.SQL.Add('SELECT D.DOS_ID, D.DOS_EMPR_NOM, D.DOS_EMPR_PRENOM, D.DOS_DATE_PREMIERE_SAISIE, D.ID_ORDER, D.PROVENANCE_PERFEO, ');
    AdoQuery1.SQL.Add('D.DOS_RETOUR_PHASE2, D.DOS_DATE_DEBLOCAGE_PHASE3, D.SUP_ID, D.LGT_ID, D.DOS_COMMISION, D.PH1_ID, D.DOS_DATE_PHASE1, ');
    AdoQuery1.SQL.Add('L.LGT_ID, L.LGT_STATUT, S.SUP_ID, S.SUP_LIBELLE, P.PH1_STATUT ');
    AdoQuery1.SQL.Add('FROM ((DOSSIER as D INNER JOIN  LOGEMENT  as L ON D.LGT_ID = L.LGT_ID) ');
    AdoQuery1.SQL.Add('INNER JOIN SUPPORT AS S ON S.SUP_ID = D.SUP_ID) INNER JOIN PHASE1 AS P ON P.PH1_ID = D.PH1_ID');
    AdoQuery1.SQL.Add('WHERE (DOS_DATE_PREMIERE_SAISIE >= :MY_START_Date) ');
    AdoQuery1.SQL.Add('AND (DOS_DATE_PREMIERE_SAISIE <= :MY_END_Date) AND (ID_ORDER <> '''') order by DOS_ID');
    AdoQuery1.Parameters.ParamByName('MY_START_Date').Value := StrToDate(Edit9.Text);   //format date '15/11/2007'
    AdoQuery1.Parameters.ParamByName('MY_END_Date').Value := StrToDate(Edit10.Text);    //format date '15/11/2007'

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/07/2012, 14h52
  2. Requête SQL simple sur deux tables
    Par Contrec dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/02/2012, 17h26
  3. [MySQL] Requête SQL complexe sur trois tables
    Par NET_Nicolas dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/08/2011, 18h24
  4. [Hibernate 2]Requête SQL native sur plusieurs tables
    Par Giovanny Temgoua dans le forum Hibernate
    Réponses: 0
    Dernier message: 06/04/2010, 16h10
  5. Requête SQL avec jointure sur trois tables
    Par pit2121 dans le forum SQL
    Réponses: 0
    Dernier message: 19/05/2008, 20h24

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