|  | 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'! |
| |
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).
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).
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
|