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 :

SELECT FROM WHERE


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 SELECT FROM WHERE
    Bonjour,
    voici un problème de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int heure_deb = 0 ;
    heure_deb = CB_heure_deb->Text.ToInt() ;
    
    Query1->Close();
    Query1->SQL->Clear() ;
    Query1->SQL->Add("SELECT heure_deb FROM Dates_tbl ");
    Query1->SQL->Add("WHERE heure_deb =" + heure_deb);
    Query1->Open();
    En rouge est là d'où provient mon erreur.
    Ma base de donnée est sous Access 2007.
    Le champ de la base "heure_deb" est du type numérique.
    Ma variable heure_deb est du type Int.
    Mon message d'erreur : "Erreur de syntaxe dans la clause FROM"

    Honnêtement j'ai déjà effectué des vingtaines de requêtes et c'est la première fois que ça me fait ça :/

    Une idée ?

    Merci.

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    J'ai jamais utilisé de BD avec ce composant, par contre je pourrais te conseiller de combiner ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Query1->SQL->Add("SELECT heure_deb FROM Dates_tbl ");
    Query1->SQL->Add("WHERE heure_deb =" + heure_deb);
    pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1->SQL->Add("SELECT heure_deb FROM Dates_tbl WHERE heure_deb =" + heure_deb);

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1->SQL->Add("SELECT heure_deb FROM Dates_tbl WHERE heure_deb ="+heure_deb);
    Le message d'erreur est : "Instruction SQL non valide"...

    Alors que dans le constructeur SQL de Query1 si j'entre la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT heure_deb FROM Dates_tbl WHERE heure_deb = 10
    J'obtiens le bon résultat. What's the problem ?

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

    +heure_deb.c_str()



    Non ?

  5. #5
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    J'ai juste une petite question.

    Ici tu initialises à zéro sans raison, car la ligne après tu mets une valeur.
    Ici tu transforme une string en entier. Pour le retransformer en string dans ta requête par la suite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    heure_deb = CB_heure_deb->Text.ToInt() ;
    J'imagine que ce serait plus facile de faire ceci (en tout cas pour le CPU)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1->SQL->Add("SELECT heure_deb FROM Dates_tbl WHERE heure_deb ="+CB_heure_deb->Text);
    Habituellement j'utilise l'API de MySQL, c'est pourquoi je te donne des réponses non précise

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    C'est bon j'ai réussi, le problème c'est que heure_deb doit être un string pour la requête mais après dans mon programme je dois l'incrémenter.

    Voilà ce que cela donne au final :

    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
    String heure_deb = "";
    heure_deb = CB_heure_deb->Text;
    
    Query1->Close();
    Query1->SQL->Clear() ;
    Query1->SQL->Add("SELECT heure_deb, date_calendrier FROM Dates_tbl ");
    Query1->SQL->Add("WHERE date_calendrier='"+date+"'");
    Query1->SQL->Add(" AND heure_deb ="+heure_deb);
    Query1->Open();
    
    heure_deb_test = Query1->FieldByName("heure_deb")->AsInteger ;
    
    if(date_test != date && heure_deb_test != heure_deb){
    Query1->Close();
    Query1->SQL->Clear() ;
    Query1->SQL->Add("INSERT INTO dates_tbl(id_client,jour,intervention,heure_deb,date_calendrier,commentaire) ");				Query1->SQL->Add("VALUES('"+id_client+"','"+jour+"','"+intervention+"','"+heure_deb+"','"+date+"','"+autre+"')");
    Query1->ExecSQL();
    
    heure_deb = heure_deb.ToInt()+1;
    }else{
    int rep= MessageBox(Handle,"Ce créneau horaire est déjà utilisé, ajouté : "+i,
    				"Avertissement",MB_ICONEXCLAMATION ) ;
    }
    Maintenant j'aimerai afficher la valeur de "i" qui est un entier venant de la boucle For.

    bizarrement il ne me l'affiche pas..

    En tout cas merci pour l'aide précédente.

  7. #7
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Fais: "" + String(i) + ""

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Alors j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int rep= MessageBox(Handle,"Créneau(x) ajouté(s) : "+String(i),
    				"Créneau horaire déjà utilisé",MB_ICONEXCLAMATION);
    Ainsi que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int rep= MessageBox(Handle,"Créneau(x) ajouté(s) : "+String(i)+"",
    				"Créneau horaire déjà utilisé",MB_ICONEXCLAMATION);
    Et voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [BCC32 Erreur] FenPrinc.cpp(1313): E2034 Impossible de convertir 'UnicodeString' en 'const char *'
    Un problème qui peut être lié à celui-là ?
    http://www.developpez.net/forums/d71...uilder-2009-a/

  9. #9
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString temp = "Créneau(x) ajouté(s) : " + AnsiString(i);
    Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int rep= MessageBox(Handle,temp.c_str() ,
    				"Créneau horaire déjà utilisé",MB_ICONEXCLAMATION);

  10. #10
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Bonsoir,

    Sous BCB2009, il faut rajouter un "L" devant les chaînes de caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int rep= MessageBox(Handle,L"Créneau(x) ajouté(s) : "+String(i),
    				L"Créneau horaire déjà utilisé",MB_ICONEXCLAMATION);
    Ce n'est pas dans la FAQ C++Builder mais cette question y aurait sa place.

  11. #11
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    La méthode proposé par gandf ne fonctionne pas. Si tu veux vraiment utilisé des Wide Char, il faut plutôt faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String temp = "Créneau(x) ajouté(s) : " + String(i);
    int rep= MessageBoxW(Handle,temp.w_str(),
    				L"Créneau horaire déjà utilisé",MB_ICONEXCLAMATION);

Discussions similaires

  1. [COUNT] select ... from ... where count !
    Par tmcgrady dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/11/2007, 17h29
  2. select, from, where
    Par poudy dans le forum Requêtes
    Réponses: 12
    Dernier message: 08/09/2007, 13h12
  3. probleme avec SELECT..FROM..WHERE
    Par VBBBA dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 08/09/2006, 15h58
  4. Pb de syntaxe sql : Sélection SELECT FROM WHERE vide
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 31/07/2006, 15h54
  5. [hibernate][spring]requete select from where IN
    Par whilecoyote dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/04/2006, 09h06

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