Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1708to1712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
Anzeige
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...
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige