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

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