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 :

[C++B5]Probl�me avec une requ�te SQL sur BDD ACCESS


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par d�faut [C++B5]Probl�me avec une requ�te SQL sur BDD ACCESS
    Bonjour,

    J'ai donc un probl�me avec une requ�te comme le titre l'indique, en fait lorsque je lance mon programme, j'entre des infos qui sont ensuites envoy�s � la base de donn�e via INSERT INTO, mais lors de l'envoie, C++ builder m'indique cette erreur :



    voici le code de ma methode :

    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
    void __fastcall TForm1::bInsererClick(TObject *Sender)
    {
       int sizeNom = lineNomJeux->SelLength;
       int sizeDesc = txtDescription->SelLength;
       int sizeNote = lineNote->SelLength;
     
       char *nom = new char[sizeNom];
       char *desc = new char[sizeDesc];
       char *note = new char[sizeNote];
       char req[100];
     
       lineNomJeux->GetSelTextBuf(nom, sizeNom); //On affecte à nom le contenu du champs Nom du jeux.
       txtDescription->GetSelTextBuf(desc, sizeDesc);
       lineNote->GetSelTextBuf(note, sizeNote);
     
       SessionJeux->Open();
       Database1->Open();
       requeteInsertion->SQL->Clear();
     
       sprintf(req, "INSERT INTO jeux(Nom,Description,Note) VALUES('%s','%s','%s')", nom, desc, note);
       requeteInsertion->SQL->Add(req);
       requeteInsertion->ExecSQL();
     
       Database1->Close();
       SessionJeux->Close();
    }
    J'ai �cum� Google mais j'ai pas trouv� de r�ponse � mon probl�me.

    Merci d'avance.

  2. #2
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Salut, premi�re remarque, sous Builder il y as des objet plus �volu� qui permette de remplac� le char* et le sprintf (qui est du C � la base alors qu'ici nous somme normalement en C++), mais tu peut avoir tes raisons � utiliser cette m�thode.
    Si non pour ton probl�me, ton message d'erreur indique une erreur du cot� de la requ�te SQL, il as plusieurs possibilit� :
    • Le nom de ta table n'est pas jeux dans ta base (il faut que la case soit identique)
    • la table jeux ne contient pas de colonne Nom, Description ou Note (il faut que la case soit identique)
    • Dans ta table, une de ces colonne n'est pas d�finit comme chaine de caract�re et dans ce cas la il faut retir� les guillemet � la valeur correspondante.
    • L'un de tes char* nom, desc ou note contient une guillemet ce qui interf�re avec celle de la requ�te et dans ce cas il faut doubl� la guillemet contenus dans ta variable
    Je pense que c'est tout ce que je peut dire pour le moment

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par d�faut
    En effet j'utilise des tableaux de char pour une certaines raison, j'utilise aussi des AnsiString fournis par C++ Builder, mais le probl�me ne provient pas de l�, et mes chaines nom, desc, note... ne contiennent pas de guillemet, en tout cas m�me si il n'y en a pas �a donne toujours l'erreur.

    Je suis finalement parvenu � faire ce que je voulais, par un moyen d�tourn�, j'ai utilis� le composant TTable et ses possibilit�s notamment dans ce cas l� sa methode Insert().
    Mais, je ne veux pas m'en arr�ter l� et je veux comprendre pourquoi avais-je cette erreur. J'ai bien lu tes propositions, mais aucune n'�taient � mettre en cause (j'ai v�rifi�). De mon c�t� je suppose peut-�tre qu'il s'agit d'un probl�me de driver ou quelque chose dans le genre puisque lorsque j'affiche la requ�te cr��, les champs dans VALUES() aparaissent vident, ce qui normalement ne devrait pas pos� de probl�me puisque la requ�te est tout de m�me valide.
    Ensuite la question est, pourquoi apparaissent-ils vident?

  4. #4
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Si ton champs VALUES est vide, ce n'est pas un probl�me de requete, mais un probl�me de concatenation de chaine, le sprintf ne fonctionne pas correctement et tu as du coup une requete invalide, t'as m�thode est la bonne (celle du premier message), il faut juste r�ussir as produir la requete correctement.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par d�faut
    Ok je vais trouver une autre fa�on de faire dans ce cas l� pour remplir la chaine req avec ma requ�te.

    Sinon tu as dit, "t'as m�thode est la bonne (celle du premier message)", est-ce mauvais d'utiliser un TTable et Insert() ?
    D�sol� de t'emb�ter avec ces questions, mais j'ai besoin de me former l�-dessus au vu de mon stage de fin d'ann�e.
    Merci de ton aide.

  6. #6
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Ce n'est pas mauvais, mais si tu n'en as pas l'utilit� dans ton programme, il y as d'autre m�thode beaucoup plus efficace pour lancer une requ�te � une base de donn�es, notamment la premi�re utilis�

    PS : tu n'emb�te personne, le forum est fait pour cela

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 16
    Dernier message: 03/06/2011, 00h53
  2. Probl�me avec une requ�te sql
    Par mika0102 dans le forum Langage SQL
    R�ponses: 8
    Dernier message: 10/10/2007, 15h50
  3. [SQL] Probl�me avec une requ�te sql
    Par bodysplash007 dans le forum PHP & Base de donn�es
    R�ponses: 22
    Dernier message: 11/05/2007, 17h30
  4. [MySQL] Probl�me avec une requ�te SQL
    Par chobol dans le forum PHP & Base de donn�es
    R�ponses: 12
    Dernier message: 11/05/2006, 12h29
  5. [VB]Probl�me avec une requ�te SQL
    Par Tyrael62 dans le forum VB 6 et ant�rieur
    R�ponses: 7
    Dernier message: 18/03/2006, 17h47

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