Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Access Datenbank speichern

Begonnen von LehmeMa, März 13, 2026, 09:03:58

⏪ vorheriges - nächstes ⏩

LehmeMa

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

MzKlMu

Hallo,
die Datenbank muss geschlossen sein. Du musst also aus einer anderen Datenbank die Kopie Deiner Arbeitsdb anlegen.
Wie es ja auch funktioniert hat.
Gruß Klaus

LehmeMa

#2
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.

Knobbi38

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/

Knobbi38

werner budde

#4
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.
Gruß Werner

Bitsqueezer

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

MzKlMu

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.
Gruß Klaus

werner budde

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..
Gruß Werner

Doming

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.accdb
Das 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

LehmeMa

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

Doming

Zitat von: LehmeMa am Heute um 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.

Bitsqueezer

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

LehmeMa

@Doming
Darum 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.

LehmeMa

Zitat von: Bitsqueezer am Heute um 12:28:41ACCDE: Kann nur erstellt werden, wenn es beim Kompilieren in VBA keine Fehler gab.


Fehler gefunden. Danke

Knobbi38

Btw.: auch die FE ist eine DB und sollte deshalb nicht im geöffneten Zustand kopiert werden!