none
Compact Access-DB nur mit VBNet RRS feed

  • Frage

  • Hallo Leute,

    ich möchte auf einem WTS-System eine Access-DB mit reinen VBNet-Bordmittel komprimieren (Compact-DB) einrichten. Leider kann ich auf den WTS's keine Installationen vornehmen, so dass ich auch nicht auf DAO zurückgreifen kann.

    Meine Datenbank liegt als MDB-Datenbanken vor.

    Hat jemand vielleicht eine Idee wie ich das hinbekommen kann?

    Vielen Dank im Voraus.

    Gruß Ahmed

    Mittwoch, 27. März 2019 18:01

Antworten

  • Hallo Ahmed,

    hab es grade mal mit VB.NET probiert.

    Füg einen Verweis auf die COM Library "Microsoft Jet and Replication Objects 2.6 Library" in deinem Projekt ein und stell es auf x86 (32 Bit).

    Dim Provider               As String
    Dim SourceDatabase         As String
    Dim TargetDatabase         As String
    Dim Path                   As String
    Dim SourceConnectionString As String
    Dim TargetConnectionString As String
    
        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 As JRO.JetEngine
        JetEngine = New JRO.JetEngine()
        JetEngine.CompactDatabase( SourceConnectionString, TargetConnectionString )
        JetEngine = Nothing

    HTH

     


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

    Mittwoch, 27. März 2019 22:22
    Moderator

Alle Antworten

  • Hallo Ahmed,

    ich hab das grad nur als VBScript vorliegen, es sollte dir aber zeigen, wie Du das generell machen kannst.

    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

    Letztendlich geht das in VB.NET eigentlich genauso, Du müsstest wohl nur die Syntax ergänzen (Datentypen, ...) bzw. anpassen (Set ... weglassen, ...)

    Ich denke mal, JRO.JetEngine ist wie Microsoft.Jet.OLEDB.4.0 nur für 32 Bit Umgebungen nutzbar, ggfs. musst Du also deine Anwendung explizit auf x86 umstellen. Sollte aber kein Problem sein, Du kannst den Part ja in eine eigene kleine Anwendung auslagern, wenn das ansonsten Probleme bereitet.

     


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

    Mittwoch, 27. März 2019 21:49
    Moderator
  • Hallo Ahmed,

    hab es grade mal mit VB.NET probiert.

    Füg einen Verweis auf die COM Library "Microsoft Jet and Replication Objects 2.6 Library" in deinem Projekt ein und stell es auf x86 (32 Bit).

    Dim Provider               As String
    Dim SourceDatabase         As String
    Dim TargetDatabase         As String
    Dim Path                   As String
    Dim SourceConnectionString As String
    Dim TargetConnectionString As String
    
        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 As JRO.JetEngine
        JetEngine = New JRO.JetEngine()
        JetEngine.CompactDatabase( SourceConnectionString, TargetConnectionString )
        JetEngine = Nothing

    HTH

     


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

    Mittwoch, 27. März 2019 22:22
    Moderator
  • Hallo Stefan,

    vielen Dank für die Info.

    Dann kann ich ja weiterarbeiten. :-)

    Gruß Ahmed

    Donnerstag, 28. März 2019 16:43
  • Hallo,

    ich habe auf der Suche nach einer Problemlösung diese Antworten gefunden, habe aber das Problem das ich eine Fehlermeldung bekomme.

    System.BadImageFormatException: "Die Datei oder Assembly "Interop.JRO, Version=2.6.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Die Assembly wird von einer Laufzeit erstellt, die aktueller als die derzeit geladene Laufzeit ist, und kann nicht geladen werden."

    Der Verweis auf die Bibliothek wurde gemacht. Ich hoffe das liest vieelleicht jemand, ist ja schon was länger her.

    Gruß

    HerrFrie

    Samstag, 26. Februar 2022 15:50
  • Hi,

    welche Projektart, welche Sprache und welches .NET Framework (genaue Version) verwendest Du denn?

    Poste auch mal deine app.config bzw. web.config (appSettings und Teile, in denen sensitive Informationen wie bspw. ConnectionStrings, ... stehen kannst Du weglassen)


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

    Samstag, 26. Februar 2022 15:55
    Moderator
  • Hi,

    Framework 3.5, Ziel CPU steht auf x86.Benutze Visual Studio Community 2019 Version 16.11.4

    Und ich nutze Visual Basic.

    Was genau meinst du mit app.config ?

    Ich hatte den Code so eingefügt mit der Meinung das er quasi standalone läuft, nur Pfad und Dateinamen angepasst.

    Gruß

    HerrFrie


    • Bearbeitet HerrFrie Samstag, 26. Februar 2022 16:15
    Samstag, 26. Februar 2022 16:15
  • Hi,

    stell bitte auf .NET 4.x um (sinnvollerweise auf 4.8) und probier es dann erneut.

    app.config bzw. web.consig ist in einem .NET Projekt die Konfigurationsdatei, die sollte es je nach Projektart geben. Welche Projektart erstellst Du? Konsolenanwendung? Windows Library? WinForms? ...?


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

    Samstag, 26. Februar 2022 16:18
    Moderator
  • Hi Stefan,

    habe jetzt ein eigenes Projekt erstellt, damit erstmal nichts aus meiner alten Anwendung stört.

    Ist eine WindForms .Net Anwendung.

    Meine Hauptanwendung ist lauffähig, ist jetzt knapp 10 Jahre alt.
    Die Datenbank ist mittlerweile recht voll geworden und benötigt zum Starten recht lange, deshalb wollte ich die Komprimierung hinzufügen.

    Mit dem neuen Projekt funktioniert es auch nicht, kommt die Fehlermeldung. Habe diese dann auf .NET 4.x umgestellt und dann funktioniert es (nachdem ich auch das Passowort mit implementiert habe).

    Jetzt muss ich mal schauen, wie sich meine Hauptanwendung mit einem anderen Framework verhält.
    Mit dem 3.5 bin ich bisher gut gefahren, da es bei uns in der Firma installiert war. Ist dort nicht so einfach was runterzuladen und zu installieren (IT Richtlinien)

    Warum schreibst du sinnvollerweise 4.8 ? Ist das aktuell der Standard ?

    Danke dir für die Unterstützung und ein schönes Wochenende.

    Gruß

    HerrFrie

    Samstag, 26. Februar 2022 17:03
  • Hi,

    .NET Framework 4.8 ist die letzte Version des .NET Frameworks, auch bereits einige Jahre alt und eigentlich die einzig sinnvolle Option, wenn es keine zwingenden Gründe für 3.5 gibt.

    3.5 SP1 wird zwar noch supported aber mit ganz wenigen Ausnahmen würde ich schon auf 4.8 umsteigen.

    Eure IT hat sicher weniger Probleme, eine Standardkomponente von Microsoft selbst wie das. NET Framework zu installieren als irgendwelche Drittanbieter Anwendungen, oder?

    Falls Du deine Anwendung auf 3.5 lassen willst, kannst Du die separate Anwendung für die Komprimierung der mdb ja bspw. auch Process.Start aufrufen und die Pfade als Argumente übergeben. Dennoch muss natürlich das passende .NET Framework auf dem jeweiligen PC installiert sein.


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

    Samstag, 26. Februar 2022 19:10
    Moderator
  • Hi,

    werde das morgen mal mit 4.8 probieren, da bin ich wieder in der Firma.

    Danke dir nochmal.

    Gruß

    HerrFrie

    Mittwoch, 2. März 2022 17:32