Bonjour,

j'essaie de faire un utilitaire pour Windows pour gérer facilement la configuration d'une simulation OpenSim. J'ai déjà fait la version Linux, mais pour Windows c'est plus corsé. Je bute sur la sauvegarde de la base de données de la simulation.

J'ai trouvé l'Api C pour MySQL, je l'ai installé, j'arrive à lister les tables d'une base donc ça doit fonctionner. Mais je n'arrive pas à utiliser la requête
SELECT * INTO OUTFILE "'.$chemin.'" FROM maTable;
Aucun fichier sql ne se crée.

Voici le code de la fonction dans laquelle j'utilise cette requête avec la fonction mysql_query ().

La partie qui pose problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
   for(i = 0; i < num_champs; i++)
   {
       sprintf(table1,"%.*s ", (int) lengths[i], row[i] ? row[i] : "NULL");
       snprintf(query, sizeof(query) - 1, "select * into outfile '%s' from %s;", path,table1);
       mysql_query(mysql,query);
       printf("%s, %s\n",path,table1);//test
    }
La fonction entière :
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
 
//==============================================
void BDDDump (GADGET * p_gadget, char* pathMysql,char *host,char *bdd, char *user, char *mdp)
{
   //Partie codée à partir du tuto API C Mysql
   MYSQL *mysql =NULL;
   const char * valeur;
   unsigned int num_champs = 0;
   char table1[32], query[1024], path[256];
   int i;
 
   mysql = mysql_init(NULL);
   mysql_options( mysql,MYSQL_READ_DEFAULT_GROUP, valeur);
   if(mysql_real_connect(mysql,host,user,mdp,bdd,0,NULL,0))
    {
        //Pour trouver toutes les tables 
         mysql_query(mysql, "SHOW TABLES");
        //Déclaration des pointeurs de structure
         MYSQL_RES *result = NULL;
         MYSQL_ROW *row = NULL;
         result = mysql_use_result(mysql);
         num_champs = mysql_num_fields(result);
        //chemin du fichier de sauvegarde
         strcpy(path,p_gadget->repSauvegarde);
         strcat(path,"\\");
         strcat(path,gtk_entry_get_text(p_gadget->Edit[2]));
         strcat(path,".sql");
 
        //Tant qu il y a encore un résultat ...
         while ((row = mysql_fetch_row(result)))
         {
            unsigned long *lengths;
            // stockage de la taille dans le pointeur
             lengths = mysql_fetch_lengths(result);
            // boucle pour avoir la valeur de chaque champs
               for(i = 0; i < num_champs; i++)
               {
                   sprintf(table1,"%.*s ", (int) lengths[i], row[i] ? row[i] : "NULL");
                   snprintf(query, sizeof(query) - 1, "select * into outfile '%s' from %s;", path,table1);
                   mysql_query(mysql,query);
                   printf("%s, %s\n",path,table1);//test
               }
         }
         //Libération du jeu de résultat
         mysql_free_result(result);
         mysql_close(mysql);
    }
    else
    {
        BDDBackupMessage(p_gadget, i);
    }
}
Que dois-je faire pour que cette méthode fonctionne si c'est la bonne méthode ? Sinon y aurait-il une autre méthode peut-être plus simple pour faire une sauvegarde de base de données en langage C ? Merci pour vos réponses.