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 :

[ADO] Requete avec jointure


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut [ADO] Requete avec jointure
    Bonjour !

    Est-ce qu'il faut utiliser les requetes avec les jointures de type inner join pour faire des requetes sur des bases access avec ADO ou cela doit-il marcher avec des requetes SQL classiques ?
    Je m'arrache les cheveux sur une requete avec jointure qui genere une erreur et je me demande si cela viendrait pas de la...

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    qu'est-ce que tu appelles un requête classique ?
    Montre-nous la requête sur laquelle tu butes !!

    @+

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        with TADOQuery.create(nil) do
        try
            Connection := BD.Connection;
            SQL.add('SELECT AGENTS.NOM, AGENTS.PRENOM, GESTIONNAIRES.MODULE FROM AGENTS, GESTIONNAIRES WHERE AGENTS.ID = "' + ComboID.Text + '" AND GESTIONNAIRES.ID = AGENTS.ID;');
            Open;
     
            if RecordCount <> 0 then
            begin
                 Nom := Fields[0].Asstring;
                 Prenom :=Fields[1].AsString;
                 Module :=Fields[2].AsString;
            end;
         finally
                free;
         end;
    Merci !

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par okparanoid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        with TADOQuery.create(nil) do
        try
            Connection := BD.Connection;
            SQL.add('SELECT AGENTS.NOM, AGENTS.PRENOM, GESTIONNAIRES.MODULE FROM AGENTS, GESTIONNAIRES WHERE AGENTS.ID = "' + ComboID.Text + '" AND GESTIONNAIRES.ID = AGENTS.ID;');
            Open;
     
            if RecordCount <> 0 then
            begin
                 Nom := Fields[0].Asstring;
                 Prenom :=Fields[1].AsString;
                 Module :=Fields[2].AsString;
            end;
         finally
                free;
         end;
    Merci !
    Ce n'est pas des " qu'il faut mettre mais des '

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     with TADOQuery.create(nil) do
        try
            Connection := BD.Connection;
            SQL.add('SELECT AGENTS.NOM, AGENTS.PRENOM, GESTIONNAIRES.MODULE FROM AGENTS, GESTIONNAIRES WHERE AGENTS.ID = ' + QuotedStr(ComboID.Text) + ' AND GESTIONNAIRES.ID = AGENTS.ID;');
            Open;
    
            if RecordCount <> 0 then
            begin
                 Nom := Fields[0].Asstring;
                 Prenom :=Fields[1].AsString;
                 Module :=Fields[2].AsString;
            end;
         finally
                free;
         end;
    Sinon une requete avec un jointure sera plus rapide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT AGENTS.NOM, AGENTS.PRENOM, GESTIONNAIRES.MODULE FROM
     AGENTS, GESTIONNAIRES 
    WHERE AGENTS.ID = 'xxx' AND GESTIONNAIRES.ID = AGENTS.ID
    C'est la même chose que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT AGENTS.NOM, AGENTS.PRENOM, GESTIONNAIRES.MODULE FROM 
    AGENTS inner join GESTIONNAIRES on GESTIONNAIRES.ID = AGENTS.ID
    WHERE AGENTS.ID = 'xxx'

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Je vois ce que tu appelle une requête classique. Personnellement je préfère utiliser inner join ou outer join pour faire mes jointures.

    Ta requête peut être écrite ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL.add('SELECT AGENTS.NOM, AGENTS.PRENOM, GESTIONNAIRES.MODULE ' + 
    'FROM AGENTS inner join GESTIONNAIRES ' +
    'ON GESTIONNAIRES.ID = AGENTS.ID ' + 
    'WHERE AGENTS.ID = ' + QuotedStr(ComboID.Text) + ';');
    Mais quel est ton message d'erreur ?

    @+

  6. #6
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    Merci pour le quotedstr ca faisait longtemps que j'avais plus fait du Delphi m'en souvenait plus :p.

    Sinon ca marche tjs pas quelque soit la methode :
    classe d'exception eolexveption avec le message "erreur non specifiee"

    Le inner join ca marche quelque soit les bases ou c'est specifique a Access (pour le jour ou je voudrais passer a un truc un peu plus performant ) ?

  7. #7
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    J'ai resolu le probleme en changeant dans ma base GESTIONNAIRES le DATA MODULE, j'en deduis que cela doit etre un mot interdit ?!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2007, 14h46
  2. Pb sur une requete avec jointure droite
    Par crashyear dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/02/2007, 09h06
  3. recherche aide pour requete avec jointure
    Par nebil dans le forum Requêtes
    Réponses: 5
    Dernier message: 21/08/2006, 18h03
  4. [MySQL] Erreur dans une requête avec jointures
    Par bobic dans le forum Langage SQL
    Réponses: 17
    Dernier message: 03/08/2006, 14h04
  5. requete avec jointure & group by
    Par de LANFRANCHI dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/07/2004, 15h31

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