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

Contribuez Pascal Discussion :

Moyen simple de sauvegarde


Sujet :

Contribuez Pascal

  1. #1
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut Moyen simple de sauvegarde
    Bonjour à tous.

    Le code suivant copie une B.D.D vers un Flash Disque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.SauvegarderClick(Sender: TObject);
    begin
      FileUtil.CopyFile('C:\Base\REGISTRE.GDB','F:\Base\REGISTRE.GDB',[cffOverWriteFile])  ;
    end;
    Pensez-vous que c'est une méthode efficace de sauvegarder une B.D.D?

    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 079
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 079
    Par défaut
    Bonjour,

    tout d'abord je précise bien haut et fort que je ne connais rien aux BdD's : je sais juste qu'il s'agit de gros fichiers gérés par des programmes bien particuliers, et çam'suffit

    Maintenant, pour répondre à la question,
    Citation Envoyé par FOCUS77 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.SauvegarderClick(Sender: TObject);
    begin
      FileUtil.CopyFile('C:\Base\REGISTRE.GDB','F:\Base\REGISTRE.GDB',[cffOverWriteFile])  ;
    end;
    Pensez-vous que c'est une méthode efficace de sauvegarder une B.D.D?
    je dirais que ça dépend du point de vue : si on est programmeur, hop !, une simple ligne comme ci-dessus et l'affaire est dans le sac, c'est très efficace on peut dire.

    Si on se place du point de vue du système d'exploitation ou du gestionnaire de BdD, imaginons le scénario suivant : la BdD est énorme, genre 30 Go de fichier, et aujourd'hui c'est "activité calme", très peu de mouvements sur les données, mettons quelques ko ou Mo. Il faut vraiment recopier les 30 Go ? Il n'y aurait pas un moyen pour savoir ce qui a été modifié en BdD depuis la dernière sauvegarde pour ne recopier que ça ?

    Ça serait sans doute plus efficace, et c'est en tout cas la voie que j'explore pour les sauvegardes des fichiers de mes machines virtuelles : j'en ai un qui pèse 100 Go et qui bouge très peu ; plutôt que de recopier à chaque fois ces 100 Go (ce qui prend un temps dément en copie vers dd usb [même usb3 : aux alentours de 20 minutes !]), je "monte" les fichiers source et destination et je fais une sauvegarde intelligente ("juste ce qui a changé") avec l'ami rsync : une poignée de secondes !

    OK, c'est bien plus compliqué pour le programmeur,

  3. #3
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    merci Jipété pour votre réponse.

    La Base de donnée ne dépasse pas 100 Mo on pourra donc la remplacer régulièrement.
    L’inconvénient est qu'on ne peut pas deviner le lecteur USB (F?,G?,H?) de la machine cible, peut être il est plus commode de stoker le nom USB dans un fichier (Sauvegarde.txt) déposé avec le fichier (REGISTRE.GDB) dans le dossier (Application\DataBase) , et d'implémenter les codes suivants.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      Form1: TForm1; USB:String;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.FormCreate(Sender: TObject);
       var f:TextFile; s:string;
    begin
       Try
      AssignFile(f,ExtractFilePath(Application.ExeName)+'DataBase\Sauvegarde.txt');
        Reset(f);
        readln(f,s); // recueil du Nom de USB.
        USB:=Trim(s);
        CloseFile(f);
       Except
         ShowMessage('Fichier sauvegarde déplacé!');
       end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.SauvegarderClick(Sender: TObject);
    Var Src,Dest:String;
    begin
       Src:=ExtractFilePath(Application.ExeName)+'DataBase\REGISTRE.GDB';
      Dest:=USB+':\DataBase\REGISTRE.GDB';
      if not FileUtil.DirPathExists(USB+':\DataBase')   then
      FileUtil.CopyFile(Src,Dest,[cffCreateDestDirectory])
      else
      FileUtil.CopyFile(Src,Dest,[cffOverWriteFile])  ;    
    end;
    merci à tous.

  4. #4
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut Correction de 'moyen simple de sauvegarde'
    Bonjour à tous

    On fait la duplication d'une BDD en cous d'utilisation n'est pas possible qu'après sa déconnexion, et de préférence
    suivie par la fermeture de l'application à l'aide d'un bouton(FermerSauvegarder) et d'un Timer, comme le montre l'exemple suivant.
    (cela exige que la propriété connected de IBCONNECTION doit être False et que celle ci est connectée par programmation)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      Accueil: TAccueil;i:integer;USB:String;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TAccueil.FormCreate(Sender: TObject);
     var f:TextFile; s:string;
    begin
       Try
      AssignFile(f,ExtractFilePath(Application.ExeName)+'Configuration\NomUSB.txt'); //NomUSB.txt doit contenir le nom USB ex:F
        Reset(f);
        readln(f,s); // recueil du Nom de USB.
        USB:=Trim(s);
        CloseFile(f);
       Except
         ShowMessage('Fichier sauvegarde déplacé!');
       end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Enabled=False,Interval=100:
    procedure TAccueil.Timer1StartTimer(Sender: TObject);
    begin
      i:=0; //initialisation de la variable i.
    end;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TAccueil.FermerSauvegarderClick(Sender: TObject);
       Var Src,Dest:String;
     begin
       IBConnection1.Connected:=False ; //déconnection de la BDD pour pouvoir la dupliquer.
     
     Src:=ExtractFilePath(Application.ExeName)+'DataBase\REGISTRE.FB';
       Dest:=USB+':\DataBase\REGISTRE.FB';
       if not FileUtil.DirPathExists(USB+':\DataBase')   then
       FileUtil.CopyFile(Src,Dest,[cffCreateDestDirectory])
       else
       FileUtil.CopyFile(Src,Dest,[cffOverWriteFile])  ;
       Timer1.Enabled:=true ;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TAccueil.Timer1Timer(Sender: TObject);
    begin
      if i<15 then
         i:=i+1
         else
         Application.Terminate ;
    end;
    merci à tous

  5. #5
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    Bonjour

    J'ai voulu améliorer cet exemple en remplaçant le Timer par la méthode ' Application.ProcessMessages ', et ça a bien fonctionné.
    L'avantage est qu'elle permet de simplifier le codage et d'allouer juste le temps qu'il faut pour enregistrer la BDD et fermer
    l'application.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      Accueil: TAccueil;i:integer;USB:String;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TAccueil.FormCreate(Sender: TObject);
     var f:TextFile; s:string;
    begin
       Try
      AssignFile(f,ExtractFilePath(Application.ExeName)+'Configuration\NomUSB.txt'); //NomUSB.txt doit contenir le nom USB ex:F
        Reset(f);
        readln(f,s); // recueil du Nom de USB.
        USB:=Trim(s);
        CloseFile(f);
       Except
         ShowMessage('Fichier sauvegarde déplacé!');
       end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TAccueil.FermerSauvegarderClick(Sender: TObject);
       Var Src,Dest:String;
     begin
       IBConnection1.Connected:=False ; //déconnection de la BDD pour pouvoir la dupliquer.
     
     Src:=ExtractFilePath(Application.ExeName)+'DataBase\REGISTRE.FB';
       Dest:=USB+':\DataBase\REGISTRE.FB';
       if not FileUtil.DirPathExists(USB+':\DataBase')   then
       FileUtil.CopyFile(Src,Dest,[cffCreateDestDirectory])
       else
       FileUtil.CopyFile(Src,Dest,[cffOverWriteFile])  ;
        Application.ProcessMessages ;
        Application.Terminate ; 
    end;
    merci à tous

Discussions similaires

  1. Réponses: 22
    Dernier message: 04/05/2009, 17h50
  2. Réponses: 1
    Dernier message: 03/02/2009, 17h21
  3. Moyen rapide pour sauvegarder peu de données
    Par nobody007 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/01/2009, 19h20
  4. Réponses: 3
    Dernier message: 05/07/2006, 11h59
  5. moyen simple de stocker des bouts de textes ...
    Par blackhorus dans le forum MFC
    Réponses: 3
    Dernier message: 18/10/2005, 17h58

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