IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Sauvegarde d'une BDD avec API C MySQL


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut Sauvegarde d'une BDD avec API C MySQL
    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.

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    ya Process Monitor sous windows qui permet de voir passer les appels systemes pour la création de fichier. utile tu verras.

    le coup du outfile direct en SQL, j'aime pas ça perso.

    Pour te former : Cours et tutoriels MySQL.

Discussions similaires

  1. [MySQL] Script de sauvegarde d'une BDD Mysql en local
    Par darkterreur dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 27/09/2012, 09h43
  2. sauvegarder dans une bdd mysql
    Par ssk2510 dans le forum JDBC
    Réponses: 9
    Dernier message: 12/05/2011, 14h38
  3. Afficher tous les champs d'une table avec dbexpress et MySQL
    Par LHT dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/06/2004, 17h11
  4. Déployer une BDD avec son appli
    Par Albertolino dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 11/03/2004, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo