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 :

Tentative d'un SELECT sur 3 Tables liées avec ADOQuery et j'obtiens E_FAIL


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Tentative d'un SELECT sur 3 Tables liées avec ADOQuery et j'obtiens E_FAIL
    Bonjour,

    J'ai 3 tables:

    Table Vaches
    ID
    FermeID
    NumVache

    Table ListeParages
    ID
    VacheID
    TypeParage
    OrdreParage

    Table LésionEvents
    ID
    ListeParageID
    Sévérité
    Patte
    Côté
    Zone

    Je tente de faire la requête suivante:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Vaches.NumVache, ListeParages.TypeParage, ListeParatge.OrdreParage
    FROM ((ListeParages LEFT JOIN Vaches ON ListeParages.VacheID = Vaches.ID)
          LEFT JOIN LésionEvents ON ListeParages.ID = LésionEvents.ListeParagesID);

    Ça fonctionne. Mais si j'ajoute un champ:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Vaches.NumVache, ListeParages.TypeParage, ListeParatge.OrdreParage, LésionEvents.Sévérité
    FROM ((ListeParages LEFT JOIN Vaches ON ListeParages.VacheID = Vaches.ID)
          LEFT JOIN LésionEvents ON ListeParages.ID = LésionEvents.ListeParagesID);

    J'obtiens un message "E_FAIL a été envoyé par le fournisseur de données ou par un autre service.".

    C'est une BD SQL compact serveur. Voici la connexion:

    ADOQ1.ConnectionString := 'Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;Data Source='+ Fichier.Text; .

    J'utilise un ADOQ1.Open.

    Est-ce que quelqu'un peut m'aider à comprendre pourquoi dès que je tente d'avoir un champ venant d'une 3e table je reçois ce message?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Il me semble que la norme est de ne pas utiliser de lettre accentuée pour définir le nom des colonnes d'une table. La table LésionEvents devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Table LesionEvents
    ID
    ListeParageID
    Severite
    Patte
    Cote
    Zone
    Pour ta requête, tu mets des parenthèses. Or, l'écriture devrait plutôt suivre ce schéma.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Vaches.NumVache, ListeParages.TypeParage, ListeParages.OrdreParage, LesionEvents.Severite
    FROM ListeParages 
       LEFT JOIN Vaches ON ListeParages.VacheID = Vaches.ID
       LEFT JOIN LesionEvents ON ListeParages.ID = LesionEvents.ListeParagesID;
    Il est possible de donner un alias à tes tables, cette approche faciliterait la lecture.

    Il existe également des erreurs de nom de table dans ta requête (ListeParatge au lieu de ListeParages), mais je pense qu'il s'agit d'une inattention lors de la copie dans ton message

    Hormis ces points, je n'ai pas trouvé aucune erreur particulière. Ta requête doit normalement fonctionner.

    A+

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    seabs, merci pour les conseils. Je te rassure, aucun accent dans mon code, c'était pour faciliter la lecture française.

    J'ai écrit de nouveau la requête, et elle s'est mise à fonctionner. J'ai ajouté plusieurs jointures, mais ça finit par envoyer le même message d'erreur. Il doit y avoir un caractère non visible à l'écran qui fait planter la requête.

    merci

    [résolu]

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/02/2007, 14h41
  2. requete sur 2 tables liées avec même nom de champs
    Par Australia dans le forum Access
    Réponses: 5
    Dernier message: 02/02/2006, 11h38
  3. select sur 3 tables
    Par berry dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/05/2005, 01h05
  4. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42
  5. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54

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