Partager via


DBEngine.CompactDatabase Method (DAO)

S’applique à : Access 2013 | Access 2016

Copie et compacte une base de données fermée, et vous donne la possibilité de changer sa version, son ordre de tri, et son chiffrement. (Espaces de travail Microsoft Access uniquement).

Remarque

Lorsque vous utilisez les tableaux liés chiffrés pour une action, mise à jour et requêtes SQL [par exemple, une instruction SQL de mise à jour (CurrentDb.Execute « Mettre à jour... »)], vous devez fournir la clé de chiffrement. Par ailleurs, les tableaux liés sont limités à 19 caractères pour la clé de chiffrement. Voir la sectionTables liés chiffrés à la fin de cette rubrique.

Syntaxe

expression . CompactDatabase(SrcName, DstName, DstLocale, Options, password)

expressionExpression renvoyant un objet DBEngine.

Paramètres

Nom

Obligatoire/facultatif

Type de données

Description

SrcName

Obligatoire

String

Identifie une base de données existante, fermée. Il peut s'agir d'un nom de fichier et chemin d'accès complet, par exemple « C:\db1.mdb ». Si le nom de fichier possède une extension, vous devez la spécifier. Si votre réseau assure la prise en charge des chemins d'accès réseau, vous pouvez également préciser celui-ci, par exemple « \\serveur1\partage1\rép1\db1.mdb ».

DstName

Obligatoire

String

Nom de fichier (et chemin d'accès) de la base de données compactée que vous créez. Il est également possible de spécifier un chemin d'accès réseau. Vous ne pouvez pas utiliser cet argument pour indiquer le même fichier de base de données que SrcName.

DstLocale

Facultatif

Variant

Expression en chaîne qui spécifie un ordre d’assemblage pour créer DstName, comme spécifié dans Remarques.

  • Si vous omettez cet argument, les paramètres régionaux de DstName sont identiques à SrcName.

  • Vous pouvez également créer un mot de passe pour DstName en concaténant la chaîne de mot de passe (en commençant par « ; pwd= ») avec une constante dans l’argument DstLocale, comme ceci : dbLangSpanish & « ; pwd=NewPassword ».

  • Si vous souhaitez utiliser le même DstLocale que SrcName (la valeur par défaut), mais spécifier un nouveau mot de passe, entrez simplement une chaîne de mot de passe pour DstLocale : « ; pwd=NewPassword »

Options

Facultatif

Variant

Optional. Constante ou combinaison de constantes qui indique une ou plusieurs options, comme indiqué dans la section Remarques. Vous pouvez combiner des options en associant les constantes correspondantes.

mot de passe

Facultatif

Variant

Expression de chaîne contenant une clé de chiffrement, si la base de données est chiffrée. La chaîne « ; pwd= » doit précéder le mot de passe réel. Si vous incluez un paramètre de mot de passe dans DstLocale, ce paramètre est ignoré.

Remarque: il s’agit d’un paramètre obsolète et n’est pas pris en charge dans le format .ACCDB. Pour chiffrer un fichier .ACCDB, utilisez le « pwd = » option chaîne. Il est recommandé d'utiliser des mots de passe forts qui combinent des lettres majuscules et minuscules, des chiffres et des signes. Les mots de passe faibles ne regroupent pas ces éléments. Mot de passe fort : Y6dh!et5. Mot de passe faible : Maison27. Utilisez un mot de passe fort facile à mémoriser afin de ne pas avoir à le noter.

Remarques

Vous pouvez utiliser l'une des constantes suivantes pour l'argument DstLocale afin de spécifier la propriété CollatingOrderdu texte pour des comparaisons de chaînes.

Constante

Ordre de classement

dbLangGeneral

Anglais, allemand, français, portugais, italien et espagnol

dbLangArabic

Arabe

dbLangChineseSimplified

Chinois simplifié

dbLangChineseTraditional

Chinois traditionnel

dbLangCyrillic

Russe

dbLangCzech

Tchèque

dbLangDutch

Néerlandais

dbLangGreek

Grec

dbLangHebrew

Hébreu

dbLangHungarian

Hongrois

dbLangIcelandic

Islandais

dbLangJapanese

Japonais

dbLangKorean

Coréen

dbLangNordic

Langues nordiques (Moteur de base de données Microsoft Jet version 1.0 uniquement)

dbLangNorwDan

Norvégien et danois

dbLangPolish

Polonais

dbLangSlovenian

Slovène

dbLangSpanish

Espagnol traditionnel

dbLangSwedFin

Suédois et finnois

dbLangThai

Thaï

dbLangTurkish

Turc

Vous pouvez utiliser l'une des constantes suivantes dans l'argument options pour spécifier s'il faut chiffrer ou déchiffrer la base de données pendant son compactage.

Remarque

Les constantes dbEncrypt dbDecrypt sont déconseillées et sont pas prises en charge dans les formats de fichier .ACCDB.

Constante

Description

dbEncrypt

Chiffre la base de données pendant le compactage.

dbDecrypt

Déchiffre la base de données pendant le compactage.

Si vous ne spécifiez pas de constante de chiffrement ou que vous incluez à la fois dbDecrypt et dbEncrypt, DstName aura le même chiffrement que SrcName.

Vous pouvez utiliser l'une des constantes suivantes dans l'argument options pour spécifier la version du format de données de la base de données compactée. Cette constante n'affecte que la version du format des données de NomDest mais non la version des objets définis par Microsoft Access, tels que les formulaires et les états.

Constante

Description

dbVersion10

Crée une base de données qui utilise le format de fichier de la version 1.0 du moteur de base de données Microsoft Jet pendant le compactage.

dbVersion11

Crée une base de données qui utilise le format de fichier de la version 1.1 du moteur de base de données Microsoft Jet pendant le compactage.

dbVersion20

Crée une base de données qui utilise le format de fichier de la version 2.0 du moteur de base de données Microsoft Jet pendant le compactage.

dbVersion30

Crée une base de données qui utilise le format de fichier de la version 3.0 (compatible avec la version 3.5) du moteur de base de données Microsoft Jet pendant le compactage.

dbVersion40

Crée une base de données qui utilise le format de fichier de la version 4.0 du moteur de base de données Microsoft Jet pendant le compactage.

dbVersion120

Crée une base de données qui utilise le format fichier version 12.0 de moteur de base de données Microsoft Access pendant le compactage.

Vous pouvez spécifier un seul utilisateur par commande. Si vous l'omettez de renseigner une constante de la version, DstName aura la même version que SrcName. Vous ne pouvez compacter DstName que dans une version identique ou supérieure à celle de SrcName.

À mesure que vous modifiez les données dans une base de données, le fichier de base de données peut se fragmenter et utiliser plus d'espace disque que nécessaire. Vous pouvez périodiquement utiliser la méthode CompactDatabase pour compacter la base de données et défragmenter le fichier de base de données. La base compactée est généralement plus petite et s'exécute plus rapidement. Il est également possible de modifier l'ordre de classement, le chiffrement et la version du format de données pendant la copie et le compactage de la base de données.

Vous devez fermer SrcName avant de la compacter. Dans un environnement multi-utilisateur, les autres utilisateurs ne peuvent avoir SrcName ouverte pendant que vous la compactez. Si SrcName n'est pas fermée ou n'est pas accessible en mode exclusif, une erreur se produit.

Dans la mesure où CompactDatabase crée une copie de la base de données, vous devez avoir suffisamment d'espace disque pour la base de données d'origine et la base dupliquée. L'opération de compactage échoue si il n'y a pas suffisamment d'espace disque. La base de données dupliquée DstName ne doit pas nécessairement être sur le même disque que SrcName. Après le compactage réussi d'une base de données, vous pouvez supprimer le fichier SrcName et renommer le fichier DstName compacté avec le nom du fichier d'origine.

La méthode CompactDatabase copie toutes les données et les options d'autorisation de sécurité de la base de données spécifiée par SrcName vers la base de données spécifiée par DstName.

Remarque

Étant donné que la méthodeCompactDatabase ne convertit pas les objets Microsoft Access, vous ne devez pas utiliser CompactDatabase pour convertir une base de données contenant ces objets.

Tableaux liés chiffrés

Les mots de passe chiffrés dépendent du format de fichiers de la base de données que vous utilisez. Si vous utilisez une base de données Access 2003 (.mdb) ou antérieure, vous aurez un mot de passe pour protéger la base de données et un mot de passe distinct pour chiffrer la base de données. Pour les bases de données Access 2007 (.accdb) et version ultérieure (.mdb), la seule option consiste à chiffrer et protéger la base de données avec un mot de passe, comme l’option deux mots de passe distincts a été supprimée.

Remarque

Pour les bases de données Access 2007 (.accdb), le mot de passe est la clé de chiffrement

Vous pouvez utiliser l’exemple suivant du code VBA pour un bouton de commande :

    Private Sub Command0_Click()
    
    Dim strSourcePath As String
    Dim strDestPath As String
    
    strSourcePath = "<path>\sourceDb.accdb"
    strDestPath = "<path>\destDb.accdb"
    
    DBEngine.CompactDatabase strSourcePath, strDestPath, dbLangGeneral & ";pwd=Access", dbVersion120, ";pwd=Access"
    
    Set CurrentDatabase = CurrentDb
    Set LinkedTableDef = CurrentDatabase.CreateTableDef 
    ("My Linked Table")
    LinkedTableDef.Connect = "MS Access;pwd=Access";database=" & strDestPath
    LinkedTableDef.RefreshLink
    
    
    MsgBox "Finished"
    
    End Sub 

Exemple de code suivant montre comment utiliser CompactDatabase avec un mot de passe (clé de chiffrement) et créer un lien à un tableau dans cette base de données compactée. Notez qu’un mot de passe doit être fourni.

    Private Sub CompactAndLink_Click() 
     
    Dim strSourcePath As String
    Dim strDestPath As String
    Dim strSourceTableName As String
    Dim strDestTableName As String
    Dim tdf As TableDef
     
    strSourcePath = "<path>\<database>.accdb"
    strDestPath = "<path>\<database>.accdb"
    strSourceTableName = "<table name in destination database>"
    strDestTableName = "<linked table name>"
     
    ' Compact source database into new destination database with encrypted password
    DBEngine.CompactDatabase strSourcePath, strDestPath, dbLangGeneral & ";pwd=Access", dbVersion120, ";pwd=Access"
     
    ' Link to one of the tables in the destination database
    ' Password must be provided in the Connect property
     
    Set CurrentDatabase = CurrentDb
    Set tdf = CurrentDatabase.CreateTableDef(strDestTableName)
       
        With tdf
            .Connect = ";pwd=Access" & ";DATABASE=" & strDestPath
            .SourceTableName = strSourceTableName
        End With
        
    CurrentDatabase.TableDefs.Append tdf
     
    MsgBox "Database compacted and encrypted password applied. Link to table also completed."
     
    End Sub