Platzhalter in Texten ersetzen

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.

Beispielformular für das Ersetzen von Platzhaltern

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.

Entwurfsansicht der Tabelle tblTextvorlagen

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.

Entwurfsansicht des Formulars frmPlatzhalter

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:

Schreibe einen Kommentar