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 :w00t:

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