Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2001.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Ersetzen Sie Texte in Textvorlagen durch die Daten einer Tabelle oder Abfrage.

Techniken

VBA, Textdateien

Voraussetzungen

Access 2000 und höher

Beispieldateien

Textvorlagen.mdb

Shortlink

www.access-im-unternehmen.de/8

Textvorlagen mit Daten füllen

Manfred Hoffbauer, Düsseldorf

Eine häufige Anforderung an eine Datenbank besteht darin, einen Standardtext mit individuellen Daten zu füllen. So entstehen beispielsweise Auftragsbestätigungen, Lieferscheine und Begrüßungsschreiben. Das Team, bestehend aus der Datenbank Access und der Textverarbeitung Word, meistert diese Aufgabe mit Bravour. Wie dies funktioniert, lesen Sie in diesem Beitrag!

Aber was ist, wenn auf einem PC kein Word vorhanden ist? Hier bietet sich die Verwendung von Textdateien an. Statt mit den unter Word üblichen Textmarken oder Feldfunktionen, markieren in Textdateien einfache Platzhalter wie beispielsweise @[ und ] die Datenfelder. Ist die Textdatei erst mal als Vorlage in einem Ordner gespeichert, steht sie für den Gebrauch mit Access zur Verfügung. Damit aus der Vorlage eine individuelle Nachricht wird, müssen Sie die Platzhalter nur noch durch die Daten aus der Datenbank ersetzen. Genau diese Aufgabe erledigt die Prozedur TextvorlageFüllen aus diesem Beitrag. Die Prozedur ist so gestaltet, dass sie sich für das Ersetzen von Platzhaltern in allen Textdateien eignet, in den klassischen .txt-Dateien ebenso wie in .rtf- und .html-Dateien.

Die Textvorlage gestalten

Bei der Gestaltung der Textvorlage können Sie Ihrer Fantasie freien Lauf lassen. Es ist lediglich wichtig, dass Sie die Platzhalter einheitlich mit einer Start- und einer Endzeichenfolge markieren. Es sollte sich um eine Zeichenkombination handeln, die ansonsten nicht in der Textdatei vorkommt. Außerdem sollten Sie möglichst sprechende Namen für die Platzhalter verwenden und sich an die Konventionen zur Bildung von Feldnamen in Abfragen halten. Eine kleine Musterdatei befindet sich im Download zu diesem Artikel (AB_Template.txt). Hierbei handelt es sich um eine .txt-Datei, die mit dem Texteditor von Windows erstellt wurde. Die Textdatei enthält einen Mustertext und eine Reihe von Platzhaltern. Die Zeichenfolge @[ markiert den Beginn und die Zeichenfolge ] das Ende eines Platzhalters. Dazwischen befindet sich der Name des Platzhalters (s. Abb. 1).

pic001.png

Abb. 1: Textvorlage mit Platzhaltern

Die Datenquelle hinterlegen

Damit aus der Vorlage ein individueller Brief wird, muss Access die Platzhalter durch Daten ersetzen. Sie benötigen also eine Datenquelle, welche die zur Vorlage passenden Daten liefert. Die Bezeichnungen der Felder aus der Datenquelle müssen mit den Bezeichnungen der Platzhalter übereinstimmen. Nur so kann die Prozedur TextvorlageFüllen die Felder aus der Vorlage mit denen aus der Datenquelle vergleichen.

Als Datenquelle können Sie eine Tabelle, eine Abfrage oder auch eine SELECT-Anweisung verwenden. Die Routine ist dafür ausgelegt, dass die Datenquelle nur einen einzelnen Datensatz liefert. Falls Sie eine Lösung benötigen, welche die Textvorlage für mehrere Datensätze vervielfältigt, müssen Sie auch einen Weg zur Angabe mehrerer Zieldateien finden. Da dies stark von der spezifischen Anwendungskonzeption abhängt, verzichtet die hier vorgestellte Routine darauf.

Im Beispiel dient die Abfrage qryNeueBestellung10702 als Datenquelle. Sie basiert auf den Tabellen tblKunden und tblBestellungen.

Die Beispielabfrage filtert die Bestellnummer 10702 aus der Datenquelle heraus. Damit ist sichergestellt, dass die Abfrage nur einen Datensatz liefert. Außerdem werden den meisten Feldnamen - durch Doppelpunkte getrennt - neue Feldnamen vorangestellt. Der erste Buchstabe bezeichnet dabei stets die Tabelle, aus der das Feld stammt. Der Präfix B_ kennzeichnet die Felder aus der Tabelle tblBestellungen und der Präfix K_ die Felder aus der Kundentabelle (s. Abb. 2).

pic002.png

Abb. 2: Diese Abfrage dient als Datenquelle

Aufruf der Prozedur TextvorlageFüllen

Die Prozedur TextvorlageFüllen liest die Textvorlage und ersetzt alle Platzhalter durch die Feldwerte aus der Datenquelle (s. Listing 1). Beim Aufruf der Prozedur sind folgende Parameter erforderlich:

Listing 1: Füllen einer Textvorlage

Sub TextvorlageFüllen(sQuelldatei As String, sZieldatei As String, sSQL As String, _

    sVarStart As String, sVarEnde As String)

    ' Überprüfen, ob das Recordset nur einen Datensatz enthält.

    Dim rs As Recordset

    Set rs = CurrentDb.OpenRecordset(sSQL, , dbReadOnly)

    rs.MoveLast

    If Len(Nz(Dir(sQuelldatei))) > 0 And rs.RecordCount = 1 Then

        Dim iQuelldatei As Integer

        Dim iZieldatei As Integer

        Dim sNeueZeile As String

        Dim sGeleseneZeile As String

        ' Dateinummer für die Quelldatei zuweisen

        iQuelldatei = FreeFile

        ' Quelldatei zum binären Lesen öffnen

        ' Datei gleichzeitig mit Lock für lesenden und schreibenden Zugriff sperren.

        Open sQuelldatei For Binary Access Read Lock Read Write As #iQuelldatei

        ' Dateinummer für die Zieldatei zuweisen

        iZieldatei = FreeFile

        ' Zieldatei zum binären Schreiben öffnen.

        ' Datei gleichzeitig mit Lock für lesenden und schreibenden Zugriff sperren.

        Open sZieldatei For Binary Access Write Lock Read Write As #iZieldatei

        Dim Zeilenr As Integer

        Zeilenr = 0

        Dim dStartzeit As Double

        dStartzeit = Time

        Debug.Print "Starte mit Zeilenr. 1", Format(dStartzeit, "hh:mm:ss")

        Do While Not EOF(iQuelldatei) ' Schleife bis zum Ende der Textdatei.

            Zeilenr = Zeilenr + 1

            ' Lesen am Anfang der Schleife => Auch letzte Zeile mit EOF verarbeiten.

            sGeleseneZeile = ZeileLesen(iQuelldatei) ' Textzeile lesen

            sNeueZeile = ZeileVerarbeiten(sGeleseneZeile, rs, sVarStart, sVarEnde)

            ZeileSchreiben iZieldatei, sNeueZeile

        Loop

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Lastschrifteinzug per Datenträgeraustausch

Importieren von Textdateien

Verwaltung von Daten ohne Tabelle

Mit Textdateien arbeiten

Outlook und Access - Import und Export von Access-Daten

© 2003-2015 André Minhorst Alle Rechte vorbehalten.