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 :

Insérer variable integer dans requete SQL?


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Insérer variable integer dans requete SQL?
    Bonjour à tous et a toutes, je suis nouveau sur le fofo et je suis déja dans la m****

    Voila en gros je suis entrain de réaliser un soft avec C++ Builder et une base de donnée MySQL. Je voulais savoir comment insérer une variable integer dans une requete SQL, la syntaxe "classique" ne me permet pas de récupérer la valeur de cette variable... Enfin voici mon code pour que vous y voyiez plus clair:

    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
    if (ComboBox1->Text!="")
    	{
    	ComboBox4->Enabled=true;
     
    	SQLQuery1->Active=false;
    	SQLQuery1->SQL->Clear();
     
    	SQLQuery1->SQL->Add("SELECT `ID` FROM `categorie` WHERE intitule LIKE '"+catchoisi+"'");
    	SQLQuery1->Active=true;
    	int idcat=SQLQuery1->FieldValues["ID"];
     
    	SQLQuery1->Active = false;
    	SQLQuery1->SQL->Clear();
    	AnsiString sel = "SELECT `intitule` FROM `cours` WHERE id_categorie LIKE idcat ORDER BY intitule" ;
    	ShowMessage(sel);
    	SQLQuery1->SQL->Add(sel);
    	SQLQuery1->Active = true;
     
    	int count2 = SQLQuery1->RecordCount;
     
    	for (int i=0; i < count2; i++)
    		{
    		ComboBox2->Items->Add(SQLQuery1->FieldByName("intitule")->AsString);
    		SQLQuery1->Next();
    		}
    	}
    Avec ce code le ShowMessage que j'ai mis me fait bien comprendre qu'il envoie la requete avec la valeur idcat et non avec la valeur entière que cette variable idcat est sencée contenir...

    Merci pour votre aide

  2. #2
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Regardes du côté de ce post, par ex.
    Et surtout du côté des 'Params' des TQuery et autres dans le genre.

    @+

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785
    Par défaut
    Citation Envoyé par El Doctor J Voir le message
    Avec ce code le ShowMessage que j'ai mis me fait bien comprendre qu'il envoie la requete avec la valeur idcat et non avec la valeur entière que cette variable idcat est sencée contenir...

    Merci pour votre aide
    Normal,

    Ca ira bien mieux si tu fais une concaténation lors de la construction de ta query.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sel = "SELECT `intitule` FROM `cours` WHERE id_categorie LIKE '" + idcat + "' ORDER BY intitule";

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci mais la syntaxe que tu me donne la fonctionnerait très bien si mon "idcat" était du string, mais la c'est de l'integer et ca ne fonctionne pas, j'avais déja essayé avant de poster ici

    Je suppose qu'il faut transformer cette variable integer en string pour que ca fonctionne puisque normalement une requete SQL est entierement en string ai-je ouï dire ^^

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Logiquement, si c'est un integer, on ne doit pas mettre de cote (sauf erreur de ma part).

    Essaie donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sel = "SELECT `intitule` FROM `cours` WHERE id_categorie LIKE " + idcat + " ORDER BY intitule";
    A +

    PS: Perso, j'utilise le passage de paramètre pour me débarrasser de ce genre de soucis ...

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785
    Par défaut
    euh, si c integer, alors déjà il faut faire un casting en str via IntToStr parce que sinon, le compilateur lance une erreur de compilation.

    2. le like n'est que pour une recherche textuelle, donc la QUERY est foireuse.
    3. Utiliser les Prepared Statement, ça n'a pas été inventé pour le plaisir des yeux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    std::auto_ptr< TSQLQuery > query( new TSQLQuery( 0 ) );
    query->SQLConnection = an_instance_of_sql_connection;
     
    query->SQL->Text = "SELECT intitule FROM cours WHERE id_categorie = :ID_CAT ORDER BY intitule";
    query->ParamByName("ID_CAT")->AsInteger = id_cat;
    query->Active = true;
    Bon amusement.

  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon ben j'ai essayé ton idée swirtel mais ca bug encore pour je ne sais quelle raison. Par contre, voici un code qui fonctionne au poil qu'un pote geek m'a trouvé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQLQuery1->Active = false;
    	SQLQuery1->SQL->Clear();
    	std:: ostringstream oss;
    	oss << idcat;
    	std::string sel = "SELECT `intitule` FROM `cours` WHERE id_categorie LIKE '" + oss.str() + "' ORDER BY intitule" ;
    	AnsiString sel2;
    	sel2 = sel.c_str();
    	SQLQuery1->SQL->Add(sel2);
    	SQLQuery1->Active = true;
    Voila, en tout cas merci pour votre aide quand meme, je repasserai surement plus d'une fois

    Je passe le sujet en résolu

  9. #9
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785
    Par défaut
    c'est du n'importe quoi. Si ton id_categorie est un numérique, et qu'un like fonctionne dessus, alors y a un énorme soucis.

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

Discussions similaires

  1. variable dans requete SQL pour delphi
    Par socooooool dans le forum Bases de données
    Réponses: 9
    Dernier message: 25/01/2013, 12h27
  2. [MySQL] variable 'matable' en php dans requete sql insert
    Par Vortexia dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 08/03/2012, 14h28
  3. variable Unix dans requete SQL
    Par shakkou dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/06/2010, 15h59
  4. variable dans requete sql
    Par xian21 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/01/2009, 13h14
  5. [Debutant] Variables dans requete SQL
    Par Freygolow dans le forum C#
    Réponses: 11
    Dernier message: 21/05/2008, 10h14

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