FAQ 0009: Wie kann ich meine Datenbank reparieren, komprimieren oder das Kennwort ändern?
von Helge Rex
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
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
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.