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 Discussion :

Compacter la base liée


Sujet :

Contribuez

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut Compacter la base liée
    Bonjour à vous.

    Si comme moi vous êtes confronté à une base liée qui gonfle comme un ballon, ci-dessous du code pour compacter la BD liée de façon ultra simple et une petite classe de service.

    Mon programme suppose qu'au moins une table liée est connue.

    J'appelle CompacterBDLiee au moment de la fermeture de mon formulaire menu ce qui correspond normalement à la sortie de mon application

    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 Sub CompacterBDLiee()
        'Compacte la BD liée si elle n'est pas utilisée.
        Dim db As DAO.Database: Set db = CurrentDb
     
        Dim dbLiee As New clsInfoFichier: dbLiee.Chemin_Nom_Extention = Mid(CurrentDb.TableDefs("tblBaseParam").Connect, Len(";DATABASE=") + 1) 'Mettre ici le nom de votre table.
     
        Dim ficLie As New clsInfoFichier
        ficLie.Chemin_Nom_Extention = dbLiee.Chemin_Nom_Extention
        ficLie.Extention = "l" & dbLiee.Extention
     
        If Dir(ficLie.Chemin_Nom_Extention) = "" Then
                'Crée une version compactée de la BD
                Shell "MSACCESS.EXE """ & dbLiee.Chemin_Nom_Extention & """/Compact"
            Else
                'La BD est utilisée, on ne peut pas la compacter.
        End If
     
        Set ficLie = Nothing
        Set dbLiee = Nothing
     
        db.Close: Set db = Nothing
    End Sub
    Ci-dessous le module de classe clsInfoFichier
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Option Compare Database
    Option Explicit
     
    Public Chemin As String 'Sans \ à la fin
    Public Nom As String
    Public Extention As String
     
    Public Property Let Chemin_Nom_Extention(prmChemin_Nom_Extention As String)
        'Découpe un nom avec l'extention en ses morceaux
        Dim positionSlash As Long: positionSlash = InStrRev(prmChemin_Nom_Extention, "\")
     
        If positionSlash <> 0 Then
                Me.Chemin = Left(prmChemin_Nom_Extention, positionSlash - 1)
                Me.Nom_Extention = Mid(prmChemin_Nom_Extention, positionSlash + 1)
            Else
                'Il n'y a de chemin
                Me.Chemin = ""
                Me.Nom_Extention = prmChemin_Nom_Extention
        End If
     
    End Property
     
    Public Property Get Chemin_Nom_Extention() As String
        Chemin_Nom_Extention = Chemin & "\" & Nom & "." & Extention
    End Property
     
    Public Property Let Nom_Extention(prmChemin_Nom_Extention As String)
        'Découpe un nom avec l'extention en ses morceaux
        Dim positionPoint As Long: positionPoint = InStrRev(prmChemin_Nom_Extention, ".")
     
        If positionPoint <> 0 Then
                Nom = Left(prmChemin_Nom_Extention, positionPoint - 1)
                Extention = Mid(prmChemin_Nom_Extention, positionPoint + 1)
            Else
                'Il n'y a pas d'extention
                Nom = prmChemin_Nom_Extention
                Extention = ""
        End If
     
    End Property
     
    Public Property Get Nom_Extention() As String
        Nom_Extention = Nom & "." & Extention
    End Property
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    J'utilise l'instruction DBEngine.CompactDatabase, ça marche bien aussi par contre ça change le nom ce qui complique un peu
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour Nico84.

    J'avais essayé avec DBEngine.CompactDatabase mais, dans mes tests, il ne reconnaissait pas le format accdb.

    Je n'ai peut-être pas su le paramétrer correctement. As-tu un exemple ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Cette syntaxe marche pour .mdb et .accdb chez moi (j'utilise principalement Access 2007 et un peu 2013) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBEngine.CompactDatabase NomFichierOrigine, NomFichierCompact, , , "MS Access;PWD=MonMotDePasse"
    Auparavant je teste comme toi l'existence du fichier ldb ou laccdb et j'en profite pour faire une copie de sauvegarde
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Ok, apparemment je n'ai pas du utilisé CompactDatabase comme je le pensais.

    Une solution exemple avec CompactDatabase qui complète la solution de Nico84 se trouve ici :

    http://warin.developpez.com/tutoriel...et-ulterieurs/

    dans le chapitre "Compactage de la base de données".

    Ma solution a les avantages suivants :
    1. Access s'occupe des noms de fichiers
    2. Cela peut-être fait en parallèle puisque le compactage est dans son propre processus.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. [VB.NET] Comment compacter une base de données Access ?
    Par xVINCEx dans le forum Contribuez
    Réponses: 6
    Dernier message: 05/06/2008, 18h35
  2. [COMPACTAGE] Compacter une base à partir de Java
    Par narmataru dans le forum Access
    Réponses: 2
    Dernier message: 07/11/2005, 21h14
  3. compacter une base de donnée
    Par tpdm dans le forum Access
    Réponses: 1
    Dernier message: 14/10/2005, 11h30
  4. Compacter une base de donnée
    Par Floyd dans le forum Access
    Réponses: 4
    Dernier message: 13/10/2005, 16h05
  5. [VB6] [Access] Compacter une base de donnée
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/09/2002, 11h33

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