MySql GetString Acess Violation

Résolu
Benmic Messages postés 2 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 4 septembre 2010 - 1 sept. 2010 à 21:15
Benmic Messages postés 2 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 4 septembre 2010 - 4 sept. 2010 à 13:32
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.
/*****************************************************
/ INCLUDES
*****************************************************/
#include "stdafx.h"

//#include <stdlib.h>
#include 
//#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: "<_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.

1 réponse

Benmic Messages postés 2 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 4 septembre 2010
4 sept. 2010 à 13:32
Ok. On a trouvé. C'est un problème d'environnement de développement.

Pour Visual Studio 2010, il fallait compiler le code source MySQL Connector/C++ avec Visual Studio 2010. Celui-ci est beaucoup plus pointilleux que le 2005 ou encore le 2008 qui, soit dit en passant, marche finalement très bien avec les binairies donnés sur le site de mySQL . (J'ai trouvé mon erreur : le pare feu n'ouvrait pas le port 3306 pour Visual Studio 2008, mais le faisait pour le 2010).

Je sais que ces fichiers binaires pourraient être utiles à d'autres gens, alors avant de les mettre sur le net, je veux savoir si je le peux sans risquer de me faire chicaner.

Bye
3
Rejoignez-nous