Connexion MySQL et Visual 2010 C++ - C++ - Programmation
Marsh Posté le 18-01-2012 à 08:08:02
Il semble que le pointeur "mysql" soit encore à NULL malgré l'initialisation
Marsh Posté le 18-01-2012 à 10:00:41
Pourquoi ne pas faire comme la grande majorité des exemples de code sur le web:
MYSQL *mysql = mysql_init(NULL);
if (mysql == NULL)
...
A+,
Marsh Posté le 18-01-2012 à 10:47:50
Ca ne fonctionne pas non plus, il y a la même erreur sur la ligne : NombreColonne = mysql_num_fields(Resultat);
Marsh Posté le 18-01-2012 à 11:15:11
Code :
|
La ligne dans cette partie ci?
Ça a l'air bon pourtant.
A+,
Marsh Posté le 18-01-2012 à 13:06:34
Oui cette ligne ci, La variable Resultat ne contient rien
Marsh Posté le 18-01-2012 à 22:54:42
D'après la doc:
Citation : Un jeu de résultat vide est retourné si aucune ligne n'est retournée. (Un jeu de résultats vide diffère d'un pointeur nul en tant que valeur de retour.) |
Je testerais donc ceci:
Resultat = mysql_store_result(&mysql);
if (Resultat && mysql_num_rows(Resultat)) {
NombreColonne = mysql_num_fields(Resultat);
// recupérer les lignes, puis appeler mysql_free_result(result)
}
A+,
Marsh Posté le 19-01-2012 à 10:29:25
Après un passage en mode Debug, je me rend compte que mysql ne contient pas les données qu'il devrait avoir, de plus j'ai testé cette ligne : "Rep=mysql_query(&mysql, "SELECT * FROM table" );
if(Rep!=0)
cout<<"Erreur Requete";"
et le programme me renvoit Erreur Requete.
Marsh Posté le 19-01-2012 à 11:54:01
J'ai retoucher le code et ça marche :
#include <iostream>
#include <stdlib.h>
#include <winsock.h>
#include <MYSQL/mysql.h>
#include "mysql.h"
#define IP_DB "localhost"
#define LOGIN_DB "root"
#define PASS_DB ""
#define NAME_DB "TEST"
using namespace std;
void main (void)
{
int i;
unsigned int NombreColonne;
MYSQL *mysql;
mysql = mysql_init(NULL);
mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "option" );
if(mysql_real_connect(mysql, IP_DB, LOGIN_DB, PASS_DB, NAME_DB, 0, NULL, 0)==NULL)
cout << "Erreur : Connexion DB impossible" << endl;
else
{
if(mysql_query(mysql, "SELECT * FROM `table`" ) == 0)
cout << "OK" << endl;
else
cout << mysql_error(mysql) << endl;
MYSQL_RES *Resultat = NULL;
MYSQL_ROW row=NULL;
//On met le jeu de résultat dans le pointeur result
Resultat = mysql_store_result(mysql);
if (Resultat && mysql_num_rows(Resultat))
NombreColonne = mysql_num_fields(Resultat);
while ((row=mysql_fetch_row(Resultat))!=NULL)
{
for(i=0; i<NombreColonne;i++)
cout<<"["<<row[i]<<"]";
cout<<endl;
}
mysql_close(mysql);
}
}
Marsh Posté le 17-01-2012 à 15:42:38
Bonjour, J'essaie de me mettre aux base de donnée en C++ mais voila j'ai déjà un problème que je ne comprend pas du tout : Violation d'accès lors de la lecture de l'emplacement 0x0000003c.
Voici le code :
#include <iostream>
#include <stdlib.h>
#include <winsock.h>
#include <MYSQL/mysql.h>
using namespace std;
void main (void)
{
int i;
unsigned int NombreColonne;
MYSQL mysql;
if((mysql_init(&mysql))==NULL)
cout<<"Erreur Initialisation"<<endl;
else
{
if((mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option" ))!=0)
cout<<"Erreur MYSQL OPTION"<<endl;
else
{
// Connection Base de Données;
//if((mysql_real_connect(&mysql, "localhost", "root", "xxxx", 0, 0, 0,0))==NULL)
if((mysql_real_connect(&mysql,"localhost"," "," ","TEST",0,NULL,0))==NULL)
{
//Requête qui sélectionne tout dans la table
mysql_query(&mysql, "SELECT * FROM TABLE" );
//Déclaration des pointeurs de structure
MYSQL_RES *Resultat = NULL;
MYSQL_ROW row;
Resultat = mysql_store_result(&mysql);
if (Resultat) // il y'a des lignes
{
NombreColonne = mysql_num_fields(Resultat);
// recupérer les lignes, puis appeler mysql_free_result(result)
}
//On met le jeu de résultat dans le pointeur result
Resultat = mysql_use_result(&mysql);
// Le nombre de colonne
NombreColonne = mysql_num_fields(Resultat);
NombreColonne = mysql_field_count(&mysql);
/* Tant qu'il y a des lignes */
while ((row=mysql_fetch_row(Resultat))!=NULL)
{
for(i=0; i<NombreColonne;i++)
cout<<"["<<row[i]<<"]";
cout<<endl;
}
//Libération/Suppression du jeu de résultat
mysql_free_result(Resultat);
//Fermeture de MySQL
mysql_close(&mysql);
}
else // Sinon ...
{
cout<<"Une erreur s'est produite lors de la connexion a la BDD!"<<endl<<flush;
}
}
}
}
Je suis sous Windows XP, j'utilise Visual Studio 2010 C++ et EasyPHP. Merci beaucoup.