VBA Tipp: Datenbank komprimieren und reparieren

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

  1. Ich möchte eine Access-Datenbank komprimieren.
  2. Ich möchte eine Access-Datenbank komprimieren und reparieren.

Lösung 1: Komprimieren

  • Das geht mit folgender Sub-Prozedur, die in einem globalen Modul gespeichert wird.
  • Wenn die Datenbank geöffnet ist oder nicht existiert, tritt ein Fehler auf.
  • CompactDatabase ist eine Methode der Access- bzw. Jet-Engine und behandelt deshalb nur Tabellen und Abfragen.
Public Sub DBKomprimieren(ByVal Dateiname As String, _
                          Optional ByVal Pfad As String = vbNullString)
 
   ' Quelle: http://www.dbwiki.net/
 
   Dim strdateiendung As String
   Dim strtempdateipfad As String
 
   ' Pfad anpassen
   If Pfad = vbNullString Then
     Pfad = CurrentProject.Path & "\"
   ElseIf Not Right(Pfad, 1) = "\" Then
     Pfad = Pfad & "\"
   End If
 
   ' Dateiendung abfragen
   strdateiendung = Mid(Dateiname, InStrRev(Dateiname, "."))
   strtempdateipfad = CurrentProject.Path & "\temp" & strdateiendung
 
   ' Komprimieren
   Application.DBEngine.CompactDatabase Pfad & Dateiname, strtempdateipfad
   Kill Pfad & Dateiname
   Name strtempdateipfad As Pfad & Dateiname
 
  End Sub

Aufruf

   Dim strPfad As String
   Dim strDateiname As String
 
   strPfad = "D:\Eigene Dateien\Daten"
   strDateiname = "MeineDatenbank.accdb"
 
   ' Beipiel 1: Die Datenbank befindet sich im aktuellen Verzeichnis
   Call DBKomprimieren(strDateiname)
 
   ' alternativ Beipiel 2: Die Datenbank befindet sich in einem anderen Verzeichnis
   Call DBKomprimieren(strDateiname, strPfad)


Lösung 2: Komprimieren und Reparieren

  • Das geht mit folgender Sub-Prozedur, die in einem globalen Modul gespeichert wird.
  • Wenn die Datenbank geöffnet ist oder nicht existiert, tritt ein Fehler auf.
  • CompactRepair ist eine Methode der Access-Anwendung und behandelt deshalb alle Objekte der Datenbank.
Public Sub DBKomprimierenReparieren(ByVal Dateiname As String, _
                                    Optional ByVal Pfad As String = vbNullString)
 
   ' Quelle: http://www.dbwiki.net/
 
   Dim strdateiendung As String
   Dim strtempdateipfad As String
 
   ' Pfad anpassen
   If Pfad = vbNullString Then
      Pfad = CurrentProject.Path & "\"
   ElseIf Not Right(Pfad, 1) = "\" Then
      Pfad = Pfad & "\"
   End If
 
   ' Dateiendung abfragen
   strdateiendung = Mid(Dateiname, InStrRev(Dateiname, "."))
   strtempdateipfad = CurrentProject.Path & "\temp" & strdateiendung
 
   ' Komprimieren und Reparieren
   Call Application.CompactRepair(Pfad & Dateiname, strtempdateipfad)
   Kill Pfad & Dateiname
   Name strtempdateipfad As Pfad & Dateiname
 
  End Sub

Aufruf

   Dim strPfad As String
   Dim strDateiname As String
 
   strPfad = "D:\Eigene Dateien\Daten"
   strDateiname = "MeineDatenbank.accdb"
 
   ' Beipiel 1: Die Datenbank befindet sich im aktuellen Verzeichnis
   Call DBKomprimierenReparieren(strDateiname)
 
   ' alternativ Beipiel 2: Die Datenbank befindet sich in einem anderen Verzeichnis
   Call DBKomprimierenReparieren(strDateiname, strPfad)


Weblinks