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 :

TQuery sur deux tables et commande EXCEPT


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2014
    Messages : 21
    Points : 19
    Points
    19
    Par défaut TQuery sur deux tables et commande EXCEPT
    Alors je suis débutante en delphi on ce qui concerne les base de donné je veux bien un aide svp
    Voici mon problème exemple j'ai deux table ( table2 : nom) et ( table1 : nomT, age)
    Alors j'ai deux dbgrid et deux table et deux datasource et 1 seul Tquery
    Je veux faire une déférence entre les nom danq table1 et nom1 dans table 2 ce qui veux dire je veux afficher dans un memo ou combobox les nom qui pas encor été utiliser dans la table 1 alors j'ai fait cela :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Query1.SQL.Clear ;
    Query1.SQL.Add('SELECT Nom') ;
    Query1.SQL.Add('FROM Table2.db') ;
    Query1.SQL.Add('EXCEPT')   ;
    Query1.SQL.Add('SELECT TNom')  ;
    Query1.SQL.Add('FROM Table1.db') ;
    Query1.SQL.Add('WHERE age=30)') ;
    Query1.Active:=true;
    Query1.Open ;
    with query1 do
    begin
      first;
      while not eof do
      begin
        Memo1.Lines.add(fieldbyname('Prenom').asString );
     
        next;
      end;
     
    end;
    end;
     
    end.
    il me donne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    invalid uses of keyword 
    Token : select 
    Lines number :4

  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,

    Qu'il y ait plusieurs dBgrids ne change rien, votre problème est un problème de SQL et dans la formulation .
    Vous n'indiquez pas votre SGBD ce qui n'arrange rien , mais vu que les tables se nomment Table1.db et table2.Db j'imagine qu'il s'agit de Paradox (un peu vieillot)

    voici une première manière de faire ce que vous demandez à savoir une liste des noms de table2 ne faisant pas partie de la table1 ayant 30 ans (je ne vois pas d'où vient ce 30, mais puisque vous l'avez mis dans votre SQL de départ je l'ai inclus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T2.NOM,T1.NOMT FROM TABLE2.DB AS T2 LEFT JOIN TABLE1.DB AS T1 ON T2.NOM=T1.NOMT AND T1.AGE=30 
    WHERE T1.NOMT IS NULL
    ce qui peut aussi s'exprimer ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T2.NOM FROM TABLE2.DB AS T2 
    WHERE NOT EXISTS (SELECT 1 FROM TABLE1.DB WHERE NOMT=T1.NOM AND AGE=30)
    pour mon test j'ai
    table2
    A
    B
    C
    F
    G
    Table1
    A 30
    B 30
    C 20
    D 20
    E 30
    résultat de la requête
    C << parce que âge 20 dans table 1
    F
    G
    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 émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    et ne pas oublier que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Query1.SQL.Add('SELECT Nom') ;
    Query1.SQL.Add('FROM Table2.db') ;
    Query1.SQL.Add('EXCEPT')   ;
    va créer 'SELECT NomFROM Table2.dbEXCEPT' etc.

    ce qui n'a aucun sens. Faire un Add n'ajoute pas de sauts de ligne. Il faut mettre un espace à la fin de chaque morceau d'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Query1.SQL.Add('SELECT Nom ') ;
    Query1.SQL.Add('FROM Table2.db ') ;
    Query1.SQL.Add('EXCEPT ')   ;


    Je pense d'ailleurs que le except doit le faire dans le cas présent mais sous DBase, est-ce que ça existe ou pas, aucune idée !

Discussions similaires

  1. Requete sur deux tables
    Par ReaseT dans le forum ASP
    Réponses: 13
    Dernier message: 07/02/2005, 16h18
  2. Cumul sur deux tables
    Par lper dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/11/2004, 15h02
  3. Comptez sur deux tables en même temps
    Par genova dans le forum Langage SQL
    Réponses: 12
    Dernier message: 13/09/2004, 18h58
  4. trigger sur deux tables
    Par Shabata dans le forum Développement
    Réponses: 4
    Dernier message: 04/05/2004, 16h55
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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