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 somit nur Tabellen und Abfragen.
Public Sub DBKomprimieren(ByVal Dateiname As String, _
                          Optional ByVal Pfad As String = vbNullString)
 
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 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 somit alle Objekte der Datenbank.
Public Sub DBKomprimierenReparieren(ByVal Dateiname As String, _
                                    Optional ByVal Pfad As String = vbNullString)
 
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 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)


Web-Links