Zip-Formular

Wie das Zippen unter Access mit Bordmitteln funktioniert, haben Sie im Artikel “Zippen mit Access” erfahren. Im vorliegenden Beitrag schauen wir uns nun an, wie Sie die VBA-Funktionen zum Packen, Entpacken und Löschen von Elementen aus Zip-Dateien von einem Formular aus nutzen können, sodass auch reine Benutzer einer Anwendung damit arbeiten können.

Formular zum Verwalten einfacher Zip-Funktionen

Im Beitrag Zippen mit Access (www.access-im-unternehmen.de/1064) haben wir einige Funktionen vorgestellt, mit denen Sie mit Zip-Dateien arbeiten können. Damit lassen sich neue Zip-Dateien erstellen, Dateien hinzufügen, Dateien aus Zip-Dateien extrahieren und die enthaltenen Dateien auflisten.

Schließlich können Sie die enthaltenen Dateien auch aus dem Zip-Archiv löschen. Das Formular soll wie in Bild 1 aussehen. Das Formular bietet ein Textfeld, das den Namen der aktuellen Zip-Datei anzeigt.

Aussehen des fertigen Zip-Formulars

Bild 1: Aussehen des fertigen Zip-Formulars

Mit der Schaltfläche mit den drei Punkten (…) können Sie einen Datei öffnen-Dialog anzeigen, mit dem Sie die zu öffnende Zip-Datei auswählen können. Alternativ klicken Sie auf die Neu-Schaltfläche, die einen Dialog zum Angeben des Namens für eine neue Zip-Datei öffnet.

Nach dem öffnen einer bestehenden Zip-Datei soll das Formular die enthaltenen Dateien im Listenfeld im unteren Bereich anzeigen. Das Listenfeld soll die Auswahl eines oder mehrerer Elemente ermöglichen, die dann wahlweise in einen noch zu spezifizierenden Ordner entpackt (Schaltfläche ->) oder aus dem Archiv entfernt werden (Schaltfläche ).

Die Plus-Schaltfläche (+) erlaubt es schließlich, einen weiteren Dateiauswahl-Dialog anzuzeigen, mit dem Sie die zur Zip-Datei hinzuzufügenden Dateien auswählen können. Diese werden dann nach dem Hinzufügen direkt im Listenfeld angezeigt. Nun beginnen wir mit dem Bau dieses Formulars.

Tabellen der Anwendung

Die Anwendung verwendet nur eine einzige Tabelle namens tblDateien, die wie in Bild 2 aussieht. Wie diese gefüllt wird, erfahren Sie im Beitrag Zippen mit Access (www.access-im-unternehmen.de/1064). Gegenüber der dort verwendeten Tabelle haben wir noch zwei Felder hinzugefügt.

Tabelle zum Speichern der Dateiinformationen der Dateien aus dem Zip-Archiv

Bild 2: Tabelle zum Speichern der Dateiinformationen der Dateien aus dem Zip-Archiv

Diese heißen GepackteGroesseText und Ungepackte-GroesseText und nehmen nicht den per Code ermittelten Zahlenwert für die Dateigröße auf, sondern den kompletten gelieferten Wert inklusive der Einheit, also etwa Bytes oder KB.

Entwurfsansicht

In der Entwurfsansicht sieht das Formular wie in Bild 3 aus. Da das Formular keine Datenherkunft besitzt und somit auch nicht zum Blättern durch Datensätze verwendet wird, stellen wir die Eigenschaften Navigationsschaltflächen, Datensatzmarkierer, Trennlinien und Bildlaufleisten auf den Wert Nein ein. Die Eigenschaft Automatisch zentrieren erhält den Wert Ja.

Das Zip-Formular in der Entwurfsansicht

Bild 3: Das Zip-Formular in der Entwurfsansicht

Das Textfeld erhält die Bezeichnung txtZipdatei, das Listenfeld soll lstDateien heißen. Die Schaltflächen statten Sie mit den Namen cmdDateiauswahl, cmdNeu, cmdDateiHinzufuegen, cmdDateiEntfernen und cmdEntpacken aus. Für alle Schaltflächen hinterlegen wir entsprechende Ereignisprozeduren.

Steuerelemente verankern

Damit wir mit dem Vergrößern des Formulars auch die entscheidenden Steuerelemente vergrößern können, stellen wir für das Textfeld txtZipdatei die Eigenschaft Horizontaler Anker auf Beide ein.

Das Listenfeld lstDateien soll nach rechts und nach unten vergrößerbar sein, also stellen wir nicht nur die Eigenschaft Horizontaler Anker, sondern auch die Eigenschaft Vertikaler Anker auf Beide ein.

Beachten Sie, dass die entsprechenden Eigenschaften der mit den Steuerelementen verknüpften Bezeichnungsfelder automatisch geändert werden. Sie müssen also für das Bezeichnungsfeld des Textfeldes die Eigenschaft Horizontaler Anker wieder auf Links und für das Bezeichnungsfeld die Eigenschaft Horizontaler Anker auf Links und Vertikaler Anker auf Oben zurücksetzen.

Wenn Sie das Formular nun in der Formularansicht nach rechts vergrößern, überdecken das Textfeld und das Listenfeld die Schaltflächen. Diese sollen mit nach rechts verschoben werden. Also stellen Sie die Eigenschaft Horizontaler Anker aller Schaltflächen auf den Wert Rechts ein.

Beim Laden des Formulars

Das Laden des Formulars löst die Ereignisprozedur Form_Load aus, die wie in Listing 1 aussieht. Die Prozedur erledigt einige vorbereitende Arbeiten. Gegebenenfalls wurde bereits zuvor eine Zip-Datei eingelesen oder angelegt, daher könnten sich noch Datensätze in der Tabelle tblDateien befinden.

Private Sub Form_Load()
     Dim db As DAO.Database
     Set db = CurrentDb
     Me!txtZipdatei = Null
     db.Execute "DELETE FROM tblDateien", dbFailOnError
     Me!lstDateien.Requery
End Sub

Listing 1: Prozedur, die durch das Ereignis Beim Laden ausgelöst wird

Diese sollen mit einer entsprechenden DELETE-Anweisung gelöscht werden. Außerdem soll das Textfeld txtZipdatei geleert und das Listenfeld aktualisiert werden, sodass es keine Datensätze mehr anzeigt.

Datensatzherkunft des ListenBild 4feldes

Entwurf der Abfrage qryDateien

Bild 4: Entwurf der Abfrage qryDateien

Das Listenfeld soll die Daten der Tabelle tblDateien anzeigen, allerdings nicht alle Felder davon und außerdem in einer bestimmten Reihenfolge. Bild 4 zeigt, wie die Abfrage aufgebaut ist, um die gewünschten Daten zu liefern.

Die Abfrage verwendet die beiden Felder GepackteGroesseText und UngepackteGroesseText statt GepackteGroesse und UngepackteGroesse, da diese den Originalwert aus dem Zip-Archiv enthalten, der gleichzeitig die Einheit wie Bytes oder KB mitliefert. Die Felder GepackteGroesse und UngepackteGroesse enthalten die Zahlenwerte ohne Einheit, allerdings wird hieraus nicht deutlich, um welche Einheit es sich jeweils handelt. Das Ergebnis der Abfrage soll nach dem Wert des Feldes Dateiname sortiert werden.

Die Abfrage speichern Sie unter dem Namen qryDateien (s. Bild 4). Dann weisen Sie diesen Namen der Eigenschaft Datensatzherkunft des Listenfeldes zu. Die Eigenschaft Spaltenanzahl stellen Sie auf den Wert 6 ein, die Eigenschaft Spaltenbreiten auf den Wert 0cm;;4cm;2cm;2cm.

Leeres Zip-Archiv erstellen

Die erste Möglichkeit ist das Erstellen eines neuen, leeren Zip-Archivs. Dazu verwenden wir die Schaltfläche namens cmdNeu mit der Beschriftung Neu. Die Schaltfläche löst die Prozedur aus Listing 2 aus. Die Prozedur nutzt eine im Modul mdlDateiauswahl abgelegte Funktion namens GetSaveFile, um einen Dialog zur Angabe des zu verwendenden Dateinamens anzuzeigen (für weitere Informationen siehe Beispieldatenbank). Der aufgerufene Dialog filtert alle Dateien mit der Dateiendung .zip und bietet gleich den Dateinamen *.zip an (s. Bild 5).

Festlegen des Namens einer neuen Zip-Datei

Bild 5: Festlegen des Namens einer neuen Zip-Datei

Der Name der zu erstellenden Datei wird dann in der Variablen strZipdatei gespeichert. Die folgende Anweisung ruft dann die Methode ZipErstellen auf und übergibt den Dateinamen, damit die neue Zip-Datei erstellt werden kann. Danach löscht die Prozedur alle aktuell in der Tabelle tblDateien gespeicherten Datensätze und aktualisiert den Inhalt des Listenfeldes lstDateien. Schließlich landet der Pfad zur neu erstellten Zip-Datei, die nun auch physisch auf der Festplatte liegt, im Textfeld txtZipdatei.

Vorhandenes Zip-Archiv öffnen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar