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 :

Erreur sur une Requete SQL - SELECT


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut Erreur sur une Requete SQL - SELECT
    salut à tous !

    Voila le soucis, j'ai une requête SELECT à faire pour récupérer des infos d'une table en fonction d'une valeur définie (et qui en plus est la clé primaire de ma table).

    Donc je fais le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ObjGestionQuery->RAZCpteur();  //correspond à Query->Close()
                    ObjGestionQuery->SetRequete("SELECT (NomJeux,NbrGommette,AnneeAchat,NumeroJeu,Catejeu,Commentaire) FROM tjeux WHERE RefJeux=:ParamRefJeux");
                    ObjGestionQuery->AddParametre(valRefJeux);
                    ObjGestionQuery->ExecRequete();
    En fait, j'utilise une classe GestionQuery, qui est accessible de n'importe ou dans le programme et m'évite de retaper tout un tas de code.

    Mais lorsque je passe à ExecRequete(), j'ai un msg d'erreur de mysql comme quoi je fais une violation de clé.
    Je ne comprends pas trop car cette requete, je l'ai déja utilisé ailleurs avec d'autres table, et ca na pas planté...

    Vous voyez d'ou ca peut être?

    ps:ExecRequete() est en fait un Query->Open().

  2. #2
    Membre éprouvé
    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
    Par défaut
    Bonjour,

    Juste 2 questions:
    . pourquoi mettre des ' () ' autour des champs dans le select statement ?
    . c'est quoi AddParametre() ?

    Merci
    @+

  3. #3
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    il parait bien difficile de débugger un code qui soit une succession d'appel de fonctions dont on a pas le corps...

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Les " () ", c'est un test que j'avais fait afin de savoir si les parenthèses pouvaient éviter mon msg d'erreur ...mais ca n'a rien changé .

    Sinon les méthodes que j'appelle pour effectuer mes requêtes sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void GestionQuery::SetRequete(String SValRequete)
    {
            DataModule1->Query->SQL->Text = SValRequete;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void GestionQuery::AddParametre(String SValParametre)
    {
            DataModule1->Query->Params->Items[ICompteur]->AsString =SValParametre;
            ICompteur++;
    }
    AddParametre me permet d'ajouter autant de paramètres que j'ai besoin suivant la requête tapé.D'ou le compteur qui s'incrémente afin que les paramètres soient mis dans le bon ordre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void GestionQuery::ExecRequete()
    {
            //DataModule1->Query->Close();
            DataModule1->Query->Open();
    }
    Voila je pense vous avoir mis tout ce que j'utilisai.

  5. #5
    Membre confirmé Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Par défaut
    Bonjour,

    Votre classe s'appuye sur des TADOQuery ?

    si c'est le cas,
    Avez vous mis le parametre ParamCheck à vrai ?

    Concernant le rajout du parametre, j'aurais plutot vu un code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     DataModule1->Query->Params->AddParameter;
     DataModule1->Query->Params->Items[ICompteur]->DataType = ftString;
     DataModule1->Query->Params->Items[ICompteur]->Value = SValParametre;
     ICompteur++;
    Cordialement,

    Fabrice

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Cela va peut être paraitre un peu bête comme réponse, mais ma classe s'appuie sur un DataModule dans lequel on retrouve un TQuery et un TDatabase.

    Dans cette histoire on s'en fiche un peu du TDatabase, mais ce qui m'étonne c'est que j'ai déja une autre requête SELECT qui part du même principe que celle ci, et elle fonctionne.

    La voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ObjGestionQuery->RAZCpteur();
    ObjGestionQuery->SetRequete("SELECT * FROM tjeux WHERE NumeroJeu=:ParamNumeroJeu");
    ObjGestionQuery->AddParametre(SValNumeroJeu);
    ObjGestionQuery->ExecRequete();
    Au final ,je procède de la même manière mais ma base de donnée me renvoie un msg d'erreur qui me dit que je fais une violation de clé. Je ferai un UPDATE ou un INSERT INTO, j'aurai pensé avoir fait un doublon, mais la avec le SELECT, je ne fais que lire le contenu de la base.

    Pour l'ajout de paramètre j'avais essayé ceci aussi, ca fait certe, un peu usine à gaz, mais ca marche aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void GestionQuery::Param(String NameParam, String ValParam)
    {
            DataModule1->Query->ParamByName(NameParam)->Value = ValParam;
    }

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    Bonjour,

    Juste 2 questions:
    . pourquoi mettre des ' () ' autour des champs dans le select statement ?
    . c'est quoi AddParametre() ?

    Merci
    @+

    J'ai ré essayé à tout hasard d'enlever les ' () ' autour de mes champs, et magique, on recompile, on reconstruit le projet et finalement, le soucis venait d'ici...

    J'ai passé pas mal de temps à chercher ca !

    Merci pour vos réponses quand même

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

Discussions similaires

  1. aide sur une requete sql
    Par digger dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/11/2006, 17h19
  2. Erreur dans une requete SQL
    Par Seth77 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/09/2006, 12h17
  3. erreur dans une requete sql
    Par Skizo dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 31/05/2006, 15h57
  4. [MySQL 4.1] probleme d'accents sur une requete SQL
    Par tatayoyo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/11/2005, 16h06
  5. pb ordre sur une requete SQL
    Par richard038 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/08/2005, 15h26

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