Dateizugriffsklasse

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.

Dateizugriffsklasse

Diese Anforderung kommt bei mir immer wieder vor: Ich möchte per VBA eine Textdatei erstellen oder die Inhalte einer Textdatei einlesen. Dummerweise kann ich mir die genauen Befehle für die verschiedenen Anwendungsfälle einfach nicht merken: Datei in einem Zug einlesen, Datei zeilenweise einlesen und so weiter. Jetzt ist es so weit: Ich baue mir eine Klasse, die alle benötigten Befehle enthält und bereitstellt. Die brauche ich dann nur noch in die jeweilige Datenbank einzufügen und kann nach Lust und Laune auf Text- und andere Dateien zugreifen.

Eigentlich könnte man die Funktionen auch in einem Standardmodul unterbringen. Ich finde allerdings die Möglichkeit praktisch, eine Klasse zu erstellen, die gleich beim Start der Anwendung ihre Eigenschaften, Methoden und Funktionen bereitstellt, ohne dass ich sie erst noch instanzieren muss. Dazu sind zwar zusätzliche kleine Handgriffe nötig, aber das nehme ich in Kauf.

Im vorliegenden Beitrag füge ich die Methoden zur Klasse hinzu, die ich am häufigsten benötige. Das schließt aber nicht aus, dass nicht in nächster Zeit noch Erweiterungen folgen. Haben Sie selbst Ideen dazu, teilen Sie mir diese ruhig unter info@access-im-unternehmen.de mit!

Klasse erstellen

Als Erstes legen Sie ein neues Klassenmodul im VBA-Editor einer neuen, leeren Datenbank an. Dazu verwenden Sie den Menüeintrag Einfügen|Klassenmodul. Dieses speichern Sie gleich im Anschluss unter dem Namen FileAccess. In diesem Fall lassen wir das Präfix cls weg, weil wir die Klasse wie ein eingebautes Objekt nutzen wollen – da stört das Präfix nur. Diese Klasse exportieren Sie dann mit der folgenden Anweisung in eine Textdatei:

SaveAsText acModule, "FileAccess",  CurrentProject.Path & "FileAccess.txt"

Nun öffnen Sie das gespeicherte Klassenmodul mit einem Texteditor und ändern die nachfolgend fett gedruckten Zeilen wie angegeben ab:

Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Compare Database
Option Explicit

Danach speichern Sie den neuen Stand des Klassenmoduls in der Textdatei und lesen dieses wieder in das VBA-Projekt ein:

LoadFromText acModule, "FileAccess",  CurrentProject.Path & "FileAccess.txt

Legen Sie dann eine erste Funktion mit folgendem Inhalt an:

Public Function SaveTextAsFile(strText As String,  strFile As String)
End Function

Diese Funktion können Sie nun direkt über die Eingabe des Klassennamens ansprechen, wie auch Bild 1 zeigt:

Direkter Aufruf der Funktion per Intellisense

Bild 1: Direkter Aufruf der Funktion per Intellisense

FileAccess.SaveTextAsFile

Text in Datei speichern

Damit brauchen wir nun nur noch die gewünschten Funktionen hinzuzufügen. Den Start haben wir ja schon gemacht. Die Funktion SaveTextAsFile soll mit den beiden Parametern den zu speichernden Text sowie den Dateinamen entgegennehmen. Diese Funktion sieht nun wie folgt aus:

Public Function SaveTextAsFile(strFile As String,  strText As String) As Boolean
     Dim lngFile As Long
     lngFile = FreeFile
     Open strFile For Output As #lngFile
     Print #lngFile, strText
     Close #lngFile
     SaveTextAsFile = True
End Function

Sie ermittelt mit FreeFile zunächst eine noch nicht verwendete Dateinummer und speichert diese in der Variablen lngFile. Diese nutzt sie, um eine neue Datei zu erstellen und diese für den Schreibzugriff vorzubereiten. Dann trägt sie mit der Print-Methode den kompletten Inhalt der Varialben strText in die Datei ein. Danach schließt sie die Datei und gibt den Wert True als Funktionsergebnis auf die aufrufende Instanz zurück. Der folgende Beispielaufruf erzeugt eine Datei namens test.txt und trägt dort zwei Zeilen mit den Texten bla und blub ein:

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]