Voila j'ai crée un programme afin de récupérer des données d'une base de données. Or j'ai un soucis dans mon code baseDeDonnes.c avec la récupération du résultat.

J'ai trouvé des fonctions mais je ne les comprends pas, pourriez-vous me les expliquer ?


ma structure de donnée s_resultat est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
typedef struct resultat
{
    int insee;
    char  nom[30];
    double latitude;
    double longitude;
    int cp;
}s_resultat;
Mon fichier code source
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
 
// Fonction permettant de récuprer les resultats de la requete et de les    stocker dans un tableau
 
s_resultat* recuperationInformations(s_resultat *tab, MYSQL *mysql){
 
     //Déclaration des pointeurs de structure
     MYSQL_RES *result = NULL;
     MYSQL_ROW row = NULL;       
     int i,cpt,nb, num_champs = 0; 
 
      //Requête qui sélectionne tout dans ma table scores
      mysql_query(mysql, "SELECT * FROM ville");
      printf("Requete effectuee ! \n");
 
      result = mysql_store_result(mysql);
 
      nb = mysql_num_rows(result);             
 
      // tablo  dynamique du resultat
 
      do{
          tab=(s_resultat*)malloc(nb * sizeof(s_resultat));
          cpt ++; 
 
          }while(tab==NULL && cpt==3);                                                                                   
 
      //On récupère le nombre de champs
      num_champs = mysql_num_fields(result);
 
       //Structure temporaire
       s_resultat temp;
 
 
      //Tant qu'il y a un résultat
       while ((row = mysql_fetch_row(result))) {
 
 
     // CREATION STRUCTURE TEMPORAIRE
 
       temp.insee = strtoul(row[0]?row[0]:"0", NULL, 10);
       //temp.insee = strtoul(row[0], NULL, 10);
 
 
       strcpy(temp.nom,row[1]?row[1]:"");
       //printf("%s",row[1]) ;
 
 
       temp.latitude = strtod(row[2]?row[2] : "0",NULL );
 
 
       temp.longitude = atof(row[3]?row[3] : "0" );
 
       temp.cp = strtoul(row[4]?row[4] : "0", NULL, 10 );                                     
 
      // INSERTION DANS UN TABLEAU DYNAMIQUE
       *(tab+i) = temp;
 
      i++;
 
       }
 
            //Libération du jeu de résultat
          //  mysql_free_result(result);            
          //  for(int i=0; i<nb; i++) free(tab+i);
 
          //  free(tab);
 
            //Fermeture de MySQL
            //mysql_close(&mysql);
            //system("pause");
            return tab;
}
Je ne comprends donc pas les fonctions :
temp.insee = strtoul(row[0]?row[0]:"0", NULL, 10);
strcpy(temp.nom,row[1]?row[1]:"");
temp.latitude = strtod(row[2]?row[2] : "0",NULL );
temp.longitude = atof(row[3]?row[3] : "0" );
temp.cp = strtoul(row[4]?row[4] : "0", NULL, 10 );

Est-ce véritablement les fonctions à utiliser ? J'en ai mis d'autre en commentaire quelle est la différence ? Merci de m'éclairer.

J'ai également un autre soucis avec mon insertion dans le tableau dynamique, je ne comprends pas le problème. Mon programme s'execute mais plante à l'execution de cette commande. Quel est le problème selon vous ?

Ensuite ma table mysql a été déclaré avec des doubles(9,9) et dans mon programme C je n'arrive pas à récupérer la totalité de la variable, elle est tronqué comment est ce possible ?


Merci d'avance