Tipp 0234 Datenbank komprimieren/reparieren (DAO)
Autor/Einsender:
Datum:
  Detlev Schubert
10.05.2002
Entwicklungsumgebung:   VB 5
Die häufige Nutzung einer Datenbank durch das Hinzufügen und Löschen von Datensätzen hat zur Folge, dass sich im Laufe der Zeit immer mehr "Datenmüll" ansammelt, und somit die Datenbank immer größer wird. Wie auch eine Festplatte sollte man daher eine Datenbank von Zeit zu Zeit komprimieren. Dazu stellt die Datenbank-Engine mit CompactDatabase eine Funktion zur Verfügung, die diese Aufgabe übernimmt, und somit beliebige Datenbanken komprimieren kann.
Unser Tipp zeigt, wie neben dem Komprimieren auch eine z. B. durch Stromausfall beschädigte Datenbank mit der Funktion RepairDatabase repariert werden kann, bevor man zu einem Backup greift.
Hinweis
Die RepairDatabase-Methode wird in DAO 3.6 nicht mehr unterstützt, siehe dazu auch
PRB: RepairDatabase Method Is No Longer Available in DAO 3.6
 
Option Explicit

Private Sub Command1_Click()
  Komprimieren
End Sub

Sub Komprimieren()
  Dim quelle As String
  Dim n As String, v As String, e As String

  On Error GoTo fehler

  CmDialog1.Filter = "Access (*.mdb)|*.mdb"
  CmDialog1.Flags = &H1000
  CmDialog1.FilterIndex = 1
  CmDialog1.Action = 1

  If CmDialog1.FileName <> "" Then
    quelle = CmDialog1.FileName
    fileSplit quelle, v, n, e
    CompactDatabase quelle, v & n & ".$$$"
    Kill quelle
    Name v & n & ".$$$" As quelle
    MsgBox "Komprimierung erfolgreich abgeschlossen!", 64, _
          "Information"
  End If

  Exit Sub

fehler:
  MsgBox "Fehler bei der Ausführung!", 16, "Problem"
  Exit Sub
  Resume Next
End Sub

Private Sub Command2_Click()
  Reparieren
End Sub

Sub Reparieren()
  Dim quelle As String
  Dim n As String, v As String, e As String

  On Error GoTo fehler1

  CmDialog1.Filter = "Access (*.mdb)|*.mdb"
  CmDialog1.Flags = &H1000
  CmDialog1.FilterIndex = 1
  CmDialog1.Action = 1
  If CmDialog1.FileName <> "" Then
    Screen.MousePointer = 11
    quelle = CmDialog1.FileName
    RepairDatabase (quelle)
    Screen.MousePointer = 0

    MsgBox "Datenbank erfolgreich repariert!", 64, "Information"

    If MsgBox("Soll die Datenbank komprimiert werden?", 36, _
            "Frage") = 6 Then
      Screen.MousePointer = 11
      fileSplit quelle, v, n, e
      CompactDatabase quelle, v & n & ".$$$"
      Kill quelle
      Name v & n & ".$$$" As quelle
      MsgBox "Komprimierung erfolgreich abgeschlossen!", 64, _
            "Information"
    End If
  End If

  Screen.MousePointer = 0
  Exit Sub

fehler1:
  MsgBox "Fehler bei der Ausführung!", 16, "Problem"
  Screen.MousePointer = 0
  Exit Sub
  Resume Next
End Sub

Sub fileSplit(ByVal s$, path$, file$, ext$)
  Dim i As Integer

  For i = Len(s) To 1 Step -1
    If Mid(s, i, 1) = "\" Then
      ext = ""
      Exit For
    End If
    If Mid(s, i, 1) = "." Then
      ext = Right(s, Len(s) - i)
      s = Left(s, i - 1)
      Exit For
    End If
  Next i

  i = Len(s)
  If InStr(s, "\") <> 0 Then
    While Mid(s, i, 1) <> "\"
      i = i - 1
    Wend
  End If

  path = Left(s, i)
  file = Right(s, Len(s) - i)
End Sub
 
Hinweis
Um diesen Tipp ausführen zu können, muss die Microsoft DAO 3.51 Object Library als Verweis in das Projekt eingebunden werden.

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3 kB) Downloads bisher: [ 2626 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 25. Juni 2011