Bonjour tous le monde,

Voila je suis étudiant et je suis actuellement en projet avec un collègue.
Mon projet consiste à crée un site web pour que les clients, ou les techniciens puissent vérifier la température sur n'importe quels capteurs soit en grahpique ou en tableaux.

Pour cela je dois remettre à mon camarade une class MySQL en c++ qui lui permet de se connecter et de stocker ces données dans la BDD et ensuite crée un site en PHP.

J'ai remis ma class à mon ami mais j'ai un soucis, j'ai plusieurs tables et j'ai fais les jointures entre les clés primaires et clés étrangères et cela ne fonctionne pas j'ai beau réfléchir et voir si ma syntaxe est correct mais rien n'a faire je ne vois pas mon erreur. Je travail sur window xp et CBuilder 3

Pouvez-vous m'aider à comprendre mon erreur?

Mon .cpp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
//---------------------------------------------------------------------------
#include <vcl.h>
#include <mysql.h>
#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <string.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
 
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// Constructeur avec paramètres
__fastcall MySQL_BDD::MySQL_BDD( char* host, char * user, char* passwd, char* db, int port, char* socket, int drapeau)
{
 
 // initialisation de MYSQL (OBLIGATOIRE)
 mysqlH = NULL;
 // allocation objet mysqlH
 mysqlH = mysql_init(mysqlH);
 
 this->host = host;
 this->user = user;
 this->passwd = passwd;
 this->db = db;
 this->port = port;
 this->socket = socket;
 this->drapeau = drapeau;
 
 // initialisation de mes pointeurs
 tab_nom_societe      = NULL;
 tab_nom_batiment     = NULL;
 tab_rue              = NULL;
 tab_ville            = NULL;
 tab_addr_mac_capteur = NULL;
 tab_date_heure       = NULL;
 tab_nom_table        = NULL;
 tab_nom_champs       = NULL;
 
 
}
//---------------------------------------------------------------------------
bool __fastcall MySQL_BDD::conect_Serveur_BDD()
{
  // connexion au serveur + Base de données
 if(mysql_real_connect(mysqlH, host, user, passwd, db, port, socket, drapeau))
    {
    test = true;
    }
 else
   {
    test = false;
   }
 
 return (test); // test renvoie bien true test ok
}
//---------------------------------------------------------------------------
// assure la déconnexion au serveur de BD
void __fastcall MySQL_BDD::deconect_Serveur_BDD()
{
      mysql_close(mysqlH);
  // remet le pointeur à NULL
     mysqlH = NULL;
}
//---------------------------------------------------------------------------
// méthode d'affichage classique à modifié plus tard
void __fastcall MySQL_BDD::affichage_infos()
{
   sprintf(info,"Serveur : %s , Base de données : %s ",host, db);
   Form1->Memo2->Lines->Add(info);
 
}
//---------------------------------------------------------------------------
void __fastcall MySQL_BDD::stockage_client(char *Nom_societe)
{
 
 char requete[80];
 
 // tableau dynamique qui stocke au fur et à mesure les données
 tab_nom_societe = (char *) malloc(strlen(Nom_societe));
 tab_nom_societe = Nom_societe;
 
 // JOINTURES: Les jointures permettent d'exploiter pleinement le modèle relationnel des tables d'une base de données (mes tables : batiments, clients, capteurs, datas)
 // * pour sélectionnner tous les champs + jointure entre clés Primaires et clés étrangères
 
 if(mysql_query(mysqlH, "SELECT * FROM 'batiments', 'clients', 'capteurs', 'datas' WHERE 'batiments.idSocieteE = clients.idSociete' AND 'capteurs.idBatimentE = batiments.idBatiment' AND 'datas.idCapteurE = capteurs.idCapteur'"))
   {
    sprintf(requete, "INSERT INTO clients(Nom) VALUES('%s')", tab_nom_societe);
    // requête insere nom Societer
    mysql_query(mysqlH, requete);
   // free(tab_nom_societe);
   }
}
//---------------------------------------------------------------------------
void __fastcall MySQL_BDD::stockage_batiment(char *Nom_batiments, char *nom_Rue, char *nom_Ville)
{
 char requete[80];
 
 // tableau dynamique qui stocke au fur et à mesure les données
 tab_nom_batiment = (char *) malloc(strlen(Nom_batiments));
 tab_nom_batiment = Nom_batiments;
 
 tab_rue = (char *) malloc(strlen(nom_Rue));
 tab_rue = nom_Rue;
 
 tab_ville = (char *) malloc(strlen(nom_Ville));
 tab_ville = nom_Ville;
 
  if(mysql_query(mysqlH, "SELECT * FROM 'batiments'"))
   {
    sprintf(requete, "INSERT INTO batiments(NomB, Rue, Ville) VALUES('%s', '%s', '%s')", tab_nom_batiment, tab_rue , tab_ville);
    // requêtes insere nom, rue et la ville
    mysql_query(mysqlH, requete);
    free(tab_nom_batiment);
    free(tab_rue);
    free(tab_ville);
   } 
}
//---------------------------------------------------------------------------
void __fastcall MySQL_BDD::stockage_capteur(char* aaddr_Mac_Capteur, int anumero_Capteur)
{
 char requete[80];
 
 // tableau dynamique qui stocke au fur et à mesure la date et l'heure
 tab_addr_mac_capteur = (char *) malloc(strlen(aaddr_Mac_Capteur));
 tab_addr_mac_capteur = aaddr_Mac_Capteur;
 
 numero_Capteur = anumero_Capteur;
 
 if(mysql_query(mysqlH, "SELECT * FROM 'capteurs'"))
  {
    sprintf(requete, "INSERT INTO capteurs(Mac, Numero) VALUES('%s', '%d')", tab_addr_mac_capteur, numero_Capteur);
    // requête insere l'adresse MAC du capteur et son numéro
    mysql_query(mysqlH, requete);
    free(tab_addr_mac_capteur);
  }
}
//---------------------------------------------------------------------------
// méthode : stockage température , date et heure
void __fastcall MySQL_BDD::stockage_datas(float Temperature, char *date_heure)
{
  char req[80];
 
  // tableau dynamique qui stocke au fur et à mesure la date et l'heure
  tab_date_heure = (char *) malloc(strlen(date_heure));
  tab_date_heure = date_heure;
 
  temperature = Temperature;
 
  if(mysql_query(mysqlH, "SELECT * FROM 'datas' "))
   {
     sprintf(req, "INSERT INTO datas(heureDate, temperature) VALUES('%s', '%2.2f')", tab_date_heure, temperature);
     // requête insere l'heure , la date et la température du capteur
     mysql_query(mysqlH, req);
//     free(tab_date_heure);
 
   }
}
//---------------------------------------------------------------------------
void __fastcall MySQL_BDD::effacer_datas()
{
  mysql_query(mysqlH, "DELETE FROM 'clients', 'batiments', 'capteurs', 'datas'");
}
//---------------------------------------------------------------------------
// rend information true  si la societe Nom_societer existe dans la BD  sinon false
bool __fastcall MySQL_BDD::recherche(char *nom_champs, char *nom_table)
{
 char requete[80], tab_search[100];
 MYSQL_RES *result = NULL;
 bool recherche;
 int ret;
 
 
 tab_nom_table = (char *) malloc(strlen(nom_table));
 tab_nom_table = nom_table;
 
 tab_nom_champs = (char *) malloc(strlen(nom_champs));
 tab_nom_champs = nom_champs;
 tab_nom_champs_copie = tab_nom_champs;
 
 Form1->Edit1->Text.c_str();
 strcpy(tab_search,Form1->Edit1->Text.c_str());
 
 sprintf(requete,"SELECT %s FROM %s WHERE %s = '%s'", tab_nom_champs, tab_nom_table , tab_nom_champs_copie, tab_search);
 
   // envoi requzete SQL
   ret = mysql_query(mysqlH, requete);
   if (ret == 0)  // si requete query valide
   {
 
    // recupération resultat de la derniere requete => stockage dans result
    result = mysql_store_result(mysqlH);
 
    if (mysql_fetch_row(result) != NULL)  // si resultat non null y a des champs a lire(there are rows)
      {
      // si resultat non null : parametre est dans BD
       recherche = true;
      }
    else
      {
       recherche = false;
      }
   }
 return (recherche);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  // Allocation dynamique d'un objet de classe MYSQL
 obj = new MySQL_BDD("192.168.2.82", "ECOVIA", "ecovia", "ecovia", 0, NULL, 0);
 
 // Appel méthode via l'objet : obj
 if(obj->conect_Serveur_BDD() == true)
   {
    etat = 1;
     Memo1->Lines->Add("Connexion réussi");
      if(etat == 1)
        {
         obj->affichage_infos();
        }
       else
         {
          Memo2->Lines->Add("Erreur d'affichage....");
         }
    }
   else
      {
       Memo1->Lines->Add("Erreur connexion au Serveur et à la BDD");
      }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if(etat == 1)  // variable etat joue le rôle de drapeau
   {
    // Appel méthode
    obj->deconect_Serveur_BDD();
     Memo1->Lines->Add("Déconnexion réussi");
      etat = 0;
      // Delete mon objet
       delete(obj);
    }
    else
      {
       Memo1->Lines->Add("Erreur de déconnexion");
      }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
 static int mise_a_jour = 1;
 
        // test en cours 07/03/2013 V6
    if(etat == 1)
        {
         obj->stockage_client("Casino");  // test ok
         obj->stockage_batiment("Bat A","16 rue colin", "Marseille");   // test ok
         obj->stockage_capteur("13:00:00:04", 11513);     // test ok
         // Appel de la méthode avec les paramètres : important format à respecter pour la date année-mois-jour et l'heure HH:MM:SS
          // La méthode stockage_datas est lancer qu'une seule fois.....
           obj->stockage_datas(55.5,"2013-03-15");   // test ok
             etat = 2;
              sprintf(datas,"Mise à jour de la base de données N°%d.",mise_a_jour);
               mise_a_jour++;
                Memo1->Lines->Add(datas);
       }
     else if(etat == 2)
         {
          obj->stockage_datas(22.3,"2013-03-07");
         }
      else
         {
          Memo1->Lines->Add("Erreur de stockage des données");
         }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
 obj->effacer_datas();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
 if(obj->recherche("Nom", "clients"))
   {
    Edit1->Text = "Le nom  est déjà dans la BD";
   }
  else
   {
    Edit1->Text = "Le nom est introuvable";
   }
}
//---------------------------------------------------------------------------
et mon .h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class MySQL_BDD
{
private:	// Déclarations de l'utilisateur
 
  MYSQL *mysqlH;  // numéro d'accés : id
 
  char info[40];
  char *tab_nom_societe, *tab_nom_batiment, *tab_rue, *tab_ville, *tab_addr_mac_capteur, *tab_date_heure;
  char *host, * user, *passwd, *db, *socket;
  char *tab_nom_table, *tab_nom_champs, * tab_nom_champs_copie;
  int port, drapeau; // mettre à zéro
  int numero_Capteur;
  float temperature;
  bool test; // test avec un booléen
 
public:		// Déclarations de l'utilisateur
 
   bool __fastcall conect_Serveur_BDD();
   void __fastcall deconect_Serveur_BDD();
  // int __fastcall envoie_donnee();  test
   void __fastcall stockage_client(char *Nom_societe);
   void __fastcall stockage_batiment(char *Nom_batiments, char *nom_Rue, char *nom_Ville);
   void __fastcall stockage_capteur(char* aaddr_Mac_Capteur, int anumero_Capteur);
   void __fastcall stockage_datas(float Temperature, char *date_heure);
   void __fastcall affichage_infos();
   void __fastcall effacer_datas();
   bool __fastcall recherche(char *nom_champs, char *nom_table);
 
   // constructeur avec param
   __fastcall MySQL_BDD(char* host,char * user,char* passwd, char* db, int port, char* socket, int drapeau);
};
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// Composants gérés par l'EDI
        TGroupBox *GroupBox1;
        TGroupBox *GroupBox2;
        TGroupBox *GroupBox3;
        TMemo *Memo1;
        TMemo *Memo2;
        TButton *Button1;
        TButton *Button2;
        TButton *Button4;
        TButton *Button3;
        TEdit *Edit1;
        TButton *Button5;
        TLabel *Label1;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
 
 
 
 
 
        void __fastcall Button5Click(TObject *Sender);
private:	// Déclarations de l'utilisateur
  MySQL_BDD *obj; // pointeur
 
 int etat; // variable etat :0 et 1 (drapeau)
 
 char datas[40];
 
 
public:		// Déclarations de l'utilisateur
        __fastcall TForm1(TComponent* Owner);
 
 
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif