VC++ Express 2008 et MySQL++

VC++ Express 2008 et MySQL++ - C++ - Programmation

Marsh Posté le 20-01-2009 à 01:32:16    

Hello !
 
Je viens de me remettre à la programmation C++ et j'ai pas mal oublié  :(
 
Je veux créer un simple bouton dans une form qui teste si la connexion à un serveur mysql fonctionne.
 
Si quelqu'un a ça sous la main pour que je puisse déjà avoir une bonne base avant d'essayer d'aller plus loin ...
 
J'utilise VC++ Express 2008 avec MySQL++ et les vagues souvenirs que j'ai sont en Borland C++.
 
Merci !  :jap:


Message édité par Pizz le 24-01-2009 à 01:57:55

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 20-01-2009 à 01:32:16   

Reply

Marsh Posté le 20-01-2009 à 09:07:20    

Ca dépend l'API que tu utilises : MFC, Winforms ou WPF ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-01-2009 à 00:06:54    

Winforms
 
Voici le bout de code que j'ai fait pour tester ma connexion mysql :
 

Code :
  1. #include "windows.h"
  2. #include "iostream"
  3. #include "mysql.h"
  4. using namespace std;
  5. #pragma comment(lib, "libmysql.lib" )
  6. int main(void)
  7. {
  8. MYSQL mysql;
  9. mysql_init(&mysql);
  10. if (!mysql_real_connect(&mysql,"localhost","root","","stock",0,NULL,0))
  11. {
  12.  cout << "Erreur \n\n";
  13.  system("pause" );
  14.  return(0);
  15. }
  16. cout << "Connexion ok \n\n";
  17. system("pause" );
  18. mysql_close(&mysql);
  19. return(0);
  20. }


 
ça fonctionne correctement mais je n'arrive pas à mettre ça en place en utilisant une form sur un bouton avec un textbox qui se modifie ...
 
 
merci pour votre aide  :jap:


Message édité par Pizz le 21-01-2009 à 00:56:48

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 24-01-2009 à 01:45:41    

je galère ...
 
mon fichier cpp :
 

Code :
  1. // mysql.cpp : fichier projet principal.
  2. #include "stdafx.h"
  3. #include "Form1.h"
  4. #include "windows.h"
  5. #include "iostream"
  6. #include "mysql.h"
  7. using namespace mysql;
  8. #pragma comment(lib, "libmysql.lib" )
  9. [STAThreadAttribute]
  10. int main(array<System::String ^> ^args)
  11. {
  12. // Activation des effets visuels de Windows XP avant la création de tout contrôle
  13. Application::EnableVisualStyles();
  14. Application::SetCompatibleTextRenderingDefault(false);
  15. // Créer la fenêtre principale et l'exécuter
  16. Application::Run(gcnew Form1());
  17. return 0;
  18. }


 
mon fichier form1.h :
 

Code :
  1. #pragma once
  2. namespace mysql {
  3. using namespace System;
  4. using namespace System::ComponentModel;
  5. using namespace System::Collections;
  6. using namespace System::Windows::Forms;
  7. using namespace System::Data;
  8. using namespace System::Drawing;
  9. /// <summary>
  10. /// Description résumée de Form1
  11. ///
  12. /// AVERTISSEMENT : si vous modifiez le nom de cette classe, vous devrez modifier la
  13. ///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée
  14. ///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
  15. ///          les concepteurs ne pourront pas interagir correctement avec les ressources
  16. ///          localisées associées à ce formulaire.
  17. /// </summary>
  18. public ref class Form1 : public System::Windows::Forms::Form
  19. {
  20. public:
  21.  Form1(void)
  22.  {
  23.   InitializeComponent();
  24.   //
  25.   //TODO : ajoutez ici le code du constructeur
  26.   //
  27.  }
  28. protected:
  29.  /// <summary>
  30.  /// Nettoyage des ressources utilisées.
  31.  /// </summary>
  32.  ~Form1()
  33.  {
  34.   if (components)
  35.   {
  36.    delete components;
  37.   }
  38.  }
  39. private: System::Windows::Forms::Button^  button1;
  40. protected:
  41. private: System::Windows::Forms::TextBox^  textBox1;
  42. protected:
  43. protected:
  44. protected:
  45. protected:
  46. private:
  47.  /// <summary>
  48.  /// Variable nécessaire au concepteur.
  49.  /// </summary>
  50.  System::ComponentModel::Container ^components;
  51. #pragma region Windows Form Designer generated code
  52.  /// <summary>
  53.  /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
  54.  /// le contenu de cette méthode avec l'éditeur de code.
  55.  /// </summary>
  56.  void InitializeComponent(void)
  57.  {
  58.   this->button1 = (gcnew System::Windows::Forms::Button());
  59.   this->textBox1 = (gcnew System::Windows::Forms::TextBox());
  60.   this->SuspendLayout();
  61.   //  
  62.   // button1
  63.   //  
  64.   this->button1->Location = System::Drawing::Point(91, 62);
  65.   this->button1->Name = L"button1";
  66.   this->button1->Size = System::Drawing::Size(97, 29);
  67.   this->button1->TabIndex = 0;
  68.   this->button1->Text = L"Connect to Mysql";
  69.   this->button1->UseVisualStyleBackColor = true;
  70.   this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
  71.   //  
  72.   // textBox1
  73.   //  
  74.   this->textBox1->Location = System::Drawing::Point(92, 126);
  75.   this->textBox1->Name = L"textBox1";
  76.   this->textBox1->Size = System::Drawing::Size(96, 20);
  77.   this->textBox1->TabIndex = 1;
  78.   this->textBox1->Text = L"No";
  79.   this->textBox1->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
  80.   //  
  81.   // Form1
  82.   //  
  83.   this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
  84.   this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
  85.   this->ClientSize = System::Drawing::Size(292, 273);
  86.   this->Controls->Add(this->textBox1);
  87.   this->Controls->Add(this->button1);
  88.   this->MaximizeBox = false;
  89.   this->MinimizeBox = false;
  90.   this->Name = L"Form1";
  91.   this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
  92.   this->Text = L"MYSQL";
  93.   this->ResumeLayout(false);
  94.   this->PerformLayout();
  95.  }
  96. private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
  97.    }
  98. };
  99. }


 
Je n'arrive à mettre le programme de test de connexion sur le clic du bouton ...
 
Merci !


Message édité par Pizz le 24-01-2009 à 01:47:21

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 24-01-2009 à 02:26:30    

ligne 82 : tu ajoutes un handler à l'évenement Click de ton bouton qui va appeler la fonction button1_Click
ligne 109 : cette fonction est vide.... pourtant c'est elle qui doit contenir le test de connexion !
 
je te suggère de lire un tuto sur Winforms, tu n'as manifestement pas compris le fonctionnement
http://nico-pyright.developpez.com [...] /winforms/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-01-2009 à 11:57:04    

je sais qu'à la ligne 109 il n'y a rien, mais c'est justement pour savoir ce que je dois mettre.
 
sinon en toute logique pour moi (qui ne doit pas être logique vu que ça ne fonctionne pas) à la ligne 109 :
 

Code :
  1. private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
  2.  {
  3.  MYSQL *mysql;
  4.  mysql_init(&mysql);
  5.  if (!mysql_real_connect(&mysql,"localhost","root","","test",0,NULL,0))
  6.   {
  7.    textBox1->Text="Yes";
  8.   }
  9.  else
  10.   {
  11.    textBox1->Text="Bouh";
  12.   }
  13.  mysql_close(&mysql);
  14.  }


 
mais il me met que MYSQL, mysql, mysql_init, ... ne sont pas déclarés ou introuvables ...
 
merci pour le lien, je l'avais déjà survolé, mais je vais le lire correctement cette fois.


Message édité par Pizz le 24-01-2009 à 11:59:51

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 24-01-2009 à 12:51:11    

Ligne 4 : tu transmets l'adresse de ton pointeur en argument de mysql_init() au lieu du pointeur en lui même. Voici ce qu'il faut faire :

 
Code :
  1. MYSQL *mysql;
  2. mysql_init(mysql);


Un petit rappel sur les pointeurs : http://mapage.noos.fr/emdel/notes.htm#pointeurs

 

Tu devrais aussi tester la valeur de retour de mysql_init(), qui renvoie NULL si la fonction n'a pas réussi à allouer suffisamment de RAM pour ton objet MYSQL
Ceci dit, comme tu codes en C++, tu ferais mieux d'utiliser un wrapper C++ de MySQL (MySql++ par exemple), au lieu de mélanger du C et du C++

 

edit: ma remarque sue le pointeur mysql est aussi valable pour la ligne 5 et l'argument de mysql_real_connect()


Message édité par Harkonnen le 24-01-2009 à 12:52:12

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-01-2009 à 22:00:50    

1>------ Début de la génération : Projet : mysql, Configuration : Debug Win32 ------
1>Compilation en cours...
1>mysql.cpp
1>Form1.h(111) : error C2065: 'MYSQL' : identificateur non déclaré
1>Form1.h(111) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'mysql'
1>Form1.h(111) : error C2882: 'mysql' : utilisation non conforme d'un identificateur d'espace de noms dans l'expression
1>Form1.h(112) : error C2882: 'mysql' : utilisation non conforme d'un identificateur d'espace de noms dans l'expression
1>Form1.h(112) : error C3861: 'mysql_init' : identificateur introuvable
1>Form1.h(113) : error C2882: 'mysql' : utilisation non conforme d'un identificateur d'espace de noms dans l'expression
1>Form1.h(113) : error C2065: 'NULL' : identificateur non déclaré
1>Form1.h(113) : error C3861: 'mysql_real_connect' : identificateur introuvable
1>Form1.h(121) : error C2882: 'mysql' : utilisation non conforme d'un identificateur d'espace de noms dans l'expression
1>Form1.h(121) : error C3861: 'mysql_close' : identificateur introuvable
1>mysql - 10 erreur(s), 0 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
 
 :cry:


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 30-01-2009 à 22:24:25    

et le "#include mysql.h" dans le fichier Form1.h, il est ou ? :heink:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-01-2009 à 22:24:38    

en mettant tout dans le fichier .h, ça a l'air de fonctionner ...
 
je pensais qu'il fallait mettre les include dans .cpp ...
 
je vais y arriver  :o
 
edit : j'ai remarqué ça aussi avant que tu le dises, tu as dû le penser tellement fort que je l'ai entendu  :o


Message édité par Pizz le 30-01-2009 à 22:25:42

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 30-01-2009 à 22:24:38   

Reply

Marsh Posté le 30-01-2009 à 22:52:59    

ça marche !
 
merci  :jap:


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 11-02-2009 à 17:42:17    

Maintenant que j'arrive à savoir si le serveur est en ligne ou pas, j'aimerai essayer d'afficher la valeur d'une requête dans un TextBox ... mais je n'arrive pas à convertir le résultat en texte ...
 
Si quelqu'un peut encore m'aider ...


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 12-02-2009 à 00:00:17    

Qu'appelles tu "la valeur d'une requête" ? Le résultat retourné par la requête ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-02-2009 à 23:36:09    

c'est le résultat de ma requête.
 

Code :
  1. if (!mysql_real_connect(mySQL,"localhost","root","","stock",0,NULL,0))
  2.     {
  3.     textBox1->Text="error";
  4.     }
  5. else
  6.     {
  7.     if (!mysql_query(mySQL,"SELECT * FROM fournisseurs WHERE id=2" ))
  8.         {
  9.         resultat=mysql_store_result(mySQL);
  10.         textBox2->Text=System::Convert::ToString(mysql_num_fields(resultat));
  11.         while (colonne=mysql_fetch_row(resultat))
  12.             {
  13.             textBox1->Text=System::Convert::ToString(colonne[1]);
  14.             }
  15.         mysql_free_result(resultat);
  16.         }
  17.     else
  18.         {
  19.         textBox1->Text="no result";
  20.         }
  21.     }
  22. mysql_close(mySQL);


 
Quand je lance le programme, il me met "True" dans le textBox1 au lieu de la valeur qui se trouve dans la base de données ....
 
Ce qui s'affiche dans le textBox2 est correct.
 
Merci pour votre aide !
 
 :jap:


Message édité par Pizz le 14-02-2009 à 03:09:25

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 18-02-2009 à 11:04:42    

:(


Message édité par Pizz le 18-02-2009 à 11:04:51

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed