Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2890 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Connexion MySQL et Visual 2010 C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Connexion MySQL et Visual 2010 C++

n°2121852
jflahaut62​200
Posté le 17-01-2012 à 15:42:38  profilanswer
 

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.

mood
Publicité
Posté le 17-01-2012 à 15:42:38  profilanswer
 

n°2121968
jflahaut62​200
Posté le 18-01-2012 à 08:08:02  profilanswer
 

Il semble que le pointeur "mysql" soit encore à NULL malgré l'initialisation

n°2121989
gilou
Modérateur
Modzilla
Posté le 18-01-2012 à 10:00:41  profilanswer
 

Pourquoi ne pas faire comme la grande majorité des exemples de code sur le web:
 
MYSQL *mysql = mysql_init(NULL);  
if (mysql == NULL)
  ...
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2122000
jflahaut62​200
Posté le 18-01-2012 à 10:47:50  profilanswer
 

Ca ne fonctionne pas non plus, il y a la même erreur sur la ligne : NombreColonne = mysql_num_fields(Resultat);

n°2122013
gilou
Modérateur
Modzilla
Posté le 18-01-2012 à 11:15:11  profilanswer
 

Code :
  1. //Déclaration des pointeurs de structure  
  2.     MYSQL_RES *Resultat = NULL;
  3.     MYSQL_ROW row;
  4.         Resultat = mysql_store_result(&mysql);
  5.     if (Resultat)  // il y'a des lignes  
  6.     {
  7.      NombreColonne = mysql_num_fields(Resultat);
  8.      // recupérer les lignes, puis appeler mysql_free_result(result)  
  9.     }

La ligne dans cette partie ci?
Ça a l'air bon pourtant.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2122047
jflahaut62​200
Posté le 18-01-2012 à 13:06:34  profilanswer
 

Oui cette ligne ci, La variable Resultat ne contient rien :(

n°2122201
gilou
Modérateur
Modzilla
Posté le 18-01-2012 à 22:54:42  profilanswer
 

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.)
 
Une fois que vous avez appelé mysql_store_result() et obtenu un résultat qui n'est pas un pointeur nul, vous devez appeler mysql_num_rows() pour trouver combien de lignes contient le jeu de résultats.

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2122246
jflahaut62​200
Posté le 19-01-2012 à 10:29:25  profilanswer
 

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.

n°2122288
jflahaut62​200
Posté le 19-01-2012 à 11:54:01  profilanswer
 

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);
 }
}


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Connexion MySQL et Visual 2010 C++

 

Sujets relatifs
Mysql : Question sur les relations[C#] Webbrowser simple et robuste
[C#] Minimiser fenêtre principale si dialog fille minimiséeAide programmation C !!!
Aide exercice informatique C :Probleme compatibilité macro Excel 2003 -vers Excel 2010
pb de connexion SQL/ODBC via PHPun peu perdu avec les storage class du C en revenant de java
[C]Ne trouve pas le fichier Delays.hAccess 2010 : générer un fichier xml
Plus de sujets relatifs à : Connexion MySQL et Visual 2010 C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR