Flattr »
CompressPartsDatabase
Anbei ein kleines Script, welches unter Dienstprogramme/Artikel einen Menüpunkt “Artikeldatenbank komprimieren” hinzufügt. Das ganze funktioniert nur in Verbindung einer Access-Artikeldatenbank (Eplan-Standard) funktioniert.
Wenn die Komprimierung durchgeführt wird darf kein anderer Anwender auf die Datenbank zugreifen.
Durch die Kompression verringert sich die Größe enorm und die Geschwindigkeit nimmt zu
Vielen Dank an FrankS!
CompressPartsDatabase V1.0.0.vb (156)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | ' CompressPartsDatabase, Version 1.0.0, vom 31.08.2009 ' ' Führt eine Komprimierung der aktuell eingestellten Artikeldatenbank durch. ' Es wird eine Sicherheitskopie mit der Dateiendung 'Backup' angelegt. ' ' Copyright by Frank Schöneck, 2009 ' letzte Änderung: Frank Schöneck, 31.08.2009 V1.0.0 ' ' für Eplan Electric P8, ab V1.9.10 ' Imports System.Activator Imports System.Type Imports System.Runtime.InteropServices Imports System.IO Imports System.Reflection Public Class CompressPartsDatabase _ Public Sub CompressPartsDatabase_Menu() Dim oMenu As New Eplan.EplApi.GUI.Menu() oMenu.AddMenuItem("Artikeldatenbank komprimieren...", "CompressPartsDatabase", "Es wird die aktuell eingestellte Artikeldatenbank komprimiert", 35177, 1, True, False) End Sub _ Public Sub CompressPartsDatabase() Dim oSettings As New Eplan.EplApi.Base.Settings() Dim oPath As New PathMap() Dim DatabaseName As String Dim DatabaseNameBackup As String Dim Result As DialogResult Dim boReturn As Boolean Dim NewLine As String = Environment.NewLine Dim Meldung As String 'Einstellung 'Artikeldatenbank' auslesen DatabaseName = oSettings.getStringSetting("USER.PartsManagementGui.Database", 0) 'Variablen auslesen und ersetzen DatabaseName = oPath.SubstitutePath(DatabaseName) 'Namen der Backup-Datei festlegen DatabaseNameBackup = DatabaseName & ".Backup" 'Sicherheitsabfrage Meldung = "Soll die folgende Artikeldatenbank komprimiert werden?" & NewLine Meldung &= NewLine Meldung &= "'" & DatabaseName & "'" & NewLine Meldung &= NewLine Meldung &= "(Es wird im gleichen Ordner eine Sicherheitskopie mit der Dateiendung 'Backup' angelegt.)" & NewLine Result = MessageBox.Show(Meldung, "CompressPartsDatabase", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If Result = System.Windows.Forms.DialogResult.Yes Then 'Artikeldatenbank komprimieren boReturn = CompressAccessDataBase(DatabaseName, DatabaseNameBackup) 'Ergebnismeldung anzeigen If boReturn = True Then Meldung = "Das komprimieren der Artikeldatenbank wurde erfolgreich durchgeführt." & NewLine Meldung &= NewLine Meldung &= "Dateigröße vorher: " & GetFileSize(DatabaseNameBackup) & NewLine Meldung &= "Dateigröße nachher: " & GetFileSize(DatabaseName) & NewLine MessageBox.Show(Meldung, "CompressPartsDatabase, Information", MessageBoxButtons.OK, MessageBoxIcon.Information) ElseIf boReturn = False Then MessageBox.Show("Das komprimieren der Artikeldatenbank konnte nicht erfolgreich durchgeführt werden!", "CompressPartsDatabase, Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End Sub 'Datenbank komprimieren Private Function CompressAccessDataBase(ByVal DatabaseFilename As String, ByVal DatabaseFilenameBackup As String) As Boolean Try Dim Connection As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabaseFilename Dim jro As Object = CreateInstance(GetTypeFromProgID("JRO.JetEngine")) Dim Params As Object() = _ New Object() {Connection, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ DatabaseFilename & ".tmp ;Jet OLEDB:Engine Type=5"} jro.GetType().InvokeMember("CompactDatabase", BindingFlags.InvokeMethod, Nothing, jro, Params) If File.Exists(DatabaseFilenameBackup) Then File.Delete(DatabaseFilenameBackup) File.Move(DatabaseFilename, DatabaseFilenameBackup) File.Move(DatabaseFilename & ".tmp", DatabaseFilename) Marshal.ReleaseComObject(jro) jro = Nothing If File.Exists(DatabaseFilenameBackup) Then Return True Else Return False End If Catch ex As Exception MessageBox.Show(ex.InnerException.ToString(), "CompressAccessDataBase, Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Return False End Function 'Anzeige der Dateigröße formatieren Private Function GetFileSize(ByVal path As String) As String Dim myFile As FileInfo Dim mySize As Single Try myFile = New FileInfo(path) If Not myFile.Exists Then mySize = 0 Else mySize = myFile.Length End If Select mySize Case 0 To 1023 Return Microsoft.VisualBasic.Format(mySize, "#,###") & " Bytes" Case 1024 To 1048575 Return Microsoft.VisualBasic.Format(mySize / 1024, "#,###0.00") & " KB (" & Microsoft.VisualBasic.Format(mySize, "#,###") & " Bytes)" Case 1048576 To 1043741824 Return Microsoft.VisualBasic.Format(mySize / 1024 ^ 2, "#,###0.00") & " MB (" & Microsoft.VisualBasic.Format(mySize, "#,###") & " Bytes)" Case Is > 1043741824 Return Microsoft.VisualBasic.Format(mySize / 1024 ^ 3, "#,###0.00") & " GB (" & Microsoft.VisualBasic.Format(mySize, "#,###") & " Bytes)" End Select Return "0 bytes" Catch ex As Exception Return "0 bytes" End Try End Function End Class |


:biggrin:
Hallo Jonny,
funktioniert dieses auch mir den 2.0.? versionen?
Ab 2.0 ändert sich ja die Artikeldatenbank.
Bitt um Info.
Danke
Gruß Harald
PS: Hast eine geile Seite, weiter so