In Datenbanken kommt es sehr oft vor, dass an bestimmten Stellen Texte einzufügen sind. Meist bildet man dies durch den Einsatz von Textfeldern ab, welche die Daten der entsprechenden Datensätze aufnehmen. Oft sollen jedoch auch Fließtexte flexibel mit Texten gefüllt werden – beispielsweise Texte von E-Mails oder Word-Dokumente. Wir kümmern uns in diesem Artikel um den weniger komplexen Fall der reinen Textdatei, wie er auch in E-Mails zum Einsatz kommt. Eine E-Mail soll mit einem Text gefüllt werden, der zunächst noch Platzhalter enthält, die aber durch entsprechende Einträge einer Tabelle oder Abfrage ersetzt werden sollen.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1307_PlatzhalterInTextenErsetzen.mdb.
Beispielbeschreibung
Im Beispiel sollen ein Text nur einmal getippt, aber mehrfach genutzt werden können – quasi als eine Art Textvorlage. Diese Vorlage soll Platzhalter in einem bestimmten Format enthalten, die später durch Einträge in einer Tabelle der Datenbank ersetzt werden sollen.
Ziel ist es, ein Formular wie das aus Bild 1 zu erstellen. Das Formular speichert die auf der linken Seite dargestellten Daten in einer Tabelle, um Textvorlagen und Quelltabellen wiederverwendbar zu machen. Oben wählen Sie die Textvorlage anhand der Bezeichnung aus.
Bild 1: Beispielformular für das Ersetzen von Platzhaltern
Dann legen Sie die Datenquelle fest, aus der die für die Platzhalter einzusetzenden Daten stammen. Das Textfeld Textvorlage schließlich nimmt den Text mit den Platzhaltern auf. Ein Klick auf die Schaltfläche Platzhalter ersetzen soll den Text von links mit konkreten Werten aus der angegebenen Tabelle füllen und den Inhalt rechts abbilden.
Zu Beispielzwecken geschieht das Ersetzen zunächst nur mit dem ersten Datensatz der angegebenen Datenquelle.
Tabelle zum Speichern der Textvorlagen
Die Textvorlagen speichern wir in einer Tabelle namens tblTextvorlagen. Diese enthält neben dem Primärschlüsselfeld TextvorlageID noch ein Textfeld namens Bezeichnung sowie ein Memofeld namens Textvorlage, welche den eigentlichen Text aufnimmt. Außerdem bereiten wir ein Feld namens Datenquelle vor, dass die Tabelle oder Abfrage aufnimmt, deren Daten für die Platzhalter eingesetzt werden soll. Den Entwurf der Tabelle finden Sie in Bild 2.
Bild 2: Entwurfsansicht der Tabelle tblTextvorlagen
Die im Feld Textvorlage gespeicherten Texte sollen Platzhalter in der Form [Platzhalter] aufnehmen. Diese sollen dann für einen bestimmten Datensatz der dafür vorgesehenen Tabelle oder Abfrage mit den entsprechenden Werten ersetzt werden.
Formulare zum Ersetzen der Platzhalter
Erstellen Sie ein neues Formular und speichern Sie es unter dem Namen frmPlatzhalter. Stellen Sie dann die Datenherkunft des Formulars auf die Tabelle tblTextvorlagen ein. Ziehen Sie die Felder Bezeichnung, Datenquelle und Textvorlage in den Entwurf des Formulars und platzieren Sie diese etwa so wie in Bild 3.
Bild 3: Entwurfsansicht des Formulars frmPlatzhalter
Ganz oben legen wir ein Kombinationsfeld an, mit dem Sie schnell eine der Textvorlagen auswählen können. Dieses heißt cboSchnellauswahl und erhält die folgende Abfrage als Datensatzherkunft:
SELECT TextvorlageID, Bezeichnung FROM tblTextvorlagen;
Stellen Sie die Eigenschaften Spaltenanzahl und Spaltenbreiten auf die Werte 2 und 0cm ein, damit nur die Bezeichnungen der Textvorlagen im Kombinationsfeld angezeigt werden.
Damit das Formular nach der Auswahl eines der Einträge gleich den entsprechenden Datensatz anzeigt, hinterlegen Sie für die Ereigniseigenschaft Nach Aktualisierung die Prozedur aus Listing 1.
Private Sub cboSchnellauswahl_AfterUpdate() Me.Recordset.FindFirst "TextvorlageID = " & Me!cboSchnellauswahl End Sub
Listing 1: Aktualisieren der Textvorlage
Das Feld Datenquelle des Formulars wandeln Sie nach dem Hineinziehen aus der Feldliste von einem Textfeld in ein Kombinationsfeld um. Dies erledigen Sie mit dem Eintrag ändern zu|Kombinationsfeld des Steuerelements in der Entwurfsansicht des Formulars. Damit das Kombinationsfeld alle Tabellen und Abfragen der aktuellen Datenbank anzeigt, stellen sie die Eigenschaft Datensatzherkunft des Kombinationfelds auf den folgenden Ausdruck ein:
SELECT Name FROM MSysObjects WHERE Type IN (1,5);
Platzhalter ersetzen
Nun fehlt eigentlich nur noch die Ereignisprozedur, die durch das Ereignis Beim Klicken der Schaltfläche Platzhalter ersetzen ausgelöst wird.
Diese finden Sie in Listing 2. Die Prozedur deklariert drei Variablen:
Private Sub cmdPlatzhalterErsetzen_Click() Dim db As DAO.Database Dim rst As DAO.Recordset Dim fld As DAO.Field Dim strText As String Set db = CurrentDb Set rst = db.OpenRecordset("SELECT TOP 1 * FROM " & Me!cboDatenquelle) strText = Me!Textvorlage For Each fld In rst.Fields strText = Replace(strText, "[" & fld.Name & "]", fld.Value) Next fld Me!txtGefuellterText = strText End Sub
Listing 2: Ersetzen der Platzhalter durch die Inhalte der Felder des ersten Datensatzes der angegebenen Datenquelle
- db: Nimmt einen Verweis auf das Database-Objekt für die aktuelle Datenbank auf.
- rst: Erfasst eine Recordset-Gruppe auf Basis der angegebenen Datenquelle.
- fld: Referenziert je eines der Felder des Recordset-Objekts.
- strText: Speichert den Text mit den zu ersetzenden Platzhaltern und die jeweiligen Zwischenstände.
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: