[Resolu]Problème de compilation API MYSQL

Problème de compilation API MYSQL [Resolu] - C++ - Programmation

Marsh Posté le 16-06-2009 à 10:53:28    

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 :

Code :
  1. MYSQL *conn;
  2.                      MYSQL_RES *res;
  3.                      MYSQL_ROW row;
  4.                      char *server = "localhost";
  5.                      char *user = "thanks";
  6.                      char *password = "thanks";
  7.                      char *database = "***";
  8.  
  9.                      conn = mysql_init(NULL);
  10.  
  11.  
  12.                      if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))
  13.                      {
  14.                         fprintf(stderr, "%s\n", mysql_error(conn));
  15.                         return(0);
  16.                      }
  17.  
  18.                      string adresse_ip = inet_ntoa(serveur->sin.sin_addr);
  19.                      char sql_query[1000];
  20.                      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);
  21.                       if (mysql_query(conn, sql_query))
  22.                       {
  23.                          fprintf(stderr, "%s\n", mysql_error(conn));
  24.                          return(0);
  25.                       }
  26.                      
  27.                      
  28.                       cout<< "Insertion réussi"<<endl;
  29.                      
  30.                      
  31.  
  32.                    
  33.                      mysql_close(conn);


 
 
Voici les variables :
 
Code :
 

Code :
  1. string etat_save;
  2.   string save;
  3.   string base;
  4.   string etat_base;
  5.   string ligne;
  6.   string etat_flux;
  7.   string flux;
  8.   string etat_tbs;
  9.   string tbs;
  10.   string etat_proc;
  11.   string proc;
  12.   string etat_batch;
  13.   string batch;
  14.   string etat_fs;
  15.   string fs;


 
L'erreur de compilation est :
 

Spoiler :

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


 
Cordialement


Message édité par thanks33 le 17-06-2009 à 08:42:36
Reply

Marsh Posté le 16-06-2009 à 10:53:28   

Reply

Marsh Posté le 16-06-2009 à 13:43:43    

Dans sprintif, extrait le char* de tes string : etat_save.c_str() etc

 

Ou fait du C++ jusqu'au bout,utilise ostringsream :o


Message édité par Joel F le 16-06-2009 à 13:44:37
Reply

Marsh Posté le 16-06-2009 à 13:49:15    

merci pour ta réponse,
 
 
donc si j'ai bien compris, la requête devra ressembler a cela :
 
 

Code :
  1. 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 :
 
 

Code :
  1. `c_str' has not been declared


 
Pourtant j'ai bien la librairie
 
 

Code :
  1. #include <string>


 
 

Code :
  1. request for member of non-aggregate type before '(' token


 

Code :
  1. cannot convert `std::string*' to `const char*' for argument `2' to `int mysql_query(MYSQL*, const char*)'


 
Cordialement

Reply

Marsh Posté le 16-06-2009 à 14:28:57    

T'as pas changé d'autre truc là ???
Repose ton code modifié y a une couille


Message édité par Joel F le 16-06-2009 à 14:30:14
Reply

Marsh Posté le 17-06-2009 à 07:25:39    

Voici mon code, mais il y a toujours des erreurs
 
 

Code :
  1. 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`)",
  2.                   "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')",
  3.                   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é :
 
 
 

Code :
  1. #include <sstream>


 
 
 
Voici les erreurs :
 
 

Code :
  1. no matching function for call to `std::basic_ostream<char, std::char_traits<char> >::basic_ostream(std::string[1000], 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*)'


 
La librairie que j'ai ajouté ne correspond peu être pas.
 
 

Code :
  1. cannot convert `std::string*' to `const char*' for argument `2' to `int mysql_query(MYSQL*, const char*)'
  2. cette erreur est normal vu que je n'arrive pas a convertir ma chaine en char.


 
Cordialement

Reply

Marsh Posté le 17-06-2009 à 07:47:11    

et lire la doc de ostringstream non , ca te dirais pas ?

Reply

Marsh Posté le 17-06-2009 à 07:54:13    

j'ai effectuer des modification.
 
 
la librairie que j'ai ajouté :
 
Code :
 

Code :
  1. #include <sstream>


 
 
 
Voici les erreurs :
 

Code :
  1. 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 :
  1. 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.
 
 
 
 
 

Code :
  1. 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 :
  1. string sql_query[1000];


 
Nouvelle :
 
 
 

Code :
  1. char* sql_query;


 
 
Pour répondre a ta question sa fait plus de 6 heures que je suis sur cette erreur j'ai eu le temps de lire une multitude de doc
 
Cordialement


Message édité par thanks33 le 17-06-2009 à 07:55:10
Reply

Marsh Posté le 17-06-2009 à 08:06:05    

fait une pause tu fais n'importe quoi ou bien alros arrete de nous faire croire que tu as lu la moindre doc.
 

Code :
  1. string flux,base,fs,proc ; // tc pr els autres
  2. ostringstream sql_query;
  3. 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, '" << adresse_ip << "', NULL, NULL, NULL, NULL, NULL, '"<<flux<<"', '"<<base<<"', '"<<fs<<"', '"<<proc<<"', '"<<batch<<'", '"<<tbs<<"', '"<<save<<"', NULL, '"<<etat_serveur<<"', '"<<etat_fs<<"', '"<<etat_proc<<"', '"<<etat_batch<<"', '"<<etat_tbs<<"', '"<<etat_base<<"', '"<<etat_flux<<"', '"<< etat_save<<"')";
  4. // ...
  5. if (mysql_query(conn, sql_query.str().c_str()))


 
Et lis vraiment la doc de ostringstream pr comprendre ce que j'ai ecris.
Ils e peut que j'ai oublié un champ, j'ai recopié à larache mais ca te donne au moins la syntaxe

Reply

Marsh Posté le 17-06-2009 à 08:31:36    

merci beaucoup pour ta réponse,
 
voici la doc que j'avai trouvé sur ostringstream
 
http://www.cplusplus.com/reference [...] ingstream/
 
 
Je passe le sujet en résolu, un énorme merci a toi
 
Cordialement

Message cité 1 fois
Message édité par thanks33 le 17-06-2009 à 08:43:32
Reply

Marsh Posté le 17-06-2009 à 09:06:21    

thanks33 a écrit :


voici la doc que j'avai trouvé sur ostringstream
 
http://www.cplusplus.com/reference [...] ingstream/


 
T'étais sur le bon site mais pas forcement leplus clair.
 

Reply

Marsh Posté le 17-06-2009 à 09:06:21   

Reply

Marsh Posté le 17-06-2009 à 09:09:36    

c'est pour sa que j'ai rien compris, tu aurai un bon site de documentation a me conseiller?
 
Cordialement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed