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 :

Compacter une appli en cours d'execution.


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Compacter une appli en cours d'execution.
    Bonjour, je voudrais compacter la bdd de mon appli en cours. j'ai essaye de lancer un autre .mdb qui tue le processus de l'appli principale mais quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CompactDatabase "AppliPrincipale" "AppliPrincipaleTmp"
    Kill "AppliPrincipale"
    Name "AppliprincipaleTmp" As "Appliprincipale"
    Access me repond cordialement : "Run-Time error '3356' vous avez essaye de compacter une base deja ouverte en mode exclusif..."
    Le pire, c'est qu'en "pas-a-pas" ca passe.
    Si qqun peut m'eclairer... merci d'avance.

  2. #2
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 144
    Points : 166
    Points
    166
    Par défaut
    Slt,
    Ne sachant te répondre directement je te propose de te donner qqs infos disons "traitant du sujet de compactage".
    Si ta base est une base 2000 il suffit que dans outils tu coches la case "compacter à chaque fermeture" et tu auras ainsi une base "propre" à chaque nouvelle utilisation (à supposer que ta base est bien fermée après utilisation, tous les soirs par exemple).
    Si toutefois il arrive qu'elle reste ouverte dans tel ou tel bureau tu peux également aller voir dans les code-sources, il y a un petit shtouya de code pour programmer la fermeture de ta base à une heure bien précise (par ex tous les soirs à 21h).
    ....
    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~
    Les choses les plus faciles...
    ...sont aussi les plus difficiles à trouver !

    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Je travaille sous Access 2003 donc l'option compacter a la fermeture existe... Le probleme est que quand je tue le processus, le compactage ne s'effectue pas. Je pense que cette option ne s'effectue qu'apres une commande de type ou dans mon cas, le but est de piloter le compactage a partir d'une autre appli, je ne peut dons pas utiliser ces commandes.
    Merci quand meme.

  4. #4
    Membre du Club

    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 53
    Points
    53
    Par défaut
    Bonjour, je reposte une solution pour un bouton Compacter pour Access 97.

    Dans un module Standard que tu nommes obligatoirement "Fonctions" (ce nom est repris dans le script) :

    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
    Function CompactEXE() As Boolean 
     
    'Compacte la base de données en cours 
     
    On Error GoTo Err_CompactEXE 
     
    Dim strDbFile As String 
    strDbFile = CurrentDb.Name & ".tmp" 
     
    If Dir(strDbFile) <> "" Then Kill strDbFile 
     
    DBEngine.CreateDatabase strDbFile, dbLangGeneral 
    DoCmd.CopyObject strDbFile, , acMacro, "mcrCompact" 
     
    'Attention au nom du module ! 
     
    DoCmd.CopyObject strDbFile, , acModule, "Fonctions" 
     
    Shell "MSACCESS.EXE """ & strDbFile & """ /x mcrCompact", _ 
            vbMinimizedNoFocus 
     
    Quitte_CompactEXE: 
    Exit Function 
     
    Err_CompactEXE: 
        MsgBox Err.Description 
    Resume Quitte_CompactEXE 
     
    End Function
    et

    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
    Public Function Compact() 
     
        Dim acApp As Access.Application 
        Dim strDbPath As String, strDbFile As String 
        Dim strDbFileOld As String 
     
        strDbPath = CurrentDb.Name 'Nom complet de la base 
        strDbFile = Left(strDbPath, Len(strDbPath) - 4) 'Nom complet de la base sans l'extension ".mdb" 
        strDbFileOld = Left(strDbFile, Len(strDbFile) - 4) & ".old" 'Nom complet de la base avec l'extension ".old" 
     
        Set acApp = GetObject(strDbFile) 
     
        With acApp 
            .SysCmd acSysCmdSetStatus, "Compactage en cours..." 
            .CloseCurrentDatabase 
            DBEngine.CompactDatabase strDbFile, strDbFileOld 
            Kill strDbFile 
            Name strDbFileOld As strDbFile 
            .OpenCurrentDatabase strDbFile 
            .SysCmd acSysCmdClearStatus 
        End With 
        Application.Quit 
    End Function

    Pour finir une macro mcrCompact

    Il faut donc créer une macro contenant juste l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Action : ExécuterCode 
    NomFonction : =Compact()

    Dans ton formulaire, tu fais un joli bouton et tu lui attribues l'évènement sur Clic :

    Succès garanti.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Ok, j'ai du adapter un peu tout ca car mon system de compacatge reprenait le meme shema : ouverture d'une autre base pour compacter la premiere. En fait je recuperait le numero du processus de ma base pour le tuer ce qui ne declenchait pas le compactage a la fermeture. Il m'a suffit de fermer ma base avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set app = GetObject(strMaBase)
    app.Quit
    code qui lui declenche le compactage automatique.
    Voila voila un tag "resolu" de plus.
    Merci a tous.

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

Discussions similaires

  1. Compacter une bd en cours
    Par Frankidi dans le forum Access
    Réponses: 9
    Dernier message: 07/05/2009, 17h43
  2. coupure et redemarrage d'une appli en cours
    Par calimero91 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 15/01/2008, 11h49
  3. Stopper une fonction en cours d'execution
    Par eponyme dans le forum C
    Réponses: 14
    Dernier message: 10/01/2008, 09h43
  4. Réponses: 4
    Dernier message: 07/11/2006, 11h28
  5. Plus la main sur l'appli en cours d'execution..
    Par maddog2032 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/06/2005, 11h49

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