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++ Discussion :

Problème de compilation API MYSQL


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut Problème de compilation API MYSQL
    Bonjour a tous,

    Je me trouve confronté a une erreur que je ne connai pas et que je n'ai jamais vu.


    Voici mon code de l'API :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    MYSQL *conn;
     
                         MYSQL_RES *res;
     
                         MYSQL_ROW row;
     
                         char *server = "localhost";
                         char *user = "thanks";
                         char *password = "thanks";
                         char *database = "***";
     
                         conn = mysql_init(NULL);
     
     
                         if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) 
                         {
                            fprintf(stderr, "%s\n", mysql_error(conn));
                            return(0);
                         }
     
                         string adresse_ip = inet_ntoa(serveur->sin.sin_addr);
                         char sql_query[1000];
                         sprintf(sql_query, "INSERT INTO `historique` (`ID_HISTORIQUE` ,`NOM_SERVEUR` ,`IP_DU_SERVEUR` ,`TYPE_SERVEUR` ,`NOM_APPLICATION` ,`CODE_APPLI` ,`BASILICAT` ,SOUS_BASILICAT` ,`NOM_FLUX` ,`NOM_BASE` ,`NOM_FS` ,`NOM_PROC` ,`NOM_BATCH` ,`NOM_TBS` ,`NOM_SAUVEGARDE` ,`DATE_HEURE` ,`ETAT_SERVEUR` ,`PROBLEME_SCRIPT` ,`FS` ,`PROC` ,`BATCH` ,`TBS` ,`BASE` ,`FLUX` ,`SAUVEGARDE`) VALUES (NULL , NULL, '%s', NULL, NULL, NULL, NULL, NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",adresse_ip, flux,base,fs,proc,batch,tbs,save,etat_serveur,etat_fs,etat_proc,etat_batch,etat_tbs,etat_base,etat_flux,etat_save);
     
                          if (mysql_query(conn, sql_query))
                          {
                             fprintf(stderr, "%s\n", mysql_error(conn));
                             return(0);
                          }
     
     
                          cout<< "Insertion réussi"<<endl;
     
     
     
     
                         mysql_close(conn);

    Voici les variables :

    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
    string etat_save;
      string save;
      string base;
      string etat_base;
      string ligne;
      string etat_flux;
      string flux;
      string etat_tbs;
      string tbs;
      string etat_proc;
      string proc;
      string etat_batch;
      string batch;
      string etat_fs;
      string fs;
    L'erreur de compilation est :

    cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime

    Cordialement

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Visiblement, dans une ellipse (...), tu ne peux passer que des structures pleines, pas des classes.

    essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sprintf(sql_query,
                      "INSERT INTO `historique` (`ID_HISTORIQUE` ,`NOM_SERVEUR` ,`IP_DU_SERVEUR` ,`TYPE_SERVEUR` ,`NOM_APPLICATION` ,`CODE_APPLI` ,`BASILICAT` ,SOUS_BASILICAT` ,`NOM_FLUX` ,`NOM_BASE` ,`NOM_FS` ,`NOM_PROC` ,`NOM_BATCH` ,`NOM_TBS` ,`NOM_SAUVEGARDE` ,`DATE_HEURE` ,`ETAT_SERVEUR` ,`PROBLEME_SCRIPT` ,`FS` ,`PROC` ,`BATCH` ,`TBS` ,`BASE` ,`FLUX` ,`SAUVEGARDE`)
                      VALUES (NULL , NULL, '%s', NULL, NULL, NULL, NULL, NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
                      adresse_ip.c_str(), flux,base,fs,proc,batch,tbs,save,etat_serveur,etat_fs,etat_proc,etat_batch,etat_tbs,etat_base,etat_flux,etat_save);
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    merci pour ta réponse,

    malheureusement d'autres erreurs apparaissent

    les voici :

    no matching function for call to `sprintf(std::string[1000], const char[510], const char*, std::string&, std::string&, std::string&, std::string&, std::string&, std::string&, std::string&, char*&, std::string&, std::string&, std::string&, std::string&, std::string&, std::string&, std::string&)'
    note : int sprintf(char*, const char*, ...)
    cannot convert `std::string*' to `const char*' for argument `2' to `int mysql_query(MYSQL*, const char*)'
    Cordialement

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Les messages d'erreurs sont pourtant clairs, il ne veut pas du ype string, il veut des char * ou des const char *.

    Partout où tu utilises des strings (dans ces appels), il faut extraire la chaine de caractères en faisant string.c_str()
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    donc si j'ai bien compris, la requête devra ressembler a cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sprintf(sql_query, "INSERT INTO `historique` (`ID_HISTORIQUE` ,`NOM_SERVEUR` ,`IP_DU_SERVEUR` ,`TYPE_SERVEUR` ,`NOM_APPLICATION` ,`CODE_APPLI` ,`BASILICAT` ,SOUS_BASILICAT` ,`NOM_FLUX` ,`NOM_BASE` ,`NOM_FS` ,`NOM_PROC` ,`NOM_BATCH` ,`NOM_TBS` ,`NOM_SAUVEGARDE` ,`DATE_HEURE` ,`ETAT_SERVEUR` ,`PROBLEME_SCRIPT` ,`FS` ,`PROC` ,`BATCH` ,`TBS` ,`BASE` ,`FLUX` ,`SAUVEGARDE`) VALUES (NULL , NULL, '%s', NULL, NULL, NULL, NULL, NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",adresse_ip.c_str(), flux.c_str(),base.c_str(),fs.c_str(),proc.c_str(),batch.c_str(),tbs.c_str(),save.c_str(),etat_serveur.c_str(),etat_fs.c_str(),etat_proc.c_str(),etat_batch.c_str(),etat_tbs.c_str(),etat_base.c_str(),etat_flux.c_str(),etat_save.c_str());
    il me dit comme erreur :

    `c_str' has not been declared
    Pourtant j'ai bien la librairie
    request for member of non-aggregate type before '(' token
    cannot convert `std::string*' to `const char*' for argument `2' to `int mysql_query(MYSQL*, const char*)'
    Cordialement

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    Ça va faire 5h que j'essaye de débug le programme, je n'y arrive pas aidez moi s'il vous plait


    Cordialement

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Visiblement, quelque part tu appelles c_str() sur quelque chose qui n'est pas une string.

    Aussi, sache qu'il est impossible de faire un sprintf() directement dans une string, tu dois passer par un buffer.
    Ou suivre la philosophie C++, et utiliser un std::ostringstream à la place de sprintf().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    Merci pour ta réponse,


    alors j'ai essayé ce que tu m'as dit, mais quelques erreurs subsistent encore.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ostringstream(sql_query, "INSERT INTO `historique` (`ID_HISTORIQUE` ,`NOM_SERVEUR` ,`IP_DU_SERVEUR` ,`TYPE_SERVEUR` ,`NOM_APPLICATION` ,`CODE_APPLI` ,`BASILICAT` ,SOUS_BASILICAT` ,`NOM_FLUX` ,`NOM_BASE` ,`NOM_FS` ,`NOM_PROC` ,`NOM_BATCH` ,`NOM_TBS` ,`NOM_SAUVEGARDE` ,`DATE_HEURE` ,`ETAT_SERVEUR` ,`PROBLEME_SCRIPT` ,`FS` ,`PROC` ,`BATCH` ,`TBS` ,`BASE` ,`FLUX` ,`SAUVEGARDE`)",
                      "VALUES (NULL , NULL, '%s', NULL, NULL, NULL, NULL, NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
                      adresse_ip.c_str(), flux.c_str(),base.c_str(),fs.c_str(),proc.c_str(),batch.c_str(),tbs.c_str(),save.c_str(),etat_serveur.c_str(),etat_fs.c_str(),etat_proc.c_str(),etat_batch.c_str(),etat_tbs.c_str(),etat_base.c_str(),etat_flux.c_str(),etat_save.c_str());

    la librairie que j'ai ajouté :



    Voici les erreurs :

    no matching function for call to `std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(char*&, const char[351], const char[159], const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*)'
    note :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     note: std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(const std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >&)
    La librairie que j'ai ajouté ne correspond peu être pas.





    cannot convert `std::string*' to `const char*' for argument `2' to `int mysql_query(MYSQL*, const char*)'
    Cette erreur est résolu en changent la ligne

    ancienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string sql_query[1000];
    Nouvelle :

    Cordialement

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Déjà résolu mais si ça aide quelqu'un...

    on ne peut pas juste remplacer sprintf par ostringstream.
    C'est un objet particulier avec sa propre signature de constructeur et autre.

    voir à cette page pour avoir plus d'info :

    http://www.cplusplus.com/reference/i...ostringstream/

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

Discussions similaires

  1. Probléme sur las API MySql - fonction manquante
    Par boopix dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/04/2007, 20h55
  2. Problème utilisation API MySQL
    Par naiko dans le forum C
    Réponses: 4
    Dernier message: 11/05/2006, 09h55
  3. compilation api mysql c
    Par nestam dans le forum C
    Réponses: 4
    Dernier message: 04/10/2005, 09h11
  4. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26
  5. Api mysql avec Devc++, erreur de compilation
    Par Viiince dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 15/06/2004, 17h19

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