Freigeben über


DBEngine.CompactDatabase-Methode (DAO)

Gilt für: Access 2013 | Access 2016

Kopiert und komprimiert eine geschlossene Datenbank und bietet die Möglichkeit, ihre Version, Sortierreihenfolge und Verschlüsselung festzulegen. (Nur Microsoft Access-Arbeitsbereiche).

Hinweis

Wenn Sie verschlüsselte verknüpfte Tabellen für action-, update- und SQL-Abfragen verwenden, z. B. eine SQL UPDATE-Anweisung (CurrentDb.Execute „UPDATE..."), müssen Sie den Verschlüsselungsschlüssel angeben. Verknüpfte Tabellen weisen außerdem eine Beschränkung von 19 Zeichen für den Verschlüsselungsschlüssel auf. Weitere Informationen finden Sie im Abschnitt Verschlüsselte verknüpfte Tabellen am Ende dieses Themas.

Syntax

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

expression Ein Ausdruck, der ein DBEngine-Objekt zurückgibt.

Parameter

Name

Erforderlich/optional

Datentyp

Beschreibung

SrcName

Erforderlich

String

Gibt eine vorhandene geschlossene Datenbank an. Kann ein vollständiger Pfad und Dateiname sein, wie z. B. „C:\db1.mdb“. Wenn der Dateiname eine Erweiterung hat, müssen Sie diese angeben. Wenn Ihr Netzwerk dies unterstützt, können Sie auch einen Netzwerkpfad wie z. B. „\\server1\share1\dir1\db1.mdb“ angeben.

DstName

Erforderlich

Zeichenfolge

Der Dateiname (und Pfad) der komprimierten Datenbank, die Sie erstellen. Sie können auch einen Netzwerkpfad angeben. Mit diesem Argument kann nicht die gleiche Datenbankdatei angegeben werden wie mit SrcName.

DstLocale

Optional

Variant

Ein Zeichenfolgenausdruck, der eine Sortierreihenfolge zum Erstellen von DstName angibt, wie unter „Hinweise“ angegeben.

  • Wenn Sie dieses Argument weglassen, hat DstName das gleiche Gebietsschema wie SrcName.

  • Sie können auch ein Kennwort für DstName erstellen, indem Sie die Kennwortzeichenfolge verketten (beginnend mit "; pwd=") mit einer Konstante im Argument DstLocale wie folgt: dbLangSpanish & "; pwd=NewPassword".

  • Wenn Sie dieselbe DstLocale wie SrcName (Standardwert) verwenden möchten, aber ein neues Kennwort angeben möchten, geben Sie einfach eine Kennwortzeichenfolge für DstLocale ein: "; pwd=NewPassword"

Optionen

Optional

Variante

Optional. Ein Konstante oder Kombination aus Konstanten, mit der mindestens eine Option angegeben wird, wie unter „Hinweise" angegeben. Sie können Optionen durch Summieren der entsprechenden Konstanten kombinieren.

password

Optional

Variant

Ein Zeichenfolgenausdruck, der einen Verschlüsselungsschlüssel enthält, wenn die Datenbank verschlüsselt ist. Die Zeichenfolge „; Pwd =" muss vor dem eigentlichen Kennwort stehen. Wenn Sie eine Kennworteinstellung in DstLocale einschließen, wird diese Einstellung ignoriert.

HINWEIS: Dies ist ein veralteter Parameter, der im ACCDB-Format nicht unterstützt wird. Zum Verschlüsseln einer ACCDB-Datei, verwenden Sie die "pwd="-Optionszeichenfolge. Verwenden Sie sichere Kennwörter, die Groß- und Kleinbuchstaben, Zahlen und Symbole in Kombination verwenden. Unsichere Kennwörter enthalten keine Kombination dieser Elemente. Sicheres Kennwort: Y6dh!et5. Unsicheres Kennwort: Haus27. Verwenden Sie ein sicheres Kennwort, das Sie sich merken können, damit Sie es nicht aufschreiben müssen.

Bemerkungen

Sie können eine der folgenden Konstanten für das DstLocale-Argument verwenden, um die CollatingOrder -Eigenschaft für Zeichenfolgenvergleiche von Text anzugeben.

Konstante

Sortierreihenfolge

dbLangGeneral

Englisch, Deutsch, Französisch, Portugiesisch, Italienisch und modernes Spanisch

dbLangArabic

Arabic

dbLangChineseSimplified

Chinesisch (vereinfacht)

dbLangChineseTraditional

Chinesisch (traditionell)

dbLangCyrillic

Russisch

dbLangCzech

Tschechisch

dbLangDutch

Niederländisch

dbLangGreek

Griechisch

dbLangHebrew

Hebräisch

dbLangHungarian

Ungarisch

dbLangIcelandic

Isländisch

dbLangJapanese

Japanisch

dbLangKorean

Koreanisch

dbLangNordic

Nordeuropäische Sprachen (nur Version 1.0 des Microsoft Jet-Datenbankmoduls)

dbLangNorwDan

Norwegisch und Dänisch

dbLangPolish

Polnisch

dbLangSlovenian

Slowenisch

dbLangSpanish

Spanisch (Traditionell)

dbLangSwedFin

Schwedisch und Finnisch

dbLangThai

Thailändisch

dbLangTurkish

Türkisch

Sie können eine der folgenden Konstanten im options-Argument verwenden, um anzugeben, ob die Datenbank während der Komprimierung verschlüsselt werden soll.

Hinweis

Die Konstanten dbEncrypt und dbDecrypt sind veraltet und werden im ACCDB-Dateiformat nicht unterstützt.

Konstante

Beschreibung

dbEncrypt

Verschlüsselt die Datenbank beim Komprimieren.

dbDecrypt

Entschlüsselt die Datenbank beim Komprimieren.

Wenn Sie keine Verschlüsselungskonstante angeben, oder wenn Sie sowohl DbDecrypt als auch DbEncrypt einschließen, hat DstName die gleiche Verschlüsselung wie SrcName.

Sie können eine der folgenden Konstanten im options-Argument verwenden, um die Version des Datenformats für die komprimierte Datenbank anzugeben. Diese Konstante betrifft nur die Version des Datenformats von DstName und hat keine Auswirkungen auf die Version von von Microsoft Access definierten Objekten, wie Formulare und Berichte.

Konstante

Beschreibung

dbVersion10

Erstellt eine Datenbank, die beim Komprimieren das Dateiformat der Version 1.0 des Microsoft Jet-Datenbankmoduls verwendet.

dbVersion11

Erstellt eine Datenbank, die beim Komprimieren das Dateiformat der Version 1.1 des Microsoft Jet-Datenbankmoduls verwendet.

dbVersion20

Erstellt eine Datenbank, die beim Komprimieren das Dateiformat der Version 2.0 des Microsoft Jet-Datenbankmoduls verwendet.

dbVersion30

Erstellt eine Datenbank, die beim Komprimieren das Dateiformat der Version 3.0 des Microsoft Jet-Datenbankmoduls (kompatibel mit Version 3.5) verwendet.

dbVersion40

Erstellt eine Datenbank, die beim Komprimieren das Dateiformat der Version 4.0 des Microsoft Jet-Datenbankmoduls verwendet.

dbVersion120

Erstellt eine Datenbank, die beim Komprimieren das Dateiformat der Version 12.0 des Microsoft Access-Datenbankmoduls verwendet.

Sie können nur eine Versionskonstante angeben. Wenn Sie keine Versionskonstante angeben, hat DstName die gleiche Version wie SrcName. Sie können DstName nur auf eine Version komprimieren, die der von SrcName entspricht oder höher ist.

Wenn Sie Daten in einer Datenbank ändern, kann die Datenbankdatei fragmentiert werden und mehr Speicherplatz belegen als erforderlich. Sie können die Datenbank in regelmäßigen Abständen mit der CompactDatabase -Methode komprimieren, um die Datenbankdatei zu defragmentieren. Die komprimierte Datenbank ist in der Regel kleiner und wird oft schneller ausgeführt. Sie können auch die Sortierreihenfolge, die Verschlüsselung oder die Version des Datenformats ändern, während Sie die Datenbank kopieren und komprimieren.

Sie müssen SrcName schließen, bevor Sie die Datenbank komprimieren. In einer Mehrbenutzerumgebung darf SrcName während der Komprimierung nicht von einem anderen Benutzer geöffnet sein. Wenn SrcName nicht geschlossen oder nicht für die exklusive Verwendung verfügbar ist, tritt ein Fehler auf.

Da CompactDatabase eine Kopie der Datenbank erstellt, muss genügend Speicherplatz für das Original und die Kopie der Datenbank vorhanden sein. Wenn nicht genügend Speicherplatz vorhanden ist, tritt bei der Komprimierung ein Fehler auf. Die Kopie der DstName-Datenbank muss sich nicht auf demselben Datenträger wie SrcName befinden. Nach erfolgreicher Komprimierung einer Datenbank können Sie die SrcName-Datei löschen und die komprimierte DstName-Datei in den ursprünglichen Dateinamen umbenennen.

Die CompactDatabase-Methode kopiert alle Daten und die Einstellungen für die Sicherheitsberechtigung aus der durch SrcName angegebenen Datenbank in die durch DstName angegebene Datenbank.

Hinweis

Da die CompactDatabase-Methode keine Microsoft Access-Objekte konvertiert, sollten Sie CompactDatabase nicht zum Konvertieren einer Datenbank verwenden, die solche Objekte enthält.

Verschlüsselte verknüpfte Tabellen

Verschlüsselte Kennwörter sind vom Dateiformat der Datenbank, die Sie verwenden, abhängig. Wenn Sie eine Access 2003 (.mdb) oder frühere Version der Datenbank verwenden, haben Sie ein Kennwort zum Schützen der Datenbank und ein weiteres Kennwort zum Verschlüsseln der Datenbank. Bei Datenbanken der Version Access 2007 (.accdb) und höher (.mdb) können Sie die Datenbank nur mit einem Kennwort verschlüsseln und schützen, da die Option zur Verwendung von zwei verschiedenen Kennwörtern entfernt wurde.

Hinweis

Für Access 2007-Datenbanken (ACCDB) ist das Kennwort der Verschlüsselungsschlüssel.

Sie können den folgenden VBA-Beispielcode für eine Befehlsschaltfläche verwenden:

    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 

Im folgenden Codebeispiel wird gezeigt, wie Sie CompactDatabase mit einem Kennwort (Verschlüsselungsschlüssel) verwenden und dann eine Verknüpfung zu einer Tabelle in dieser komprimierten Datenbank herstellen. Beachten Sie, dass ein Kennwort eingegeben werden muss.

    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