Bonjour à tous!
Je fais en ce moment un programme en C++ qui se connecte à ma base de donnés MySql 5.1 (Ça venait avec Xampp). La connexion se déroule bien(connexion sur localhost), la requete SQL(Un select ben simple)se déroule correctement aussi sans incidents.
Sauf que quand je veut extraire des résultât un varchar(10), la fonction getString plante. Elle plante à vrai dire dans le fichier xUtiliti, qui ne fait même pas partie de la librairie libmysql.(Il me semble en tout cas).
J'ai alors fait un autre projet de test(même résultât). Voici son code.
Code C/C++ :
/*****************************************************
/ INCLUDES
*****************************************************/
#include "stdafx.h"
//#include <stdlib.h>
#include <iostream>
//#include <sstream>
#include <stdexcept>
#include "mysql_connection.h"
#include "mysql_driver.h"
//#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#define EXAMPLE_HOST "localhost:1764"
#define EXAMPLE_USER "Reader"
#define EXAMPLE_PASS "123"
#define EXAMPLE_DB "test"
using namespace std;
int main(int argc, const char **argv)
{
cout << "Connector/C++ testing No1..." << endl;
cout << endl;
try {
//On instancie le driver et la connexion
sql::mysql::MySQL_Driver *driver; //Le driver????
sql::Connection *con; //La connexion à la BD
sql::Statement *stmt; //La requête SQL à executer
sql::ResultSet *res; //Son résultât
//On se connecte
driver = sql::mysql::get_mysql_driver_instance();
con = driver->connect(EXAMPLE_HOST, EXAMPLE_USER ,EXAMPLE_PASS);
con->setSchema("test"); //La bd s'appelle test
stmt = con->createStatement();
res = stmt->executeQuery("SELECT * FROM utilisateurs");
std::string usrName;
std::string mp;
while (res->next())
{
usrName = res->getString("UsrName"); //ICI ÇA PLANTE!!!!
mp = res->getString("MpPasse");
cout << "Nom: "<<usrName << " - Mot de passe" << mp << std::endl;;
}
delete res;
delete stmt;
delete con;
} catch (sql::SQLException &e) {
/*
The MySQL Connector/C++ throws three different exceptions:
- sql::MethodNotImplementedException (derived from sql::SQLException)
- sql::InvalidArgumentException (derived from sql::SQLException)
- sql::SQLException (derived from std::runtime_error)
*/
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
/* Use what() (derived from std::runtime_error) to fetch the error message */
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
system("pause");
return EXIT_FAILURE;
}
cout << "Fait." << endl;
return EXIT_SUCCESS;
}
Et voici ou ça arrête:
Code C/C++ :
#if _ITERATOR_DEBUG_LEVEL == 2
if (_Myproxy != 0)
{ // proxy allocated, drain it
_Lockit _Lock(_LOCK_DEBUG);
for (_Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter;
/*JUSTE ICI*/ *_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter)
(*_Pnext)->_Myproxy = 0;
_Myproxy->_Myfirstiter = 0;
}
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */
et son message d'erreur:
Exception non gérée à 0x5f80ad4a (msvcp100d.dll) dans MySQL.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xccccccd0.
Je travail sur Visual Studio 2010 Ultimate x86(32 bits) sur un windows 7 professionel. Je l'ai aussi essayé avec Visual Studio 2008 et ça va même pas aussi loin.(Lui il bloque à la connection: impossible de trouver localhost.

)
Je ne pense pas que ce soit mon système car je suis capable d'accèder à ma BD via un script php.
Quelqu'un à une idée? On est environ 20 sur ce problème depuis 2 jours et on a rien trouvé!
Merci à l'avance.