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

VBA Access Discussion :

Attendre la fin de la commande "compacter la base de données"


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Par défaut Attendre la fin de la commande "compacter la base de données"
    Bonjour,
    ne disposant pas de l'option "compacter à la fermeture" dans Access 97, je suis en train de concocter une fonction pour le faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function Compacter_bdd()
    Dim Db, tempDb As String
    Db = "\\Serveur\appli appro\bdd.v2.0.mdb"
    tempDb = (Left(Db, (Len(Db) - 4)) & "temp.mdb")
     
    Name Db As tempDb
     
    DBEngine.CompactDatabase tempDb, Db
    Kill tempDb
     
    MsgBox "Base de donnée compactée avec succès !"
     
    End Function
    Le souci c'est qu'il faut attendre la fin du compactage avant de "killer" le fichier tempDb.
    Je pourrais me contenter de rajouter un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For i = 1 To 10000000
    Next
    mais le risque c'est de surdimensionner le délai d'attente car la durée du compactage peut être parfois assez longue...

    Quelqu'un pourrait-il donc m'indiquer comment insérer une boucle d'attente qui capterait la fin de l'exécution du compactage ?

  2. #2
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonjour,

    Tu as essayé de placer un

    Avant l'instruction Kill ?

    Domi2

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Par défaut
    Citation Envoyé par dut-dut
    Parfait, ça résout bien mon problème. Je n'avais effectivement pas pensé à cette solution.
    Merci Domi2 !


    Au cas où certains aient une autre réponse à fournir sur le sujet, je laisse le post ouvert jusqu'à ce soir...
    Je rectifie : lorsque la bdd est trop importante celà ne fonctionne pas. Je retrouve le message d'erreur "Fichier introuvable" lorsque VBA tente d'exécuter la commande kill.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Par défaut
    (au cas où ça aide certains à comprendre le problème qui se pose)

    En fait la commande "kill" n'avait pas fonctionné la première fois. Par contre la base de données avait bien été compactée.

    Du coup quand j'ai relancé la macro complète après avoir supprimé manuellement le fichier tempDb, ça a bien marché.
    (je suppose que c'est parce que le délai de compactage a été bien plus court cette fois là)

    Cependant quand j'ai réessayé d'appliquer la macro à la base de départ non-compactée, ça a de nouveau planté.

  5. #5
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonjour,

    Regarde du côté de la fonction Dir... voir dans la FAQ.

    Tu boucles, si le fichier existe tu exécutes ta commande et tu sors, sinon, tu continues à boucler.

    Je ne vois pas mieux...

    Domi2

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Par défaut
    J'ai modifié mon code pour essayer cette solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    DBEngine.CompactDatabase tempDb, Db
    
    Do
    DoEvents
    Loop Until Dir(tempDb, vbHidden) <> ""
        
    MsgBox "sorti de la boucle"
        
    Kill tempDb
    ...
    Finalement, le problème vient de la commande "kill" car le msgbox s'affiche bien mais ensuite j'ai toujours l'erreur "Fichier introuvable". Et après investigations, je me rends compte que même si j'essaie d'exécuter la commande "kill" longtemps après le compactage, ça ne fonctionne pas alors que le fichier existe bien...


    Quelqu'un a-t-il une idée ???
    Je ne m'explique pas pourquoi ça fonctionne quand je retente le coup avec une base déjà compactée...

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

Discussions similaires

  1. [Débutant] Attendre la fin d'une commande lançant un .bat
    Par ludo40190 dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/02/2012, 18h11
  2. Attendre la fin d'une commande WMI pour continuer
    Par ovcrash dans le forum VBScript
    Réponses: 1
    Dernier message: 11/02/2010, 07h06
  3. [Émulateur de terminal VTE] attendre la fin de la commande
    Par Skami 18 dans le forum Bibliothèques tierces
    Réponses: 0
    Dernier message: 03/10/2009, 18h14
  4. compacter une base de donnée
    Par tpdm dans le forum Access
    Réponses: 1
    Dernier message: 14/10/2005, 11h30
  5. Compacter une base de donnée
    Par Floyd dans le forum Access
    Réponses: 4
    Dernier message: 13/10/2005, 16h05

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