Zip-Formular

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

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

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]