Die Community zu .NET und Classic VB.
Menü

FAQ 0009: Wie kann ich meine Datenbank reparieren, komprimieren oder das Kennwort ändern?

 von 

Frage 

Wie kann ich eine Datenbank reparieren?

Wie kann ich eine Datenbank komprimieren?

Wie kann ich das Kennwort einer Datenbank ändern?

Datenbank reparieren und/oder komprimieren  

Bei ADO wird die Komprimierung und die Reparatur von der gleichen Methode durchgeführt. Die Änderung des Kennwortes erfolgt über die Verbindungseigenschaften:

Dim objJRO As Object
Dim strOldFile As String
Dim strNewFile As String
Dim strOldPwd As String
Dim strNewPwd As String

'   altes Kennwort der Datenbank
strOldPwd = "olddb"

'   neues Kennwort der Datenbank
strNewPwd = "newdb"

'   Name der zu komprimierenden Datenbank
strOldFile = "Beispiel.mdb"

'   Name der komprimierten Datenbank
strNewFile = "BeispielNeu.mdb"

'   Connection zur Original-DB zusammensetzen
strOldFile = "Data Source=" & strOldFile & ";" & _
             "Jet OLEDB:Engine Type=4;" 

'   Falls die alte Datenkelle mit einem Kennwort geschützt war, muß 
'   folgendes noch angehängt werden:
'strOldFile = strOldFile & _
             "Jet OLEDB:Database Password=" & strOldPwd & ";"

'   Connection zur komprimierten/reparierten DB zusammensetzen
strNewFile = "Data Source=" & strNewFile & ";" & _
             "Jet OLEDB:Engine Type=4;" 

'   Falls die neue Datenkelle mit einem Kennwort geschützt sein soll, 
'   muß folgendes noch angehängt werden:
'strNewFile = strNewFile & _
             "Jet OLEDB:Database Password=" & strNewPwd  & ";"

'   Jet-Engine starten
Set objJRO = CreateObject("JRO.JetEngine")

'   Datenbank komprimieren
Call objJRO.CompactDatabase(strOldFile, strNewFile)

'   Jet-Engine entfernen
Set objJRO = Nothing

Listing 1: Datenbank reparieren und komprimieren

Wer lieber early binding verwenden möchte, muß die "Microsoft Jet and Replication Object Library" einbinden.

Dieser Quelltext ist für Datenbanken ohne Datenbankkennwort gedacht. Ist ein solches Kennwort vergeben worden, muß die enstprechende Quelltextzeile einkommentiert werden.
Wird für die Datenbankverbindung ein Benutzername und ein Kennwort benötigt, müssen im Connection-String die entsprechenden Felder eingefügt werden.
In der oben gezeigten Fassung wird Microsoft Jet 3.x (für Access 97) benutzt (zu erkennen an Jet OLEDB:Engine Type=4). Andere Werte für andere Versionen findet man unter ADO Provider Properties and Settings.

Die Komprimierung und Reparatur ist nur bei MS Access zulässig, alle anderen Datenbanksysteme ignorieren die Anweisung oder melden einen Fehler.

Kennwort ändern  

Das folgende Beispiel von pks zeigt, wie man das Kennwort ändern kann, ohne die Datenbank zu komprimieren.

'----------------------------
'Password einer Access ändern
'----------------------------
Public Function AccessPasswordChange( _
                DBPath As String, _
                ByVal OldPwd As String, _
                ByVal NewPwd As String) As Boolean

   Dim CnP  As ADODB.Connection
   Dim sSQL As String
   
      Set CnP = New ADODB.Connection
      With CnP
         On Error Goto Fehler
         .CursorLocation = adUseClient
         .Mode = adModeShareExclusive
         .Provider = "Microsoft.Jet.OLEDB.4.0"
         .ConnectionString = "Data Source=" & DBPath
         If Len(OldPwd) > 0 Then
            .Properties("Jet OLEDB:Database Password") = OldPwd
            OldPwd = Space$(1) & OldPwd
         Else
            OldPwd = "``"
         End If
         .Open
   
         If Len(NewPwd) = 0 Then
            NewPwd = "``"
         End If
      End With
      
      sSQL = "ALTER Database Password " & NewPwd & OldPwd
      CnP.Execute sSQL
      AccessPasswordChange = True
      
Fehler:
      If Err.Number <> 0 Then
         FehlerAnzeige Err.Number, Err.Description, _
                "AccessPasswordChange"
      End If
      If Not CnP Is Nothing Then
         If CnP.State = adStateOpen Then
            CnP.Close
         End If
         Set CnP = Nothing
      End If
      On Error Goto 0
End Function


Public Sub FehlerAnzeige( _
                ByVal ErrNumber As Long, _
                ByVal ErrDescription As String, _
                Optional ByVal Titel As String = vbNullString)

   Dim Msg As String
   
      Msg = "Fehler " & ErrNumber & vbCrLf & vbCrLf & _
            ErrDescription
      If Len(Titel) > 0 Then
         MsgBox Msg, vbCritical, Titel
      Else
         MsgBox Msg, vbCritical
      End If

      'hier ggf Eintrag in FehlerProtokoll
End Sub

Listing 2: Datenbankkennwort ändern

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.