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

Bases de données Delphi Discussion :

sauvegarde des données des tables


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut sauvegarde des données des tables
    rebonjour,
    voilà j'aimerais faire une sauvegarde de mes données mais j'ai remarqué que si on sauvegarde que les fichiers * db ,j'ai des erreurs de type index pas à jour donc j'ai rajouté tous les fichiers aux tables qui n'induisent plus d'erreur:à mes 7 tables ,j'ai rajouté les fichiers *.PX les .XG0 .YGO XG1 et YG1.
    J' ai utilisé dbisavechange conseillé par un de vous pour sauvegarder mes tables de suite apres rentrer des données car je souhaitais ensuite compresser ces fichiers pendant la session si l'utilisateur le souhaitait.Mais
    sans parler de compression j'ai juste fait un copier coller de ces fichiers dans un autre répertoire mais j'ai souvent des erreurs sans parler de compression ensuite pour juste les recopier dans le répertoire d'origine quand je simule une restauration :erreur de type 'index pas à jour".
    Donc comment dois je m'y prendre ?Eviter le copier coller qui devait me servir à compresser les fichiers (car dans le répertoire d'origine ,impossible de compresser lorsque les tables sont en cours d'utilisation) ?
    J'avais essayé de clore la session mais je ne connais pas trop
    le code à utiliser .
    Voilà que me conseillez-vous pour faire une sauvegarde.

    ps j'essayais d'utiliser abbrevia de turbopower

    MERCI POUR VOTRE AIDE

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 66
    Points : 78
    Points
    78
    Par défaut
    C'est vrai, tu ne peux pas sauvegarder les tables en cours d'éxécution, pour bien le faire il faut créer un autre petit programme qui te permet de faire les sauvegardes et il faut sauvegarder toutes les tables même les tables des indexes.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tomm
    Oui mais comment ,j'ai tout essayé d'apres mes petites connaissances
    merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 66
    Points : 78
    Points
    78
    Par défaut
    Par exemple en utilisant un programme de compression RAR, tu peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if MessageDlg('Insérez la disquette dans le lecteur A: puis appuyez sur Oui',    mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     
        winexec('arj a -r -va a:\dossier.dat  table1.* table2.*  ',Sw_show);

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 66
    Points : 78
    Points
    78
    Par défaut
    ... ou arj un autre pour sauvegarder avec compression des fichiers

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tom
    Merci
    j'ai utilisé abbrevia de turbopower mais le probleme est qu'on ne pouvait pas compressser les tables en cours d'utilisation.Et impossible de couper liaison entre tables et logiciel.J'ai essayéde copier tous ces fichiers dans un repertoire temporaire mais ensuite en compressant puis en décompressant,j'azi des errreurs de type index pas à jour.
    @+

  7. #7
    Membre régulier Avatar de fs999
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Points : 111
    Points
    111
    Par défaut
    Salut,

    Tant que les tables sont ouvertes, tu ne peut ni les copier, ni les compresser (fichiers ouverts en mode lecture/écriture).

    Si les tables sont toujours en utilisation (24/24), il faut exporter les données dans d'autres tables, puis les compresser.

    A+

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tom
    Merci est ce que le copier coller est une bonne solution mais apparement pour les index secondaires probleme puisque j'ai des erreurs de mise à jour d'index?
    Ou faut que je copie les tables avec un batchmove et créé les index ensuite?Si oui comment fait on sachant que les tables sont un autre répertoire?
    Merci pour ce que vous faites.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tom
    Une petite précision ,le copier coller marche puique quand j'ouvre la table dans le repertoire temporaire je vois les meme données que dans la tables d'origine et j'avais au début fais juste copier coller sans compression car peu de données et ça marchait là encore à condition que je relance le logiciel ensuite.
    Pour fermer les tables ,vous m'avier dit de faire sesion.close mais je n'y arrive pas .Comment faut il s'y prendre?
    merci

  10. #10
    Membre régulier Avatar de fs999
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Points : 111
    Points
    111
    Par défaut
    Le copier-coller n'est pas une bonne solution, si les tables sont utilisées.

    Pour le batchmove, tu peux l'utiliser (voir aide) ou le faire toi même :
    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
    var
      i: Integer;
    begin
      table2.Open
      table2.EmptyTable;
     
      table1.First;
      while not table1.Eof do
      begin
        table2.Append;
        for i := 0 to table1.FieldCount-1 do
          if table1.Fields[i].DataType <> fdAutoInc then
            table2.Fields[i].Value := table1.Fields[i].Value;
        table2.Post;
        table1.Next;
      end;
      table2.Close;
      // fait ta compression sur table2 !
    end;
    Il faut naturellement la même structure des 2 côtés.

    A+

  11. #11
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    Tu peux aussi fermer tes tables avant les opérations de Sauvegarde et de restauration.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut
    Merci de m'aider
    MAis si je ne les copie pas ,il faut que je les créé à l'avance?Si je veux faire une sauvegarde sur A:\ comment faire

    pour le batchmove avec au préalable un copier coller de mes tables que j'avais vider par requete ,je l'avais déjà fait mais le probleme est pour les index.Les tables était copier mais les index .Comment faire?
    merci

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tomm
    Pour Harry

    j'avais d&éjà essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.FermerTables; 
    var CompteurTable : integer; 
    begin 
      for CompteurTable := ComponentCount -1 downto 0 do 
        if (Components[CompteurTable] is TTable) then 
             TTable(Self.Components[CompteurTable]).Close; 
    end;
    Mais ça n'a pas marché pour les fermer vraiment puisqu'à la compression on me disait table en cours d'éxecution.

    merci

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut t
    Salut,j'ai essayé un truc meme si le copier coller ne m'a été conseillé
    -Copie uniquememt des *.db dans temp,supression de tous les enregistrements des tables de temp ,copie par batchmove des tables du répertoire d'origine dans tables de temp, compression dans temp puis copie sur A:\ ça marche avec dbisave change meme lors de la session

    -restauration copie du zip dans temp puis décommpression.Création des index primaires et secondaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddIndex(' PrimaryKey','Date;Libellé', [ixPrimary, ixUnique ]);
    avec des lignes de ce style.tosu les index sont créés.Les memes que dans le répertoire d'origine puis copie des *.db et de tous les index dans le répertoire d'origine .
    eh bien meme message ,index pas à jour.
    Je pense que j'aurai pu me passer de ce qui est en gras

    merci (si qq'un a une autre solution

  15. #15
    Membre régulier Avatar de fs999
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Points : 111
    Points
    111
    Par défaut Re: tom
    Citation Envoyé par tomm
    Pour fermer les tables ,vous m'avier dit de faire sesion.close mais je n'y arrive pas .Comment faut il s'y prendre?
    merci
    Pour fermer toutes les tables, il faut :
    1. Toutes les TDatabase.KeepConnection := False;
    2. Session.Close; (ou nom des TSession)

    Alors toutes les tables seront fermées.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut t
    je te remercie fs999.C'est grace à toi qui m' orienté encore avec le batchmove que je pense avoir trouvé une solution.Le copier coller ne marche pas .C'est sûr.

    Copier dans un repertoire temp uniquement les fichiers db(on ne s'en sert que pour la strucure,on se moque du contenu des tables
    utiliser batmove pour chacune de ces tables en mode append pour insérer tous les enregistrements du répertoire source contenant les tables d'origine vers le répertoire temp mais aupéravant par requête ou autre supprimer le contenu de chacune des tables copiées dans temp avec des requetes de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Query2.SQL.Clear;
          Query2.SQL.Add('DELETE from archives ');
          Query2.ExecSQL;
    compresser toutes les tables dans le fichier zip puis le copier vers A/ par exemple

    pour restauartion identique mais à l'inverse soit
    copier le zip dans temp
    décompresser dans temp
    supprimer par requete le contenu des tables dans le répertoire d'origine
    insérer par des batchmove le contenu des tables de temp dans celles du répertoire d'origine

    Ps seul ombre que je n'ai pas résolu pour l'instant:
    un seul enregistrement par session car je n'ai pas encore compris comment rafraichir dans la meme session malgré option sur refresh du composant cochée et autosave sur true .Donc pour l'instant fermeture du logiciel et je le relance apres chaque sauvegarde.

    donc si quelqu'un saurait comment fermer le logiciel avec Form1.close mais le relancer là ou il était form50.




    @+

  17. #17
    Membre régulier Avatar de fs999
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Points : 111
    Points
    111
    Par défaut
    Au lieu de copier les fichiers .db tu peux utiliser un viel utilitaire "Table Scanner" (qui est shareware maintenant, mais la version 2, libre, je peut te l'envoyer par e-mail), qui permet de stocker dans une source une ou plusieurs structures de tables, pour les recréer par programme.

    Si tu ne vois pas les données que tu as importé, c'est que tu utilise deux TTable ou TQuery sur la même table. Un refresh devrait pourtant marcher dans ce cas

    A+

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut t
    apres la restauration ,un refresh devarit suffir.Je l'essaierai ce soir mais pour la compressio, ,le probleme vient de abbrevia qui ne met dans le zip image au cours d'une meme session les nouvelles tables.
    merci pour tout

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tom
    Resalut ,le refresh ne suffit pas ni table.active:=false puis true
    il faut utiliser DBnavigator pour que la mise à jour soit prise en compte
    à+

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/12/2007, 15h18
  2. [MySQL] Utilisation des fonctions des récupérations des données
    Par Konrad Florczak dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2006, 15h17
  3. Utiliser SQL pour archiver des données de tables
    Par com-ace dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/08/2006, 18h53
  4. [VBA-A]Remplir une textbox avec des données de tables.
    Par cuicui08 dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/03/2006, 10h28
  5. [SQL] - Table 1 fournit colone des donnes de table 2
    Par COlive dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/11/2005, 03h08

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