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

  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 �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
    Question : C est une maintenance de l application ou sa creation ?
    Question 2 : Les tables sont elles remplies � base d exemple uniquement ?
    Question 3 : A quoi ressemble ton formulaire pour rentrer cette fameuse date de relance ? 3 edit consecutifs ?

    Relis ce passage

    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 .

  10. #10
    Membre confirm�
    Inscrit en
    Juin 2009
    Messages
    128
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par d�faut
    1 ) C'est la cr�ation de l'application pour l'entreprise de mon beau-fr�re

    2 ) Pour remplir les bases j'ai suivi ce tuto l� : http://lberne.developpez.com/bcb/paradox/

    3 ) La date de relance, c'est tout simplement la personne qui va appeler un client, si celui-ci est indisponible la personne rentre dans un TEdit la date � laquelle elle va rappeler le client. Et pour que ce soit plus instructif j'ai opt� pour l'option date du type : JJ/MM/AAAA. Il n'y a donc qu'un TEdit pour la date de relance.

  11. #11
    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
    Ce n est que mon avis mais bon pour simplifier

    Crees 3 combobox
    1 contenant les ann�es aaaa
    1 contenant les mois mm
    1 cotenant les jours jj

    Concatenes ta chaine ainsi aaaammjj avant d inserer ta date dans ta table

    Le reel probleme c est qu � l insertion ta date n est pas utilisable en son etat , il suffit d y rem�dier de cette maniere tres simple .

    Ou alors de stocker ta requete dans une stringlist , de manipuler ta valeur date et d afficher ensuite mais � mon humble avis , le coup des combobox sera plus facile

    Ou encore expliquer � l utilisateur qu il faut rentrer la date de cette maniere

    Honnetement , t aurais du t orienter vers sql , mysql ou sqlite , surtout mysql par exemple que je connais bien qui t aurait permis dans ton cas de creer une base temporaire le temps de traiter ta requete

  12. #12
    Membre confirm�
    Inscrit en
    Juin 2009
    Messages
    128
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par d�faut
    hum hum quelle gal�re juste pour trier une date !

    Donc si je suis ce que tu m'as dit, j'ai 3 ComboBox, un pour le jour, suivi de celui pour le mois puis celui pour le jour.
    Mais pourquoi des ComboBox ? 3 TEdit ne suffisent pas ? Car avec les ComboBox je mets quoi comme options ?

    (cf voir fichier joint)

    Et donc si je fais �a, j'aurai dans ma table non plus des donn�es du type JJ/MM/AAAA mais AAAAMMJJ

    Par exemple j'ai 2 dates de relance qui sont 27/10/2009 et 01/11/2009, on est bien d'accord que 27/10/2009 < 01/11/2009 sauf que mon programme affiche :
    01/11/2009 < 27/10/2009 car il compare juste le 01 et 11...

    Et sous la forme AAAAMMJJ �a marche comment ?

  13. #13
    Membre confirm�
    Inscrit en
    Juin 2009
    Messages
    128
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par d�faut
    Personne n'a une id�e pour trier une date du format JJ/MM/AAAA alors ?

    Tant pis je vais essayer de trouver une autre solution ..

  14. #14
    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,

    Je n'ai pas Access sous la main, mais ceci pourrait p'tet marcher ? (en dehors d'utiliser directement des champs date/heure dans le base )
    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 ('') ");  // "AND Appels_tbl.date_relance is not null" ?????
      QClassement->SQL->Add("ORDER BY CDate(Appels_tbl.date_relance) DESC ");
      QClassement->SQL->Add("GROUP BY Appels_tbl.date_relance ");
      QClassement->ExecSQL() ;
      QClassement->Open() ;

  15. #15
    Membre confirm�
    Inscrit en
    Juin 2009
    Messages
    128
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par d�faut
    Yep !

    J'ai test� ton code mais j'ai une erreur :

    Erreur de syntaxe dans la clause ORDER BY
    A noter que dans ma table la colonne date_relance est du type Texte et qu'elle sera toujours sous la forme JJ/MM/AAAA avec toujours 2 chiffres pour le jour et le mois (01/05...).

  16. #16
    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
    Oups, d�chirure: faut inverser les clauses 'group by' et 'order by'.
    D'autre part, je vois pas trop � quoi te sers le group by' (cf cet article)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      QClassement->Close() ;
      QClassement->SQL->Clear() ;
      QClassement->SQL->Add("SELECT DISTINCT CDate(Appels_tbl.date_relance), 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 ('') ");  // "AND Appels_tbl.date_relance is not null" ?????
      QClassement->SQL->Add("ORDER BY CDate(Appels_tbl.date_relance) DESC ");
      QClassement->ExecSQL() ;
      QClassement->Open() ;

  17. #17
    Membre confirm�
    Inscrit en
    Juin 2009
    Messages
    128
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par d�faut
    Yo en effet le ORDER BY ne servait � rien et le r�sultat marche !

    Voici mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      QClassement->Close() ;
      QClassement->SQL->Clear() ;
      QClassement->SQL->Add("SELECT DISTINCT CDate(Appels_tbl.date_relance), 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 IS NOT NULL ");
      QClassement->SQL->Add("ORDER BY  CDate(Appels_tbl.date_relance) ASC ");
      QClassement->ExecSQL() ;
      QClassement->Open() ;
    J'ai chang� le DESC en ASC et il m'affiche bien la date dans l'ordre :
    - 27/10/2009
    - 28/10/2009
    - 01/11/2009
    - 05/11/2009
    - 31/10/2010
    !!

    Merki

  18. #18
    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
    Lol Spike
    Bien vu le cdate

    <joke>T as des problemes de vue ?</joke>

    Faut enlever le group by ici et plutot utiliser asc car je pense logiquement qu on preferera relancer les dates les plus proches

    http://www.developpez.net/forums/d82...l/#post4742574

    Sinon quand tu as des soucis de ce genre , utilises autant de combo ou edit que de champs necessaire dans la tanle , c est rapide , pas besoin de chercher � mettre en oeuvre une fonction , ... et c est trait� quasi aussi vite

    Bon WE

  19. #19
    Membre confirm�
    Inscrit en
    Juin 2009
    Messages
    128
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par d�faut
    C'est plut�t totoche76 qui m'a trouv� l'astuce du CDate (d'ailleurs je comprends pas trop comment �a marche..).

    Pour le ASC c'est � force de trifouiller mon code que j'ai pas vu dans quel sens le tri se faisait, et je risque de faire quelques manipulations sur les dates donc j'essaie d'avoir le moins de TEdit possible pour all�ger l'IHM.

    En tout cas sa marche impeccablement, merci � vous deux

  20. #20
    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...

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

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