Syntaxe insert

weahgeorges Messages postés 17 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 6 juillet 2009 - 15 avril 2009 à 11:06
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 15 avril 2009 à 14:56
  bonjour,
j'ai un souci, actu je suis entrain de rediger un programme qui doit lire d'un fichier et inserer dans la base de données.  J'utilise les API de mysql++. Actu tout va bien, creation et insertion dans la base, mais ceci ne fonctionne que si j'insère en dur

query << "INSERT INTO stock(CodeIntervention) VALUES('weahgeorges'); ";
si je fais par exemple 
string contenu= "weahgeorges";
query << "INSERT INTO stock(CodeIntervention) VALUES(contenu); ";
ça ne marche plus. Quelqu'un aurait il la bonne syntaxe?? Merci d'avance 

  

3 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2009 à 11:49
A toi de formater ta requete.


char buf[200]; // ADAPTER TAILLE SI RISQUE OVERFLOW
char *c, *d;
d = buf;
c = "INSERT INTO stock(CodeIntervention) VALUES('";
while(*d = *c++) d++; // COPIE DEBUT DE REQUETE
c = contenu; // FAISONS QUE TU AS UN char[] contenu REMPLI
while(*d = *c++) d++; // COPIE DE contenu
*((DWORD*) d) = 0x3B2927; // AJOUT FIN DE REQUETE "');"

ciao...
BruNews, MVP VC++
0
weahgeorges Messages postés 17 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 6 juillet 2009
15 avril 2009 à 13:41
  Salut BruNews,


tt d'abord merci pour ta reponse. Excuse moi si ma question est un peu banale mais je voudrais etre sur d'avoir bien compris ton code char *d continedra à la fin ma requete complete. Bon pour executer la requete je fais
query << d;
query.store()
J'ai fait cela , ça ne donne pas d'erreur mais ça n'insere non rien dans la table. Voici mon code



 




// Create sample data table within sample database.








try
{


// Send the query to create the stock table and execute it.

cout <<




"Creating stock table..."
<< endl;mysqlpp::Query query = con.query();

query <<


"CREATE TABLE stock ("
<<


" CodeIntervention CHAR(30) NOT NULL) "
<<







"ENGINE = InnoDB "
<<


"CHARACTER SET utf8 COLLATE utf8_general_ci"
;query.execute();


char
contenu []=

"weahgeorges"
;

// déclaration d'une chaîne qui contiendra la ligne lue








char
buf[200];

// ADAPTER TAILLE SI RISQUE OVERFLOW






char
*c, *d;d = buf;

c =


"INSERT INTO stock(CodeIntervention) VALUES('"
;


while
(*d = *c++) d++;

// COPIE DEBUT DE REQUETE

c = contenu;




// FAISONS QUE TU AS UN char[] contenu REMPLI






while
(*d = *c++) d++;

// COPIE DE contenu

*((DWORD*) d) = 0x3B2927;




// AJOUT FIN DE REQUETE "');"

query << d;


query.store();




// execution des insertions











}


catch
(

const
mysqlpp::BadQuery& er) {


// Handle any query errors

cerr << endl <<




"Query error: "
<< er.what() << endl;


return
1;}


catch
(

const
mysqlpp::BadConversion& er) {


// Handle bad conversions

cerr << endl <<




"Conversion error: "
<< er.what() << endl <<


"\tretrieved data size: "
<< er.retrieved <<


", actual size: "
<< er.actual_size << endl;


return
1;}


catch
(

const
mysqlpp::Exception& er) {


// Catch-all for any other MySQL++ exceptions

cerr << endl <<




"Error: "
<< er.what() << endl;


return
1;}
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2009 à 14:56
char *d est un POINTEUR, il ne contiendra donc jamais RIEN !!!
Il ne sert que de pointeur d'écruiture pour concaténations en économisant les strcat().

C'est bien entendu buf[] qui contient la requete complète.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous