Benutzer mit den meisten Antworten
Compact Access-DB nur mit VBNet

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
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- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 1. April 2019 05:36
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 11. April 2019 07:31
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 -
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- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 1. April 2019 05:36
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 11. April 2019 07:31
-
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
-
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 -
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
-
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 -
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
-
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