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

Access Discussion :

Compression Access sous Delphi


Sujet :

Access

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut Compression Access sous Delphi
    Bonjour,
    J'ai développé une BDD personnelle et ludique sous Delphi/ADO Access qui fonctionne très bien. Mais comme vous le savez, les BDD Access ont une fâcheuse tendance à prendre de l’embonpoint rapidement. On peut toujours la compresser sous Access. Ma question est :
    - Est-il possible de compresser cette BDD depuis mon application en la fermant, en compressant et en la rouvrant. J'ai écris le code suivant mais si je n'ai aucun message d'erreur, si rien ne bloque, rien ne se passe non plus.
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
      With Dm.AdoQuery1 do
      begin
        Dm.ADOQuery1.Close;
        ShellExecute(Handle,'open',PChar('C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.exe" "d:\radio\HF\sauvegardes\contacts.MDB" /compact" '),nil,nil,SW_SHOW);
      end;
    Dm.ADOQuery1.Open;

    Je sais que ça s'appelle "scier la branche sur laquelle on est assis", mais peut-être est-ce néanmoins faisable, sinon tant pis. Je souhaiterais avoir quand même votre opinion.
    Merci à tous.
    Cordialement

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 522
    Points
    14 522
    Par défaut
    Bonjour,

    En théorie c'est possible.
    Les guillemets sont-ils bien placés ? Cela me semble bizarre mais je n'ai pas codé en delphi depuis longtemps.
    Si pas de réponse ici, on déplacera sur le forum delphi qui sera peut-être plus approprié.

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    bonsoir,
    si on suit la logique un guillemet serait manquant avant "C:\Program" et en trop après "contacts.MDB":

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ShellExecute(Handle,'open',PChar('"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.exe" "d:\radio\HF\sauvegardes\contacts.MDB" /compact" '),nil,nil,SW_SHOW);
                                      ^                                                                                                    ^
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    J'ai essayé toutes les combinaisons de guillemets et d'apostrophes mais rien n'y fait, les unes avec des messages d'erreur, les autres sans message mais sans aucun effet non plus. Suis-je tombé sur "la chose impossible" ?
    Merci néanmoins pour votre concours. A suivre !!!
    Cordialement

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    as-tu regardé ici ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Oui, j'étais allé voir mais je n'ai rien trouvé qui résolve mon problème. J'ai tout essayé sur cette FAQ mais rien n'y fait, et toujours sans aucune erreur affichée.
    Je vais laisser la fonctionnalité sur mon interface au cas où, un jour... Elle ne gêne en rien.
    Merci. Je continue car je suis obstiné...

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    bonjour,
    Est-il possible de compresser cette BDD depuis mon application en la fermant, en compressant et en la rouvrant.
    le problème vient probablement du fait que l'exécution se fait de manière asynchrone (l'exécution de la commande démarre sans attendre la fin de la précédente) ce qui doit être le cas avec l'appel d'un API externe comme ShellExecute, et une commande de compactage n'est pas instantanée d'autant plus si la base est volumineuse ...

    Il faudrait savoir pourquoi la base grossit autant .... les raisons principales d'un grossissement d'une base Access c'est l'importation de données externes ou l'utilisation de la commande DELETE et INSERT: est-ce ton cas ?

    Sinon, pourquoi ne pas lancer le compactage de la base à la fermeture de ton appli Delphi ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Toute la gestion de la BDD se fait par des requêtes SQL, donc effectivement j'utilise INSERT pour ajouter un/des enregistrement.s et DELETE pour supprimer un enregistrement. Le fait que la BDD devienne volumineuse n'est pas en soi un problème si je réussis à la compacter sans passer directement par Access.
    Donc, ton idée de lancer le compactage en dehors de l'application, une fois tous les process fermés, me séduit. Je vais y réfléchir mais c'est certainement une bonne piste. Merci.
    Cordialement

  9. #9
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Bonjour à tous,
    J'ai résolu le problème par la méthode de tee_grandbois, c-à-d par l'extérieur. Je lance depuis l'appli un fichier batch + fermeture de l'appli. Le fichier batch ouvre puis 2s après referme Access que j'avais configuré auparavant pour compacter la BDD en se refermant. Visiblement ça marche.
    Merci encore à vous tous. Je mets en résolu car il faut bien que ça se termine un jour.
    Cordialement

  10. #10
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut Compression Access sous Delphi (Fin)
    Bonjour à tous,
    Pour terminer définitivement ce sujet, j'ai trouvé une solution élégante -ou pas, c'est selon- pour compresser la BDD Access depuis mon appli. Je vous la livre à toutes fins utiles. J'ai découvert dans des forums l'existence de l'utilitaire JETCOMP de Microsoft, qui compresse une BDD Access pourvu qu'elle soit à l'ancien format MDB. Access n'est même plus nécessaire.
    Voici le code dans mon appli :
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.flatCompressionClick(Sender: TObject);
    begin
      ShellExecute(0,'OPEN','Compactage.cmd',Nil,Nil,SW_HIDE);
      Close;
    end;

    et le code du fichier batch Compactage.cmd qui est appelé :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    JetComp.exe -src:d:\radio\hf\sauvegardes\contacts.mdb -dest:d:\radio\hf\sauvegardes\contacts2.mdb
    del d:\radio\hf\sauvegardes\contacts.mdb
    rename d:\radio\hf\sauvegardes\contacts2.mdb contacts.mdb

    Cela fonctionne parfaitement de manière totalement invisible avec le paramètre ShowCmd "SW_HIDE". Le taux de compression est très satisfaisant.
    Voilà, si ça peut servir à certains j'en serai heureux.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Executer une procédure Access sous Delphi
    Par kmaniche dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/12/2006, 21h51
  2. Récupérer une image d'une bdd access sous delphi
    Par RodEpsi dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/11/2006, 18h19
  3. Réponses: 2
    Dernier message: 03/09/2006, 12h02
  4. Problème base ACCESS sous DELPHI
    Par colorid dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/02/2006, 16h24
  5. execution d'une macro d'access sous delphi
    Par galendor_d'ambre dans le forum Bases de données
    Réponses: 6
    Dernier message: 10/02/2004, 16h58

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