none
mdb-Access Datenbank konvertieren RRS feed

  • Frage

  • Hallo,

     

    ich habe mehrere ältere Access-Datenbanken im mdb-Format (wurden mit Access 97 bzw. 2002 erstellt).

     

    Nun gab es in letzter Zeit öfters Probleme die Datenbanken unter Windows10+Office2016 zu öffnen (verursacht durch "fehlerhafte" Updates). Zurzeit funktioniert der Zugriff wieder nicht korrekt und es gibt meines Wissens bis jetzt keine Lösung(?), siehe z.B. diesen Artikel:

     

    https://www.heise.de/newsticker/meldung/Windows-Updates-vom-Januar-2019-verursachen-Access-Datenbankfehler-4272415.html

     

    Eine Lösung laut MS wäre die Datenbank in ein neueres Format zu konvertieren. Wie könnte ich das machen?

     

    Die Datenbanken enthalten mehrere verknüpfte Tabellen, Formulare und Abfragen und auch VBA-Code.

    Dienstag, 3. März 2020 08:54

Antworten

  • Hallo Matthias,

    dafür bräuchtest Du entweder eine Access Version bis einschließlich 2010 (ab Access 2013 lassen sich 97er MDBs nicht mehr öffnen) und dann konvertieren. Siehe dazu:

      Konvertieren einer Access 97-Datenbank in das ACCDB-Format

    In deinem Fall brauchst Du dann nur den ersten Schritt, da Du ja nur auf ein neueres MDB, nicht aber auf das ACCDB Format wechseln willst.

    Alternativ kannst Du auch ein kleines VBScript (oder eine kleine .NET Anwendung) erstellen, das die Datenbank komprimiert und dann auch gleich auf das 2003er Format aktualisiert.

    [CompactDatabase.vbs]

    Dim Provider
    Dim SourceDatabase
    Dim TargetDatabase
    Dim Path
    Dim SourceConnectionString
    Dim TargetConnectionString
    
        Provider       = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
        SourceDatabase = "source.mdb"
        TargetDatabase = "target.mdb"
        Path           = "X:\Ordner\"
    
        SourceConnectionString = Provider & "DATA SOURCE=" & Path & SourceDatabase & ";"
        TargetConnectionString = Provider & "DATA SOURCE=" & Path & TargetDatabase & ";"
    
    Dim JetEngine
    Set JetEngine = CreateObject("JRO.JetEngine")
        JetEngine.CompactDatabase SourceConnectionString, TargetConnectionString
    Set JetEngine = Nothing

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 3. März 2020 09:19
    Moderator
  • Hallo Matthias,

    bzgl. der Variante mit dem VBScript noch ein Hinweis:

    Auf 64 Bit Systemen muss man das Skript mit dem 32 Bit Skripthost ausführen. Also bspw.:

    C:\Windows\SysWOW64\cscript X:\Ordner\CompactDatabase.vbs

    Das hat den Grund, dass JRO.JetEngine nur in 32 Bit verfügbar ist und es ansonsten einen Fehler in der Art

    ActiveX-Komponenten kann kein Objekt erstellen: 'JRO.JetEngine'

    gibt.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 3. März 2020 10:26
    Moderator

Alle Antworten

  • Hallo Matthias,

    dafür bräuchtest Du entweder eine Access Version bis einschließlich 2010 (ab Access 2013 lassen sich 97er MDBs nicht mehr öffnen) und dann konvertieren. Siehe dazu:

      Konvertieren einer Access 97-Datenbank in das ACCDB-Format

    In deinem Fall brauchst Du dann nur den ersten Schritt, da Du ja nur auf ein neueres MDB, nicht aber auf das ACCDB Format wechseln willst.

    Alternativ kannst Du auch ein kleines VBScript (oder eine kleine .NET Anwendung) erstellen, das die Datenbank komprimiert und dann auch gleich auf das 2003er Format aktualisiert.

    [CompactDatabase.vbs]

    Dim Provider
    Dim SourceDatabase
    Dim TargetDatabase
    Dim Path
    Dim SourceConnectionString
    Dim TargetConnectionString
    
        Provider       = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
        SourceDatabase = "source.mdb"
        TargetDatabase = "target.mdb"
        Path           = "X:\Ordner\"
    
        SourceConnectionString = Provider & "DATA SOURCE=" & Path & SourceDatabase & ";"
        TargetConnectionString = Provider & "DATA SOURCE=" & Path & TargetDatabase & ";"
    
    Dim JetEngine
    Set JetEngine = CreateObject("JRO.JetEngine")
        JetEngine.CompactDatabase SourceConnectionString, TargetConnectionString
    Set JetEngine = Nothing

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 3. März 2020 09:19
    Moderator
  • ok danke,

    ich habe noch eine VM mit WinXP und Access2002, das müsste ja funktionieren.

    ich probiere auch mal die Variante per VBscript aus...

    Dienstag, 3. März 2020 09:57
  • Hallo Matthias,

    bzgl. der Variante mit dem VBScript noch ein Hinweis:

    Auf 64 Bit Systemen muss man das Skript mit dem 32 Bit Skripthost ausführen. Also bspw.:

    C:\Windows\SysWOW64\cscript X:\Ordner\CompactDatabase.vbs

    Das hat den Grund, dass JRO.JetEngine nur in 32 Bit verfügbar ist und es ansonsten einen Fehler in der Art

    ActiveX-Komponenten kann kein Objekt erstellen: 'JRO.JetEngine'

    gibt.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 3. März 2020 10:26
    Moderator