Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Access Steuerung aus Excel-VBA

Access Steuerung aus Excel-VBA
06.09.2019 09:41:42
Hans-Jürgen
Hallo Wissende,
ich bastele noch an einem Excel-Frontend, mit der eine Access-Datenbank befüllt und ausgelesen wird. Dieses Frontend wird von mehreren Anwendern gleichzeitig bedient (über SQL-Connectstrings)
Nun die Frage: Ist es möglich, aus Excel-VBA heraus täglich einen SQL-Befehl zu senden, dass die Access-Datenbank komprimiert und repariert wird? Ich weiß, dass es in Access die Option gibt, dass das immer beim Speichern passiert, aber das ist mir zu oft und geht auf die Performance, ich will das nur 1x täglich ansteuern.
Vielen Dank!
Hans-Jürgen
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Access Steuerung aus Excel-VBA
06.09.2019 13:22:09
volti
Hallo Hans-Jürgen,
ich weiß nicht, ob ein und dieselbe DB per SQL-Code komprimiert werden kann.
Die Möglichkeit, eine Access-Datei von Excel aus zu komprimieren gibt es aber schon. Leider habe ich mich schon länger nicht mehr damit beschäftigt. Deshalb nur mal einen (vielleicht auch schon ausreichender) Code-Schnipsel als Anregung für Dich. Ansonsten google mal nach DBEngine.CompactDatabase.
Sub Komprimiere()
  Dim accApp As Object, Quellpfad As String, Zielpfad As String
  Set accApp = CreateObject("ACCESS.Application")
  Quellpfad = "C:\\MeineDB.mdb"                         'unkomprimiert
  Zielpfad = Replace(Quellpfad, ".mdb", "_Komp.mdb")    'komprimiert
  If Dir$(Zielpfad) <> "" Then Kill Zielpfad            'Ggf schon vorhandene Ziel-Datei löschen
  accApp.DBEngine.CompactDatabase Quellpfad, Zielpfad ', "; Pwd =VOLTI", , "; Pwd =VOLTI"
  If Dir$(Zielpfad) <> "" Then
    If Dir$(Quellpfad) <> "" Then Kill Quellpfad        'Alte Quell-Datei löschen
    Name Zielpfad As Quellpfad                          'Neue Datei in alte Datei umbenennen
  End If
  Set accApp = Nothing
End Sub

viele Grüße
Karl-Heinz
Anzeige
AW: Access Steuerung aus Excel-VBA
06.09.2019 15:06:50
Hans-Jürgen
Hallo Karl-Heinz,
wow, vielen Dank, mit dem Schlüsselwort "DBEngine.CompactDatabase" komme ich schon weiter.
Ich habe mal die Existenzprüfung aus deinem Beispiel rausgelassen. In der bestehenden globalen Variablen strDBPfad ist der Pfad zur Datenbank, in strPasswort ist das Passwort.
Für die Angabe des Ziels habe ich erstmal den Dateinamen um ein x ergänzt. (das mit dem "killen" mache ich dann später)
Dim accApp As Object
Dim stemp As String
stemp = Replace(strDBPfad, ".accdb", "x.accdb")
Set accApp = CreateObject("Access.Application")
'accApp.OpenCurrentDatabase strDBPfad, , strPasswort
accApp.DBEngine.CompactDatabase strDBPfad, stemp, strPasswort
accApp.CloseCurrentDatabase
Set accApp = Nothing
Der Open-Befehl klappte (auch mit dem Passwort). Access hat eine temporäre Datei erstellt. Ich habe den Befehl auskommentiert, weil ich beim CompactDatabase-Befehl die Aussage bekomme, dass jemand anderes die Datei schon geöffnet hat.
Macht nichts, dachte ich, klappt vielleicht auch ohne. Hätte es auch fast, aber leider nimmt er mit in der oben genannten Variante das Passwort nicht. ("Kein zulässiges Passwort").
Habe irgendwo eine Referenz gefunden, nach der vorher noch "pwd=" stehen muss, damit klappte es auch nicht.
Vielen Dank für die Unterstützung!
Hans-Jürgen
Anzeige
AW: Access Steuerung aus Excel-VBA
06.09.2019 15:11:33
Hans-Jürgen
noch ein "Selbstedit", weil ich das Häkchen vergessen habe, um es als weiterhin offen zu kennzeichnen
AW: Access Steuerung aus Excel-VBA
06.09.2019 16:34:27
volti
Hallo Hans-Jürgen,
schön, dass es Dich weitergebracht hat.
- Dass das mit dem vorherigen Öffnen der Datei schief geht, war mir klar, da der Komprimierungsprozess auf geschlossene Datei angewendet wird.
- In meinem Beispiel (von früher) habe ich die Passwortergänzung auskommentiert. Bei mir waren die DB geschützt, wusste nicht wie es bei Dir sein soll.
Noch viel Erfolg beim Optimieren. :-)
viele Grüße
Karl-Heinz
Anzeige
AW: Access Steuerung aus Excel-VBA
06.09.2019 16:36:49
volti
Hi,
hatte eigentlich das Häkchen für noch offen gesetzt. Hier noch ein Versuch.....
VG KH
AW: Access Steuerung aus Excel-VBA
06.09.2019 18:06:20
Hans-Jürgen
Hi,
vielen Dank - ich hatte leider deine Auskommentierung des Passworts übersehen.
Aber wenn ich das übernehme (natürlich mit meinem Passwort) bekomme ich "kein zulässiges Kennwort"
Ich habe auch schon mit dem Präfix rumprobiert: "pwd=" / "pwd =" und so weiter, nichts funzt.
Aber ich leg das mal beiseite und versuche es nach dem Wochenende nochmal - vielleicht habe ich einen anderen Klops drin. Aber dafür bin ich gerade zu blind.
Jetzt bleibt der Haken draußen - außer natürlich, du hast noch eine Ahnung, was ich falsch mache...
Anzeige
HEUREKA!
08.09.2019 16:32:22
Hans-Jürgen
Vielen Dank, ohne die Hilfe hätte ich es nicht geschafft. Falls es nochmal jemand braucht...
Set objDAO = CreateObject("DAO.DBEngine.120")
On Error Resume Next
objDAO.CompactDatabase strDBPfad, strTemp, , 128, ";pwd=" & strPasswort
Set objDAO = Nothing
Kill strDBPfad

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Access Steuerung aus Excel-VBA


Schritt-für-Schritt-Anleitung

Um die Access-Datenbank aus Excel-VBA zu komprimieren und zu reparieren, folge diesen Schritten:

  1. VBA-Umgebung öffnen:

    • Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Neues Modul erstellen:

    • Gehe zu Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Code einfügen:

    • Füge den folgenden Code in das Modul ein:
    Sub KomprimiereDatenbank()
       Dim objDAO As Object
       Dim strDBPfad As String
       Dim strTemp As String
       Dim strPasswort As String
    
       ' Pfad zur Access-Datenbank und Passwort anpassen
       strDBPfad = "C:\DeinPfad\DeineDatenbank.accdb"
       strTemp = "C:\DeinPfad\TempDatenbank.accdb"
       strPasswort = "deinPasswort"
    
       ' DAO.DBEngine verwenden
       Set objDAO = CreateObject("DAO.DBEngine.120")
       On Error Resume Next
       objDAO.CompactDatabase strDBPfad, strTemp, , 128, ";pwd=" & strPasswort
       Set objDAO = Nothing
    
       ' Alte Datei löschen
       Kill strDBPfad
       ' Komprimierte Datei umbenennen
       Name strTemp As strDBPfad
    End Sub
  4. Anpassungen vornehmen:

    • Achte darauf, den strDBPfad und das strPasswort entsprechend deiner Datenbank anzupassen.
  5. Makro ausführen:

    • Führe das Makro aus, um die Datenbank zu komprimieren und zu reparieren.

Häufige Fehler und Lösungen

  • Fehler: "Kein zulässiges Kennwort"

    • Stelle sicher, dass das Passwort korrekt ist und das Format ";pwd=" & strPasswort verwendet wird.
  • Fehler: "Datei ist bereits geöffnet"

    • Der Komprimierungsprozess muss auf einer geschlossenen Datei angewendet werden. Stelle sicher, dass keine andere Anwendung die Datenbank zur gleichen Zeit verwendet.
  • Fehler: Zugriff auf Datenbank verweigert

    • Überprüfe die Berechtigungen der Datei und stelle sicher, dass du über die notwendigen Rechte verfügst.

Alternative Methoden

Wenn die Verwendung von VBA nicht möglich ist oder du eine andere Methode bevorzugst, kannst du die Access-Datenbank auch direkt in Access komprimieren und reparieren:

  1. Öffne die Access-Datenbank.
  2. Gehe zu Datenbankwerkzeuge > Datenbank komprimieren und reparieren.
  3. Speichere die Änderungen.

Praktische Beispiele

Hier sind einige praktische Beispiele für den Code:

  • Komprimieren einer .mdb Datei:

    Sub KomprimiereMDB()
       Dim objDAO As Object
       Dim strDBPfad As String
       Dim strTemp As String
    
       strDBPfad = "C:\DeinPfad\DeineDatenbank.mdb"
       strTemp = "C:\DeinPfad\TempDatenbank.mdb"
    
       Set objDAO = CreateObject("DAO.DBEngine.120")
       objDAO.CompactDatabase strDBPfad, strTemp
       Set objDAO = Nothing
    
       Kill strDBPfad
       Name strTemp As strDBPfad
    End Sub

Diese Beispiele zeigen, wie du sowohl .accdb als auch .mdb Dateien komprimieren kannst.


Tipps für Profis

  • Automatisierung: Du kannst das Makro mit der Windows Aufgabenplanung automatisieren, um die Datenbank täglich zu komprimieren.
  • Fehlerprotokollierung: Implementiere ein einfaches Fehlerprotokoll, um eventuelle Probleme bei der Komprimierung zu dokumentieren.
  • Sicherungskopien: Erstelle regelmäßig Sicherungskopien deiner Datenbank, bevor du Komprimierungen durchführst.

FAQ: Häufige Fragen

1. Wie kann ich eine Access-Datenbank ohne Access öffnen? Es gibt Tools und Bibliotheken, die es ermöglichen, Access-Dateien zu lesen, ohne Access installiert zu haben, jedoch ist der Zugriff auf alle Funktionen eingeschränkt.

2. Kann ich die Access-Datenbank komprimieren, während sie verwendet wird? Nein, die Datenbank muss geschlossen sein, um den Komprimierungsprozess durchzuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige