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

Bases de données Discussion :

Comment sauvegarder une base de donnée ?


Sujet :

Bases de données

  1. #1
    Membre extrêmement actif
    Comment sauvegarder une base de donnée ?
    Bonjour.
    Je suis en train de développer un logiciel sous QDevelop et j'aimerais exporter ma base de donnée dans un fichier, malheureusement je n'ai pas trouvé comment faire dans la documentation.
    Il y a bien cloneDatabase, mais ça ne sert pas à faire un fichier.
    Avec phpMyAdmin, je peux facilement le faire grace à l'onglet exporter.
    S'il vous plait aidez-moi.

    Merci d'avance.
    Keith Flint 1969 - 2019

  2. #2
    Membre régulier
    Il y a deux choses : soit tu veux exporter dans un format personalisé (je crois me souvenir que phpmyadmin peut le faire dans des formats variés), c'est à dire tu décides toi-même comment les données sont mises en forme dans le fichier.
    Il faut alors que tu fasses toi même la liste des tables de ta base, puis pour chaque table lister les colonnes et les données, et enregistrer cela dans ton fichier.
    Si c'est au format SQL, soit tu fait comme ci-dessus en respectant la syntaxe SQL, soit il existe une fonction préconcue comme requête (mais la je vois pas, ca existe p'tet mais jamais entendu parler), soit tu peux passer par les outils de base et executer le programme de base mysql pour faire la sauvegarde (j'ai pas fait depuis un moment, faudrait que je relise comment faire d'ailleurs ), mais il faut pour cela que tu y aie accès (donc pas sur une base à distance).

  3. #3
    Membre extrêmement actif
    Merci pour la réponse, malheureusement ça ne m'avance pas beaucoup.
    Je pense que le plus simple ce serait de l'avoir au format SQL.
    Mais si je dois bricoler mon propre fichier sql ça risque d'être long et fastidueux...
    phpMyAdmin a un onglet exporter qui fait des fichier sql parfait, je vais chercher encore pour essayer de voir si je peux l'utiliser.

    Et au fait le logiciel serra éxecuté sur le PC qui fera serveur MySql.

    Je réalise un logiciel pour des personnes qui n'ont pas une grande connaissance en informatique, sinon ils pourraient juste aller dans phpMyAdmin le faire...
    Keith Flint 1969 - 2019

  4. #4
    Membre régulier
    Citation Envoyé par thierrybenji Voir le message
    Et au fait le logiciel serra éxecuté sur le PC qui fera serveur MySql.
    Dans ce cas, il y a moyen de faire une sauvegarde de la base en appelant le programme mysql qui lui sait faire des sauvegardes de la base courante au format SQL.

  5. #5
    Inactif  
    Bonjour thierrybenji

    Tu souhaites faire quoi au final de ton fichier ? As-tu besoin de la structure de la table et des données ?

    Si tu souhaites copier ta base sur un autre serveur sql, il suffit de te connecter dessus et d'utiliser cloneDatabase.

    Si tu souhaites simplement exporter les données vers un autre logiciel (ou pour sauvegarder les données), il faut faire une simple requête "SELECT * FROM ma_table" puis tu parcours la liste des resultats en envoyant vers un fichier (au format que tu veux, SQL ou texte ou XML)

    Si tu souhaites également exporter la structure de la table et que cette structure est fixe (par exemple pour restaurer une base après perte complête), dans ce cas, tu peux exporter la structure (1 seul fois) avec phpMyAdmin puis les données (régulièrement) avec des "SELECT *"

    Sinon, tu as la possibilité d'appeler un programme externe, tel que mysqldump, avec QProcess pour faire une sauvegarde.


    EDIT : pour m'amuser (), une idée de code permettant d'envoyer des bases de données vers des fichiers pour les enregistrer (non testé... à améliorer... ajouter QSqlDatabase, QFile, QTextStream... à mettre dans QExtend ?)
    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
    enum DATABASE_TO_QFILE
    {
       DATABASE_TO_SQL_QFILE,
       DATABASE_TO_XML_QFILE,
       DATABASE_TO_TXT_QFILE
    };
     
    QDataStream & operator<< (DATABASE_TO_QFILE format, QDataStream &out)
    {
       out.setProperty("DATABASE_TO_QFILE", format);
       return out;
    }
     
    QDataStream & operator<< (QSqlRecord & record, QDataStream &out)
    {
       int size = record.count() - 1;
       for(int field=0; field<=size; ++field)
          out << record.value(field).toString() << ((field==size) ? "\t" : "\n");
       return out;
    }
     
    QDataStream & operator<< (QSqlQuery & query, QDataStream &out)
    {
       int size = record.count() - 1;
       for(int field=0; field<=size; ++field)
          out << record.fieldName(field) << ((field==size) ? "\t" : "\n");
       while(query.next())
          out << query.record();
       return out;
    }

  6. #6
    Membre extrêmement actif
    Je veux enregistrer ma base de donné dans un fichier .sql comme le fait phpmyadmin, cela dit, en fait je pense qu'au pire faire juste une copie de la base devrait suffire (avec cloneDatabase).

    En tout cas merci.
    Je vais me renseigner sur mysqldump et peut être essayer d'utiliser ton code.

    Edit :
    J'ai tapé dans un terminal :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    mysqldump NomDeMaBaseDeDonnée

    Et ça ma créé exactement ce que je voulais, j'ai plus qu'a trouvé comment faire pour qu'en appuyany sur un bouton on parcour le PC pour choisir l'emplacement du fichier de sortie et écrire dans ce fichier le résultat de cette commande est c'est bon

    Edit :
    Avec QFileDialog je vais pouvoir choisir mon fichier de sortie
    Ouais c'est bon, j'arrive à parcourir et à récupérer l'adresse du fichier dans un QString.
    Je vais essayer de créer un fichier avec cette adresse maintenant.

    Edit :
    Quand je tape la commande :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    mysqldump NomDeMaBaseDeDonnée | cat >>NomDuFichier

    Le résultat de la commande est écrit dans le fichier, est ce que c'est "propre" d'utiliser ça dans un logiciel ?

    Par exemple je met dans mon code : system("mysqdump Base | cat >> Fichier");
    J'ai testé et ça marche, ça ne pose donc pas de problème ?

    Existe-t'il l'équivalent de system mais sous QDevelop pour pouvoir mettre directement un QString : system(QString) ?

    En fait j'ai utilisé toStdString().c_str() et ça marche nickel !

    Merci beaucoup
    Je suis content d'avoir réussi à créer un fichier SQL
    Keith Flint 1969 - 2019

  7. #7
    Membre régulier
    Quelques petits trucs sypplémentaires :
    • Au lieu d'utiliser system(), tu peux aussi utiliser QProcess pour gérer tes processus et tu peux même l'utiliser pour récupérer les données dans ton programme.
    • Si tu veux grader ton programme portable, évite les commandes de ce type : Windows ne connait pas cat.
    • Pour obtenir un char* depuis un QString, tu as la macro qPrintable (équivalent de .toLocal8Bit().constData())
    • Si ton problème est résolu, y'a un bouton pour marquer le sujet comme "Résolu".

  8. #8
    Membre extrêmement actif
    • Je n'arrive pas à utiliser QProcess, alors que mes commandes sont :
      Code :Sélectionner tout -Visualiser dans une fenêtre à part
      1
      2
      mysqldump Base | cat >> Fichier.sql
      mysql base < Fichier.sql
    • Je ne veux pas faire un logiciel portable, il doit juste tourner sous un vieux Suse.
    • toStdString().c_str() doit donner le même résultat.
    • J'ai déjà mis le topic en résolu.


    Merci

    En fait mysqldump Base > Fichier.sql ça fonctionne aussi pas besoin de | cat.
    Keith Flint 1969 - 2019

  9. #9
    Membre régulier
    Citation Envoyé par thierrybenji Voir le message
    J'ai déjà mis le topic en résolu.
    Oups, pas vu. Désolé. Je regarderai mieux la prochaine fois .

###raw>template_hook.ano_emploi###