Hallo Gemeinde,
ich versuche unter VBA die aktuelle Datenbank mit FileCopy unter einem neuen Namen abzuspeichern.
Dabei erhalte ich immer den Laufzeitfehler 70, Zugriff verweigert.
Gebe ich als Quelle irgendeine andere Datei ein, funktioniert es.
Wie kann ich die Datenbank per VBA Speichern, bzw. mit neuem Namen speichern?
Besten Dank schon mal vorab
Markus
Hallo,
die Datenbank muss geschlossen sein. Du musst also aus einer anderen Datenbank die Kopie Deiner Arbeitsdb anlegen.
Wie es ja auch funktioniert hat.
Hallo,
ich möchte die Datenbank als "Frontend" an die Mitarbeiter verteilen.
Das habe ich immer im Windowsexplorer über: Copy-Paste-Umbenennen gemacht.
Lieber wäre es mir abe über eine Taste im laufenden System.
Da muß es doch eine Möglichkeit geben.
Hallo,
wie Klaus schon ausgeführt hat, kannst du eine geöffnete DB so nicht kopieren. Such mal nach "ms access autoupdater", da findest du bestimmt weitere Informationen dazu.
Siehe auch:
https://access-im-unternehmen.de/AccessFrontend_automatisch_aktualisieren/ (https://access-im-unternehmen.de/AccessFrontend_automatisch_aktualisieren/)
Knobbi38
Ich habe es in einer meiner Datenbanken hinbekommen mit folgendem Code:
Voraussetzung: der Verweis auf Microsoft Scripting Runtime muss angemeldet sein.
Public Sub DB_Sichern()
' Quelle: http://www.office-loesung.de/ftopic38239_0_0_asc.php
' leider nicht mehr aufrufbar
Dim str_Quelldatei As String, str_Zieldatei As String, obj_FSO As Variant
Set obj_FSO = CreateObject("Scripting.FileSystemObject")
' Sicherung des Backends
str_Quelldatei = "Deine_Original_Backend_DB_inkl_Pfad"
str_Zieldatei = "Deine_Sicherungs_Backend_DB_inkl_Pfad"
obj_FSO.CopyFile str_Quelldatei, str_Zieldatei, True
' Sicherung des Frontends
str_Quelldatei = "Deine_Original_Frondend_DB_inkl_Pfad"
str_Zieldatei = "Deine_Sicherungs_Frondend_DB_inkl_Pfad"
obj_FSO.CopyFile str_Quelldatei, str_Zieldatei, True
MsgBox "Sicherheitskopien erfolgreich erstellt"
End Sub
Wohlgemerkt, aus der geöffneten Original-Frontend-DB heraus per Button-Klick und Auruf des o.a. Codes.
Hallo,
per Explorer kann man auch eine geöffnete Access-Datei kopieren (wenngleich nicht unbedingt ratsam). Daher geht es extern mit dem FSO-Objekt (oder sicherlich auch mit einem Shell-Befehl mit "copy"), während FileCopy eine VBA-Anweisung ist, die das vermutlich blockiert (nutze ich nie.. :) ).
Ich würde allerdings empfehlen, für das Deployment einen geregelten Ablauf zu machen. Das kann durchaus per Skript erfolgen, z.B. Powershell, Python, VBScript, CMD...
Dabei 1. einen Backup der aktuellen und geschlossenen Entwicklerdatei machen
2. ein Compact & Repair durchführen
3. VBA kompilieren (Option Explicit in allen Modulen erzeugen nicht vergessen)
4. ACCDE aus der ACCDB erzeugen
5. ACCDE an die User verteilen. Entweder auf einem Netzlaufwerk zur Verfügung stellen für gemeinsame Nutzung (nicht empfohlen) oder dort zum Herunterladen zur Verfügung stellen (Ordner Schreibberechtigung entfernen, um das Starten dort zu verhindern). Beim Start des Frontends beim User kann dies die Version ermitteln (dazu gibt es reichlich Infos im Netz) und das neue Frontend herunterladen/starten.
So mal als grobe mögliche Vorgehensweise.
Gruß
Christian
allo,
ich würde unter keinen Umständen eine geöffnete Datei (DB) kopieren. Das trifft mMn besonders auf Access zu, denn man kann nicht sicher sein, dass die DB vollständig geladen ist.
Die übliche vorgehensweise mit dem Verteilen des FE hat ja Christian beschrieben.
Hallo,
ich möchte hier auf keinen Fall Christians und Klaus' Aussagen widersprechen und unterstütze diese sogar.
Den Code in meinem Beitrag #4 nutze ich auch nur bei meiner eigenen, privaten, von mir allein genutzten DB auf einem Einzelplatz-PC, und das seit inzwischen mehreren Jahren.
Hatte auch schon mal den Fall, dass ich die eine oder andere so kopierte Sicherungsdatei wieder mal ganz oder mal aus ihr heraus einzelne Datenschnipsel
(handverlesene Datensätze oder Code-Abschnitte o.a.) ,,zurückholen" musste.
Es gab da nie Probleme, was nix heißen muss ( geht 99-mal gut, und beim 100.ten ...)
In der Tat sah ich heute (aufgrund Eurer ,,Nicht"-Empfehlungen), dass die kopierten DB-Sicherungsdateien andere Dateigrößen haben. Interessant, und macht mich nachdenklich..
Zitat von: LehmeMa am März 13, 2026, 09:56:00ich möchte die Datenbank als "Frontend" an die Mitarbeiter verteilen.
Moin Markus,
ich habe sehr gute Erfahrungen mit dieser Vorgehensweise gemacht:
1. FrontEnd in einem Netzlaufwerk ablegen (kryptischer Name, damit nicht irgendwelche Spezis eine Verknüpfung erstellen)
2. Batch-Datei erstellen
Minimalausführung wäre
if not exist c:\DBName md c:\DBName
copy netzlaufwerkbuchstabe:\kryptischerFrontEndname.accdb c:\DBName\DBName.accdb
start c:\DBName\DBName.accdbDas kann man natürlich auch noch ausschmücken
3. eine Verknüpfung auf diese Batchdatei erstellen
Dort kann man auch das Symbol der Datenbank als Symbol der Verknüpfung einstellen
Name der Verknüpfung: "DatenbankName - Installer"
4. Den Usern diesen Link zur Verfügung stellen
Das hat den Effekt, dass man auch während der Betriebszeiten Änderungen am FrontEnd durchführen kann, ohne dass die Nutzer etwas davon mitbekommen. Bei jedem Neustart des FrontEnds bekommt der Nutzer die aktuellste Version.
Da bei uns viele Nutzer mit Verknüpfungen auf dem Desktop arbeiten, habe ich die Batch so geschrieben, dass sie eine Kopie von sich selbst auf dem Desktop des Nutzers anlegen, dann ohne den "-Installer" am Ende.
Gruß
Doming
Hallo zusammen,
Danke für die vielen Antworten.
@Werner: #4 funktioniert wunderbar
@klaus: ich möchte ja auch nur das FE kopieren. Die DB bleibt dadurch ja hoffentlich unberührt.
Meine bisherige Lösung war: für jeden Nutzer habe ich eine eigene Kopie des FE auf dem Server.
So kann ich jederzeit die Dateien aktualisieren, solange der Nutzer nicht aktiv ist.
Jeder hat nur einen Link zu "seinem" Frontend auf dem Rechner. Weiterer Vorteil: Ist der Nutzer offline (Aussendienst) öffnet sich schon kein FE mit fehlendem BE ;-)
Der Lösungsvorschlag von Doming mit der Batch-Datei klingt auch gut (Risiko: s.o.)
Die Lösung von Christian kling am "proffessionellsten".
Leider bekomme ich die Meldung: "Microsoft Access konnte keine ACCDE-, MDE- oder ADE-Datei erstellen.
Gruß Markus
Zitat von: LehmeMa am März 16, 2026, 12:01:37Meine bisherige Lösung war: für jeden Nutzer habe ich eine eigene Kopie des FE auf dem Server.
So musst Du bei einer SW-Änderung also mehrere FEs kopieren, bei meiner Lösung gibt es nur ein FE, welches jeder Nutzer beim Start auf seinen Rechner kopiert. Die Quelldatei wird also nur readonly gelesen und kann jederzeit überschrieben werden, auch wenn der Nutzer aktiv ist.
Hallo,
für jeden User einen Ordner auf einem Server ist auch eine durchaus gute Praxis, macht man vor allem so, wenn man die User per Terminal Server Access als RemoteApp starten läßt.
ACCDE: Kann nur erstellt werden, wenn es beim Kompilieren in VBA keine Fehler gab. Wie gesagt, in JEDES Modul oben "Option Explicit" einfügen (wenn nicht schon da) und dann den Code kompilieren. Erst wenn das ohne Fehler funktioniert (was nicht gleichbedeutend ist mit "der Code ist fehlerfrei"...), kannst Du eine ACCDE daraus erstellen.
Bitte berücksichtigen, daß überall Fehler abgefangen werden in VBA, denn da mit ACCDE nicht in den Code verzweigt werden kann, wenn es zu einem nicht angefangenen Fehler kommt, "hängt" die Anwendung dann.
Gruß
Christian
@DomingDarum hat mich deine Lösung auch erst begeistert.
Doch bei fehlender Verbindung zum BE wird der User mit Fehlermeldungen konfrontiert.
Mal sehen, wie ich die abfangen kann.
Zitat von: Bitsqueezer am März 16, 2026, 12:28:41ACCDE: Kann nur erstellt werden, wenn es beim Kompilieren in VBA keine Fehler gab.
Fehler gefunden. Danke
Btw.: auch die FE ist eine DB und sollte deshalb nicht im geöffneten Zustand kopiert werden!
Zitat von: LehmeMa am März 16, 2026, 12:30:46Doch bei fehlender Verbindung zum BE wird der User mit Fehlermeldungen konfrontiert.
Hallo Markus,
den Satz verstehe ich nicht, warum sollte die Verbindung zum BackEnd nicht da sein? Was ist der Unterschied zu Deiner Lösung mit einem FE für jeden Nutzer?