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 :

Aide sur une requête paramétrée


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut Aide sur une requête paramétrée
    bonjour
    Je m’adresse à vous en souhaitant de l’aide pour régler ce problème
    1ere : j’ai des tables ADO (access)
    T_Notes [N_Eleve,note1,note2,note3]
    T_Tranches[mini_N,maxi_N]

    Je voudrais créer des champs Observations [obs1,obs2,obs3] correspondant à la note donnée selon la table T_tranches
    Nom : requete.JPG
Affichages : 305
Taille : 29,6 Ko
    J’ai réussi à faire une requête mais sur un seul champ (note1 et Obs1) , comment faire pour les autres champs ?
    Requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT T_Eleves.Eleves, T_Eleves.notes1, (T_Tranches.Mini_N & " à " & T_Tranches.Maxi_N) AS Obs1
    FROM T_Tranches, T_Eleves
    WHERE (((T_Eleves.notes1)>=[T_Tranches.Mini_N] And (T_Eleves.notes1)<=[T_Tranches.Maxi_N]))
    GROUP BY T_Eleves.Eleves, T_Eleves.notes1, T_Tranches.Mini_N, T_Tranches.Maxi_N
    ORDER BY T_Eleves.Eleves;
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je n'y vois aucun paramètre, juste une problème SQL.

    Utilisez un SQL mis en forme et ce sera beaucoup plus simple. Maintenant, vous vous poserez certainement la question " Quelle mise en forme ?"

    Tout d'abord, au niveau de la jointure FROM T_Tranches, T_Eleves en mise en forme on utilisera une clause <LEFT/RIGHT/FULL> JOIN ... ON <critères de jointures entre les deux tables>
    Ensuite, au niveau des Tables déclarées utilisez des alias (une ou deux lettres) pour faciliter la lecture ainsi votre SQL devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT E.Eleves, E.notes1, (T1.Mini_N & " à " & T1.Maxi_N) AS Obs1
    FROM T_Tranches T1 JOIN T_Eleves E ON  E.notes1>=T1.Mini_N  AND E.Notes1<=T1.Maxi_N
    Citation Envoyé par Nota Bene
    La clause GROUP BY n'a pas à être utilisée : aucune clause d'agrégat n'étant stipulée
    La clause ORDER BY avec GROUP BY c'est inutile
    Que nous apporte les alias ? la possibilité de faire d'autres jointures sur une même table, ainsi pour avoir les deux autres colonnes observations il suffira de répéter la jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT E.Eleves,
                        E.notes1, (T1.Mini_N & " à " & T1.Maxi_N) AS Obs1,
                        E.notes2, (T2.Mini_N & " à " & T2.Maxi_N) AS Obs2,
                        E.notes3, (T3.Mini_N & " à " & T3.Maxi_N) AS Obs3
    FROM  T_Eleves E JOIN T_Tranches T1 ON  E.notes1>=T1.Mini_N  AND E.Notes1<=T1.Maxi_N
                             JOIN T_Tranches T2 ON  E.notes2>=T2.Mini_N  AND E.Notes2<=T2.Maxi_N
                             JOIN T_Tranches T3 ON  E.notes3>=T3.Mini_N  AND E.Notes3<=T3.Maxi_N
    Je ne connais pas suffisamment ACCESS pour jeter un jugement sur le reste c.a.d. la concaténation de colonne et l'utilisation possible de BETWEEN dans la clause de jointure sinon je pense que ma proposition doit fonctionner malgré des performances certainement faibles (mais sur un nombre d'élèves peu important acceptables)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    bonjours
    merci sergio de me répondre
    je sais que vous êtes deux avec Access
    mais c’était plus facile que BDE au niveau des installation .
    pour ta requête il me sort un message d’erreur ( erreur de syntaxe dans la clause From) .

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    mais c’était plus facile que BDE au niveau des installation .
    SQLite c'est pas mal non plus
    pour ta requête il me sort un message d’erreur ( erreur de syntaxe dans la clause From) .
    pour moi la partie concaténation de la chaine est bizarre, avec d'autres SGBD j'aurais mis le ||
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (T1.Mini_N || " à " || T1.Maxi_N)
    que donne la requête sans concaténation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT E.Eleves,
                        E.notes1, T1.Mini_N,T1.Maxi_N,
                        E.notes2, T2.Mini_N, T2.Maxi_N,
                        E.notes3, T3.Mini_N,T3.Maxi_N
    FROM  T_Eleves E JOIN T_Tranches T1 ON  E.notes1>=T1.Mini_N  AND E.Notes1<=T1.Maxi_N
                             JOIN T_Tranches T2 ON  E.notes2>=T2.Mini_N  AND E.Notes2<=T2.Maxi_N
                             JOIN T_Tranches T3 ON  E.notes3>=T3.Mini_N  AND E.Notes3<=T3.Maxi_N
    [Edit] un essai rapide avec Firebird plus tard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT E.Eleves,
                        E.notes1, T1.Mini_N||' à '||T1.Maxi_N as Obs1,
                        E.notes2, T2.Mini_N||' à '||T2.Maxi_N as Obs2,
                        E.notes3, T3.Mini_N||' à '||T3.Maxi_N as Obs3
    FROM  T_Eleves E JOIN T_Tranches T1 ON  E.notes1 BETWEEN T1.Mini_N  AND T1.Maxi_N
                             JOIN T_Tranches T2 ON  E.notes2 BETWEEN T2.Mini_N  AND T2.Maxi_N
                             JOIN T_Tranches T3 ON  E.notes3 BETWEEN T3.Mini_N  AND T3.Maxi_N
    semble fonctionner correctement (avec flamerobin)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    je vais voir (surement).

    pour la requete de sans concatination toujour le message d’erreur ( erreur de syntaxe dans la clause From) .

    pour la requte avec || "à"|| message d’erreur ( utulisation incorrect des barres || dans l'expresssionT1.Maxi_N as Obs1) .

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Faudrait peut-être posé la question sur le forum ACCESS qui seront plus pertinent sur une question qui ne semble pas avoir de lien avec Delphi
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    bonsoir a tous
    # ShaiLeTroll
    j'ai posté pas mal de fois sans avoir une(01) seul réponse.

    #Sergio
    1- votre requête est impécable sauf que access aime les parentèses,et au lieu de JOIN = LEFT JOIN
    on modifiant votre requête j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT E.Eleves, E.notes1, (T1.Mini_N & " à " & T1.Maxi_N) AS Obs1, 
                            E.notes2, (T2.Mini_N & " à " & T2.Maxi_N) AS Obs2, 
                            E.notes3, (T3.Mini_N & " à " & T3.Maxi_N) AS Obs3
    FROM ((T_Eleves AS E 
               LEFT JOIN T_Tranches AS T1 ON (E.notes1>=T1.Mini_N) AND (E.Notes1<=T1.Maxi_N)) 
               LEFT JOIN T_Tranches AS T2 ON (E.notes2>=T2.Mini_N) AND (E.Notes2<=T2.Maxi_N)) 
               LEFT JOIN T_Tranches AS T3 ON (E.notes3>=T3.Mini_N) AND (E.notes3<=T3.Maxi_N);
    2- j'ai appris par votre réponse un astuces ( qu'on peut nommer une table plusieurs fois T1,T2,T3....)
    vous êtes un vrai maitre

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par MIWAN Voir le message
    1- votre requête est impécable sauf que access aime les parentèses,et au lieu de JOINT = LEFT JOINT
    pour ce qui est du joint je ne fume pas
    que pour ACCESS il faille préciser le type et les parenthèses était au delà de mes connaissances sur ce "SGBD"
    vous êtes un vrai maitre
    pour la petite histoire le master de mon pseudo est tout simplement que le pseudo sergio était déjà pris ainsi qu'un autre sergio.... que j'ai essayé , à court d'idée mon poste de travail étant nommé MASTER c'est ce que j'ai mis. Je dois avouer que cette "extension", tête froide, me fait un peu honte (trop je me la pète quand on la prend pour "grand maitre") mais bon, c'est fait, je vais pas la changer maintenant
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  2. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  3. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29
  4. Aide sur une requête
    Par TshAw dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2005, 11h42
  5. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 10h26

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