{"id":55000208,"date":"2014-02-01T00:00:00","date_gmt":"2020-01-24T15:58:56","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=208"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Platzhalter_in_Texten_ersetzen","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html","title":{"rendered":"Platzhalter in Texten ersetzen"},"content":{"rendered":"<p class='introduction'>In Datenbanken kommt es sehr oft vor, dass an bestimmten Stellen Texte einzuf&uuml;gen sind. Meist bildet man dies durch den Einsatz von Textfeldern ab, welche die Daten der entsprechenden Datens&auml;tze aufnehmen. Oft sollen jedoch auch Flie&szlig;texte flexibel mit Texten gef&uuml;llt werden &#8211; beispielsweise Texte von E-Mails oder Word-Dokumente. Wir k&uuml;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&uuml;llt werden, der zun&auml;chst noch Platzhalter enth&auml;lt, die aber durch entsprechende Eintr&auml;ge einer Tabelle oder Abfrage ersetzt werden sollen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1307_PlatzhalterInTextenErsetzen.mdb<\/b>.<\/p>\n<h2>Beispielbeschreibung<\/h2>\n<p>Im Beispiel sollen ein Text nur einmal getippt, aber mehrfach genutzt werden k&ouml;nnen &#8211; quasi als eine Art Textvorlage. Diese Vorlage soll Platzhalter in einem bestimmten Format enthalten, die sp&auml;ter durch Eintr&auml;ge in einer Tabelle der Datenbank ersetzt werden sollen.<\/p>\n<p>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&auml;hlen Sie die Textvorlage anhand der Bezeichnung aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_208_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_208_002.png\" alt=\"Beispielformular f&uuml;r das Ersetzen von Platzhaltern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Beispielformular f&uuml;r das Ersetzen von Platzhaltern<\/p>\n<p>Dann legen Sie die Datenquelle fest, aus der die f&uuml;r die Platzhalter einzusetzenden Daten stammen. Das Textfeld <b>Textvorlage <\/b>schlie&szlig;lich nimmt den Text mit den Platzhaltern auf. Ein Klick auf die Schaltfl&auml;che <b>Platzhalter ersetzen <\/b>soll den Text von links mit konkreten Werten aus der angegebenen Tabelle f&uuml;llen und den Inhalt rechts abbilden.<\/p>\n<p>Zu Beispielzwecken geschieht das Ersetzen zun&auml;chst nur mit dem ersten Datensatz der angegebenen Datenquelle.<\/p>\n<h2>Tabelle zum Speichern der Textvorlagen<\/h2>\n<p>Die Textvorlagen speichern wir in einer Tabelle namens <b>tblTextvorlagen<\/b>. Diese enth&auml;lt neben dem Prim&auml;rschl&uuml;sselfeld <b>TextvorlageID <\/b>noch ein Textfeld namens <b>Bezeichnung <\/b>sowie ein Memofeld namens <b>Textvorlage<\/b>, welche den eigentlichen Text aufnimmt. Au&szlig;erdem bereiten wir ein Feld namens <b>Datenquelle <\/b>vor, dass die Tabelle oder Abfrage aufnimmt, deren Daten f&uuml;r die Platzhalter eingesetzt werden soll. Den Entwurf der Tabelle finden Sie in Bild 2.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_208_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_208_001.png\" alt=\"Entwurfsansicht der Tabelle tblTextvorlagen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Entwurfsansicht der Tabelle tblTextvorlagen<\/p>\n<p>Die im Feld <b>Textvorlage<\/b> gespeicherten Texte sollen Platzhalter in der Form <b>[Platzhalter] <\/b>aufnehmen. Diese sollen dann f&uuml;r einen bestimmten Datensatz der daf&uuml;r vorgesehenen Tabelle oder Abfrage mit den entsprechenden Werten ersetzt werden. <\/p>\n<h2>Formulare zum Ersetzen der Platzhalter<\/h2>\n<p>Erstellen Sie ein neues Formular und speichern Sie es unter dem Namen <b>frmPlatzhalter<\/b>. Stellen Sie dann die Datenherkunft des Formulars auf die Tabelle <b>tblTextvorlagen <\/b>ein. Ziehen Sie die Felder <b>Bezeichnung<\/b>, <b>Datenquelle <\/b>und <b>Textvorlage <\/b>in den Entwurf des Formulars und platzieren Sie diese etwa so wie in Bild 3.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_208_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_208_003.png\" alt=\"Entwurfsansicht des Formulars frmPlatzhalter\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Entwurfsansicht des Formulars frmPlatzhalter<\/p>\n<p>Ganz oben legen wir ein Kombinationsfeld an, mit dem Sie schnell eine der Textvorlagen ausw&auml;hlen k&ouml;nnen. Dieses hei&szlig;t <b>cboSchnellauswahl <\/b>und erh&auml;lt die folgende Abfrage als Datensatzherkunft:<\/p>\n<pre>SELECT TextvorlageID, Bezeichnung \r\nFROM tblTextvorlagen;<\/pre>\n<p>Stellen Sie die Eigenschaften <b>Spaltenanzahl <\/b>und <b>Spaltenbreiten <\/b>auf die Werte <b>2 <\/b>und <b>0cm <\/b>ein, damit nur die Bezeichnungen der Textvorlagen im Kombinationsfeld angezeigt werden.<\/p>\n<p>Damit das Formular nach der Auswahl eines der Eintr&auml;ge gleich den entsprechenden Datensatz anzeigt, hinterlegen Sie f&uuml;r die Ereigniseigenschaft <b>Nach Aktualisierung <\/b>die Prozedur aus Listing 1.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboSchnellauswahl_AfterUpdate()\r\n     Me.Recordset.FindFirst \"TextvorlageID = \" & Me!cboSchnellauswahl\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Aktualisieren der Textvorlage<\/p>\n<p>Das Feld <b>Datenquelle <\/b>des Formulars wandeln Sie nach dem Hineinziehen aus der Feldliste von einem Textfeld in ein Kombinationsfeld um. Dies erledigen Sie mit dem Eintrag <b>&auml;ndern zu|Kombinationsfeld <\/b>des Steuerelements in der Entwurfsansicht des Formulars. Damit das Kombinationsfeld alle Tabellen und Abfragen der aktuellen Datenbank anzeigt, stellen sie die Eigenschaft <b>Datensatzherkunft<\/b> des Kombinationfelds auf den folgenden Ausdruck ein:<\/p>\n<pre>SELECT Name FROM MSysObjects \r\nWHERE Type IN (1,5);<\/pre>\n<h2>Platzhalter ersetzen<\/h2>\n<p>Nun fehlt eigentlich nur noch die Ereignisprozedur, die durch das Ereignis <b>Beim Klicken <\/b>der Schaltfl&auml;che <b>Platzhalter ersetzen <\/b>ausgel&ouml;st wird.<\/p>\n<p>Diese finden Sie in Listing 2. Die Prozedur deklariert drei Variablen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdPlatzhalterErsetzen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>fld<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n     <span style=\"color:blue;\">Dim <\/span>strText<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT TOP 1 * FROM \" & Me!cboDatenquelle)\r\n     strText = Me!Textvorlage\r\n     For Each fld In rst.Fields\r\n         strText = <span style=\"color:blue;\">Replace<\/span>(strText, \"[\" & fld.Name & \"]\", fld.Value)\r\n     <span style=\"color:blue;\">Next<\/span> fld\r\n     Me!txtGefuellterText = strText\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 2: Ersetzen der Platzhalter durch die Inhalte der Felder des ersten Datensatzes der angegebenen Datenquelle<\/p>\n<ul>\n<li><b>db<\/b>: Nimmt einen Verweis auf das Database-Objekt f&uuml;r die aktuelle Datenbank auf.<\/li>\n<li><b>rst<\/b>: Erfasst eine <b>Recordset<\/b>-Gruppe auf Basis der angegebenen Datenquelle.<\/li>\n<li><b>fld<\/b>: Referenziert je eines der Felder des <b>Recordset<\/b>-Objekts.<\/li>\n<li><b>strText<\/b>: Speichert den Text mit den zu ersetzenden Platzhaltern und die jeweiligen Zwischenst&auml;nde.<\/li>\n<\/ul>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000208\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000208?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000208\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"34aae43e8a\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Datenbanken kommt es sehr oft vor, dass an bestimmten Stellen Texte einzuf&uuml;gen sind. Meist bildet man dies durch den Einsatz von Textfeldern ab, welche die Daten der entsprechenden Datens&auml;tze aufnehmen. Oft sollen jedoch auch Flie&szlig;texte flexibel mit Texten gef&uuml;llt werden &#8211; beispielsweise Texte von E-Mails oder Word-Dokumente. Wir k&uuml;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&uuml;llt werden, der zun&auml;chst noch Platzhalter enth&auml;lt, die aber durch entsprechende Eintr&auml;ge einer Tabelle oder Abfrage ersetzt werden sollen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662013,66072013,44000004,44000014],"tags":[],"class_list":["post-55000208","post","type-post","status-publish","format-standard","hentry","category-662013","category-66072013","category-Formulare_fuer_die_Dateneingabe","category-Loesungen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Platzhalter in Texten ersetzen - Access [basics]<\/title>\n<meta name=\"description\" content=\"In Datenbanken kommt es sehr oft vor, dass an bestimmten Stellen Texte einzuf\u00fcgen sind. Meist bildet man dies durch den Einsatz von Textfeldern ab, welche die Daten der entsprechenden Datens\u00e4tze aufnehmen. Oft sollen jedoch auch Flie\u00dftexte flexibel mit Texten gef\u00fcllt werden \u2013 beispielsweise Texte von E-Mails oder Word-Dokumente. Wir k\u00fcmmern 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\u00fcllt werden, der zun\u00e4chst noch Platzhalter enth\u00e4lt, die aber durch entsprechende Eintr\u00e4ge einer Tabelle oder Abfrage ersetzt werden sollen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Platzhalter in Texten ersetzen - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"In Datenbanken kommt es sehr oft vor, dass an bestimmten Stellen Texte einzuf\u00fcgen sind. Meist bildet man dies durch den Einsatz von Textfeldern ab, welche die Daten der entsprechenden Datens\u00e4tze aufnehmen. Oft sollen jedoch auch Flie\u00dftexte flexibel mit Texten gef\u00fcllt werden \u2013 beispielsweise Texte von E-Mails oder Word-Dokumente. Wir k\u00fcmmern 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\u00fcllt werden, der zun\u00e4chst noch Platzhalter enth\u00e4lt, die aber durch entsprechende Eintr\u00e4ge einer Tabelle oder Abfrage ersetzt werden sollen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:58:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_208_002.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"10\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_208_002.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html\",\"name\":\"Platzhalter in Texten ersetzen - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:58:56+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"In Datenbanken kommt es sehr oft vor, dass an bestimmten Stellen Texte einzuf\\u00fcgen sind. Meist bildet man dies durch den Einsatz von Textfeldern ab, welche die Daten der entsprechenden Datens\\u00e4tze aufnehmen. Oft sollen jedoch auch Flie\\u00dftexte flexibel mit Texten gef\\u00fcllt werden \\u2013 beispielsweise Texte von E-Mails oder Word-Dokumente. Wir k\\u00fcmmern 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\\u00fcllt werden, der zun\\u00e4chst noch Platzhalter enth\\u00e4lt, die aber durch entsprechende Eintr\\u00e4ge einer Tabelle oder Abfrage ersetzt werden sollen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Platzhalter_in_Texten_ersetzen.html\",\"name\":\"Platzhalter in Texten ersetzen\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000208"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000208\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}