Ziel: Datenbank verfügbar machen – aber nicht zerstören

Access ist zickig, was Synchronisation angeht.
OneDrive ist keine Datenbankplattform.
Trotzdem kannst Du Access mit OneDrive nutzen – wenn Du die Regeln beachtest.

Variante 1: Frontend lokal, Backend im OneDrive-Sync-Ordner

Das ist der Klassiker.

Aufbau:

  • frontend.accde lokal bei jedem User
  • backend.accdb im synchronisierten OneDrive-Ordner (z. B. C:\Users\Benutzer\OneDrive\AccessData\backend.accdb)
  • Tabellen im Frontend sind verknüpft auf das Backend

Risiken:

  • Konflikte beim Schreiben (wenn mehrere Nutzer gleichzeitig)
  • langsame Performance bei großen Tabellen
  • Datei wird geblockt, wenn OneDrive gerade synchronisiert

Empfehlung:

  • Nur für Einzelplatz oder kleine Teams
  • Kein Dauerzugriff – kurz verbinden, schnell wieder raus
  • Immer mit Backup arbeiten

Variante 2: OneDrive als Transportweg – nicht als Arbeitsverzeichnis

Besser: Access läuft wie immer lokal.
OneDrive ist nur der Austauschplatz.

Beispiel: Bericht automatisch in OneDrive speichern

Public Sub ExportiereBericht()
    Dim ziel As String
    ziel = Environ("OneDrive") & "\Export\Bericht_" & Format(Now(), "yyyymmdd_hhnnss") & ".pdf"

    DoCmd.OutputTo acOutputReport, "rptMonatsbericht", acFormatPDF, ziel, False
End Sub

Gilt auch für Exporte nach Excel oder CSV.

Variante 3: CSV-/Excel-Export nach OneDrive

Public Sub ExportNachOneDrive()
    Dim pfad As String
    pfad = Environ("OneDrive") & "\Daten\export.csv"

    DoCmd.TransferText acExportDelim, , "qryDaten", pfad, True
End Sub

Das BI-Tool, Power Automate oder ein Kollege kann mit dieser Datei weiterarbeiten.

Variante 4: Access liest Daten aus OneDrive-Dateien

Zum Beispiel: wöchentlicher Import einer Excel-Datei

Public Sub ImportExcelOneDrive()
    Dim pfad As String
    pfad = Environ("OneDrive") & "\Import\neukunden.xlsx"

    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "tblNeukunden", pfad, True
End Sub

Achte auf:

  • Pfad muss synchronisiert sein
  • Datei darf nicht gerade geöffnet oder synchronisiert werden
  • Fehler abfangen

Variante 5: OneDrive als Backup-Ziel

Automatisches Kopieren der Datenbank:

Public Sub BackupNachOneDrive()
    Dim quelle As String, ziel As String
    quelle = CurrentDb.Name
    ziel = Environ("OneDrive") & "\Backup\backup_" & Format(Now(), "yyyymmdd_hhnnss") & ".accdb"

    FileCopy quelle, ziel
End Sub

Schnell, simpel, lebensrettend.

Wichtige Hinweise zur OneDrive-Nutzung

  • Access-Dateien dürfen nicht gleichzeitig von mehreren geöffnet werden, wenn sie im OneDrive-Sync-Ordner liegen
  • Niemals direkt mit mehreren Benutzern auf backend.accdb in OneDrive arbeiten
  • Konfliktdateien vermeiden: OneDrive erzeugt Kopien → Tabellenverknüpfungen gehen kaputt
  • Große Tabellen: besser auf SQL Server umstellen
  • Änderungen immer lokal machen, dann hochladen

Alternativen zu OneDrive

  • SharePoint mit angebundener SQL Server-Datenbank
  • Access als Frontend, Backend über ODBC auf Azure SQL
  • Synology- oder Nextcloud-Speicher als reiner Dateiablageplatz

Also

OneDrive und Access? Geht.
Aber nicht parallel, nicht unkontrolliert und nicht als Multiuser-Plattform.

Übrigens

Environ("OneDrive") liefert nur den Pfad zum OneDrive-Ordner, den Windows als Standard-OneDrive erkennt – in der Regel:

  • Bei Privatanwendern: C:\Users\<Benutzer>\OneDrive\
  • Bei Business-Nutzern: C:\Users\<Benutzer>\OneDrive - <Firmenname>\

Wenn Du mehrere OneDrive-Konten hast (z. B. privat und geschäftlich), dann gilt:

Standardverhalten:

  • Environ("OneDrive") zeigt nur auf das erste (private) OneDrive-Konto, das mit Windows verknüpft ist.
  • Es gibt kein Environ(„OneDriveCommercial“) oder so.
  • Business-OneDrive wird nicht über Umgebungsvariable bereitgestellt.

So findest Du die Pfade zu allen OneDrive-Instanzen

Möglichkeit 1: Manuell

  1. Öffne den Explorer
  2. Geh zu: C:\Users\<DeinBenutzername>\
  3. Du siehst Ordner wie:
    • OneDrive
    • OneDrive - DeinFirmenname
  4. Den Pfad kannst Du dann fest im Code verwenden, z. B.:
Const onedriveBusinessPfad As String = "C:\Users\Max\OneDrive - MaxTech GmbH\Export"

Möglichkeit 2: Pfade per Registry lesen (wenn Du’s automatisieren willst)

Public Function GetOneDriveBusinessPfad() As String
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")

    On Error Resume Next
    GetOneDriveBusinessPfad = wsh.RegRead("HKEY_CURRENT_USER\Software\Microsoft\OneDrive\Accounts\Business1\UserFolder")
End Function

Das funktioniert bei vielen Clients mit OneDrive for Business.

  • Environ("OneDrive") → zeigt auf das erste verknüpfte OneDrive-Konto, meist privat
  • Für Business-Konten brauchst Du entweder:
    • harten Pfad
    • Registry-Lesung
    • oder manuelle Auswahl (z. B. über FileDialog)

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert