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

C++Builder Discussion :

Requête SQL !=


Sujet :

C++Builder

Vue hybride

__sPiKe__ Requête SQL != 25/10/2009, 15h35
cedni Salut Sans çà : ... 25/10/2009, 17h18
__sPiKe__ ça marche impeccable merci ;) 25/10/2009, 18h05
__sPiKe__ Yep bon je repose une... 25/10/2009, 20h43
cedni order by... 25/10/2009, 20h53
__sPiKe__ Effectivement ça ne marche... 25/10/2009, 22h06
cedni Essayes de poster ta requete... 26/10/2009, 00h02
__sPiKe__ Au fait cette instruction ne... 01/11/2009, 20h49
totoche76 Hello, Encore une... 02/11/2009, 10h26
__sPiKe__ Sacrées fourberies d'Access... 03/11/2009, 08h41
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut Requête SQL !=
    Bonjour à tous, voilà je veux faire une requête SQL mais impossible de l'exécuter

    Là voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      QClassement->Close() ;
      QClassement->SQL->Clear() ;
      QClassement->SQL->Add("SELECT Appels_tbl.date_relance, Appels_tbl.id, Clients_tbl.id, Clients_tbl.Nom, Clients_tbl.Prenom, Clients_tbl.rue, Clients_tbl.code_postal, Clients_tbl.ville, Clients_tbl.fixe, Clients_tbl.portable ");
      QClassement->SQL->Add("FROM  Appels_tbl, clients_tbl  ") ;
      QClassement->SQL->Add("WHERE Appels_tbl.id = Clients_tbl.id ") ;
      QClassement->SQL->Add("AND Appels_tbl.date_relance != '' ");
      QClassement->ExecSQL() ;
      QClassement->Open() ;
    Et voici mon erreur :
    Erreur de syntaxe (opérateur absent)
    Je comprends pas trop pourquoi il ne me le prend pas, la valeur date_relance est de type "texte".

    Une idée ?

    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    Salut

    Sans çà :

    QClassement->SQL->Add("AND Appels_tbl.date_relance != '' ");


    c est ok ?

    Sinon essaye le not in

    QClassement->SQL->Add("AND Appels_tbl.date_relance NOT IN ('') ");

    !!!! peut etre echapper les parentheses

    Sinon essaye de donner une valeur par defaut , genre zero à ton champ relance , c est peut etre çà qui coince

    Eventuellement ajoutes aussi les clauses order , group
    order by Appels_tbl.date_relance
    group by Appels_tbl.date_relance
    desc

    Fais voir egalement la structure de tes deux tables

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    QClassement->SQL->Add("AND Appels_tbl.date_relance NOT IN ('') ");

    ça marche impeccable merci

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Yep bon je repose une question ici pour pas ouvrir un autre topci :

    Voilà j'ai une colonne "Date de relance" dans ma table "Appels_tbl" que j'ai mis du type "Texte" pour m'éviter une multitude de problèmes ~~

    Seulement j'aimerai trier ma colonne "Date de relance" de la date la + récente à la plus ancienne.
    Toutes mes dates sont de la forme jj/mm/aaaa.

    Car si je fais un ORDER BY relancer_le
    mon classement ce fait selon le jour et non la date complète..

    Comment puis-je faire ?

    Merci

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    order by Appels_tbl.date_relance
    group by Appels_tbl.date_relance
    desc

    Ce que je t avais mis au dessus

    Parcontre question comment tu concatenes ta chaine , je presume que tu t'y prends mal

    En effet il faut inserer ta chaine ainsi AAAAMMJJ , en obbligeant les mois et jours à etre à deux chiffres .
    Sinon utilises une colonne type date ou ma foi à l ancienne et moins joli , un champ distinct pour l année , le mois et le jour .

    En y reflichissant bien , les americains ont raison d ecrire la date ainsi

    Voilà

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Effectivement ça ne marche pas :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      QClassement->Close() ;
      QClassement->SQL->Clear() ;
      QClassement->SQL->Add("SELECT Appels_tbl.date_relance, Appels_tbl.id, Clients_tbl.id, Clients_tbl.Nom, Clients_tbl.Prenom, Clients_tbl.rue, Clients_tbl.code_postal, Clients_tbl.ville, Clients_tbl.fixe, Clients_tbl.portable, Clients_tbl.mail ");
      QClassement->SQL->Add("FROM  Appels_tbl, clients_tbl  ") ;
      QClassement->SQL->Add("WHERE Appels_tbl.id = Clients_tbl.id ") ;
      QClassement->SQL->Add("AND Appels_tbl.date_relance NOT IN ('') ");
      QClassement->SQL->Add("ORDER BY Appels_tbl.date_relance ");
      QClassement->SQL->Add("GROUP BY Appels_tbl.date_relance ");
      QClassement->SQL->Add("DESC") ;
      QClassement->ExecSQL() ;
      QClassement->Open() ;
    Avec toujours l'erreur
    Erreur de syntaxe (opérateur absent)
    Disons que je travail avec tout en type de données "texte" et pour la date c'est l'utilisateur qui l'a remplie toujours de façon JJ/MM/AAAA en remplissant bien les les chiffres pour le jour et mois.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    Essayes de poster ta requete directement dans l interface serveur

    C est quoi ton serveur dejà ?

    Bizarre que rajouter 3 clauses empechent la requete d aller au bout

    Postes tes structures de tables , avec un max de precision , on visualise mieux

    Là tu utilises des composants ? Lesquels ? As tu essayé avec l api ? C est pas plus compliqué

    Edit :

    J ai testé vite fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      QClassement->Close() ;
      QClassement->SQL->Clear() ;
      QClassement->SQL->Add("SELECT Appels_tbl.date_relance, Appels_tbl.id, Clients_tbl.id, Clients_tbl.Nom, Clients_tbl.Prenom, Clients_tbl.rue, Clients_tbl.code_postal, Clients_tbl.ville, Clients_tbl.fixe, Clients_tbl.portable, Clients_tbl.mail ");
      QClassement->SQL->Add("FROM  Appels_tbl, clients_tbl  ") ;
      QClassement->SQL->Add("WHERE Appels_tbl.id = Clients_tbl.id ") ;
      QClassement->SQL->Add("AND Appels_tbl.date_relance NOT IN ('') ");
      QClassement->SQL->Add("ORDER BY Appels_tbl.date_relance ");
      QClassement->SQL->Add("asc") ;
      QClassement->ExecSQL() ;
      QClassement->Open() ;
    Faut enlever le group by ici et plutot utiliser asc car je pense logiquement qu on preferera relancer les dates les plus proches

    Voilà ce que fait un group by
    mysql> SELECT year, country, product, SUM(profit)
    -> FROM sales
    -> GROUP BY year, country, product WITH ROLLUP;
    +------+---------+------------+-------------+
    | year | country | product | SUM(profit) |
    +------+---------+------------+-------------+
    | 2000 | Finland | Computer | 1500 |
    | 2000 | Finland | Phone | 100 |
    | 2000 | Finland | NULL | 1600 |
    | 2000 | India | Calculator | 150 |
    | 2000 | India | Computer | 1200 |
    | 2000 | India | NULL | 1350 |
    | 2000 | USA | Calculator | 75 |
    | 2000 | USA | Computer | 1500 |
    | 2000 | USA | NULL | 1575 |
    | 2000 | NULL | NULL | 4525 |
    | 2001 | Finland | Phone | 10 |
    | 2001 | Finland | NULL | 10 |
    | 2001 | USA | Calculator | 50 |
    | 2001 | USA | Computer | 2700 |
    | 2001 | USA | TV | 250 |
    | 2001 | USA | NULL | 3000 |
    | 2001 | NULL | NULL | 3010 |
    | NULL | NULL | NULL | 7535 |
    +------+---------+------------+-------------+

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Donc mon serveur est un serveur sous Access,
    j'utilise donc TDataBAse, TTable, TQuery, TDataSource et TBGrid.

    J'ai testé ta solution en supprimant le GROUP BY mais là encore il me classe par jour le plus proche est non la date entière.

    Faut que je trouve un moyen pour qu'il trie avec le sytème suivant JJ/MM/AAAA.

    Je te mets en screen mes 2 tables que j'utilise ainsi que l'arborescence de mon programme :

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Au fait cette instruction ne marche pas, quelqu'un sait pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      TDateTime d(Now());
      String MaDate=d.DateString();
      QClassement->Close() ;
      QClassement->SQL->Clear() ;
      QClassement->SQL->Add("SELECT DISTINCT CDate(Devis_tbl.date_intervention), Devis_tbl.date_intervention, Clients_tbl.id,Devis_tbl.id, Clients_tbl.Nom, Clients_tbl.Prenom, Clients_tbl.rue, Clients_tbl.code_postal, Clients_tbl.ville, Clients_tbl.fixe, Clients_tbl.portable, Clients_tbl.mail ");
      QClassement->SQL->Add("FROM  devis_tbl, clients_tbl  ") ;
      QClassement->SQL->Add("WHERE Devis_tbl.id = Clients_tbl.id ") ;
      QClassement->SQL->Add("AND Devis_tbl.date_intervention IS NOT NULL ") ;
      QClassement->SQL->Add("AND Devis_tbl.date_intervention NOT IN ('') ") ;
      QClassement->SQL->Add("AND Devis_tbl.est_valide ='oui' ");
      QClassement->SQL->Add("AND CDate(Devis_tbl.date_intervention) < "+MaDate);
      QClassement->SQL->Add(" ORDER BY  CDate(Devis_tbl.date_intervention) ASC ") ;
      QClassement->ExecSQL() ;
      QClassement->Open() ;
    Il ne m'affiche rien dans mon DBGrid...

  10. #10
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello,

    Au fait cette instruction ne marche pas, quelqu'un sait pourquoi ?
    Encore une fourberie d'Access (comme pour CDate, qui lui est spécifique)...
    Peut-être ceci, au format de la date près (essaye tes requêtes d'abord dans Access... )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QClassement->SQL->Add("AND CDate(Devis_tbl.date_intervention) < #" + MaDate + "#");

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Sacrées fourberies d'Access

    Bon sinon il ne m'affiche toujours rien !

    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
      TDateTime d(Now());
      String MaDate=d.DateString();
    
      QClassement->Close() ;
      QClassement->SQL->Clear() ;
      QClassement->SQL->Add("SELECT DISTINCT CDate(Devis_tbl.date_intervention), Devis_tbl.date_intervention, Clients_tbl.id,Devis_tbl.id, Clients_tbl.Nom, Clients_tbl.Prenom, Clients_tbl.rue, Clients_tbl.code_postal, Clients_tbl.ville, Clients_tbl.fixe, Clients_tbl.portable, Clients_tbl.mail ");
      QClassement->SQL->Add("FROM  devis_tbl, clients_tbl  ") ;
      QClassement->SQL->Add("WHERE Devis_tbl.id = Clients_tbl.id ") ;
      QClassement->SQL->Add("AND Devis_tbl.date_intervention IS NOT NULL ") ;
      QClassement->SQL->Add("AND Devis_tbl.date_intervention NOT IN ('') ") ;
      QClassement->SQL->Add("AND Devis_tbl.est_valide ='oui' ");
      QClassement->SQL->Add("AND CDate(Devis_tbl.date_intervention) < #" + MaDate + "# ");
      QClassement->SQL->Add("ORDER BY  CDate(Devis_tbl.date_intervention) ASC ") ;
      QClassement->ExecSQL() ;
      QClassement->Open() ;
    Est-ce qu'il n'arrive pas à comparer le type CDate et le String ?

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

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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