{"id":55000123,"date":"2003-10-01T00:00:00","date_gmt":"2020-05-06T15:17:31","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=123"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Knowledgebase_mit_Suchfunktion","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/","title":{"rendered":"Knowledgebase mit Suchfunktion"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg03.met.vgwort.de\/na\/162567e2956747d38bef9ebc21f1bcd9\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Christoph Spielmann, D&uuml;sseldorf<\/b><\/p>\n<p><b>Auch erfahrene Access-Entwickler m&uuml;ssen von Zeit zu Zeit passen, wenn knifflige Fragen zu beantworten oder Probleme zu l&ouml;sen sind. Oft versucht man sich dann mit dem Satz &#8222;Ich hab&#8220; da mal was gelesen &#8230;&#8220; aus der Aff&auml;re zu ziehen (sofern das Gegen&uuml;ber nicht mit der Frage &#8222;Was denn&#8220; kontert). Hierbei soll Ihnen die Knowledge-Base (kurz &#8222;KB&#8220;) helfen, die Ihnen in dieser Musterl&ouml;sung vorgestellt wird.<\/b><\/p>\n<p>Die Knowledge-Base besteht aus einer Ansammlung von Artikeln, die zusammen mit einem Titel, einem Text sowie mehreren Schl&uuml;sselw&ouml;rtern gespeichert werden. Das besondere Augenmerk liegt hierbei in der Suchfunktion, die nicht nur die gefundenen Artikel auflistet, sondern zus&auml;tzlich auch den Textausschnitt mit dem gefundenen Text anzeigt.<\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Feldname<\/b><\/p>\n<\/td>\n<td>\n<p><b>Beschreibung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>KBEintragID<\/p>\n<\/td>\n<td>\n<p>AutoWert-Prim&auml;rschl&uuml;ssel<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>EintragstypID<\/p>\n<\/td>\n<td>\n<p>Typ des Eintrags (Text oder Programmcode)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>KategorieID<\/p>\n<\/td>\n<td>\n<p>Kategorie, unter der der Eintrag abgelegt ist (z. B. Access, API, Word &#8230;)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Titel<\/p>\n<\/td>\n<td>\n<p>Titel des Artikels (Text)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Text<\/p>\n<\/td>\n<td>\n<p>Artikeltext (Memo)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Schl&uuml;sselw&ouml;rter<\/p>\n<\/td>\n<td>\n<p>Auflistung von Schl&uuml;sselw&ouml;rtern zum leichteren Auffinden eines Beitrags<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 1: Der Aufbau der Tabelle tblKBEintr&auml;ge<\/b><\/p>\n<p>Die Datenstruktur besteht im Wesentlichen aus der Tabelle tblKBEintr&auml;ge. Hier sind die einzelnen Artikel untergebracht. Sie finden die Struktur dieser Tabelle in Tab. 1.<\/p>\n<p>Bei den Feldern EintragstypID und KategorieID handelt es sich jeweils um Fremdschl&uuml;ssel, die auf die beiden Tabellen tblEintragstypen und tblKategorien zeigen. Den Aufbau der beiden Tabellen entnehmen Sie dem ER-Diagramm (siehe Bild 1) oder der Beispieldatenbank.<\/p>\n<p>Um die sp&auml;tere Anlage von Formularen zu vereinfachen, sind die beiden Fremdschl&uuml;ssel als Nachschlagefelder konfiguriert. Hierbei sind die Eigenschaften aus Tab. 2 definiert.<\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Eigenschaft<\/b><\/p>\n<\/td>\n<td>\n<p><b>Einstellung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Steuerelement anzeigen<\/p>\n<\/td>\n<td>\n<p>Kombinationsfeld<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Herkunftstyp<\/p>\n<\/td>\n<td>\n<p>Tabelle\/Abfrage<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Gebundene Spalte<\/p>\n<\/td>\n<td>\n<p>2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Spaltenanzahl<\/p>\n<\/td>\n<td>\n<p>2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Spalten&uuml;berschriften<\/p>\n<\/td>\n<td>\n<p>Nein<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Spaltenbreiten<\/p>\n<\/td>\n<td>\n<p>5cm;0cm<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Zeilenanzahl<\/p>\n<\/td>\n<td>\n<p>16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Listenbreite<\/p>\n<\/td>\n<td>\n<p>Automatisch<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Nur Listeneintr&auml;ge<\/p>\n<\/td>\n<td>\n<p>Ja<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 2: Formulareigenschaften und deren Einstellung<\/b><\/p>\n<p>Die Datensatzherkunft des Feldes EintragstypID ist wie folgt eingestellt:<\/p>\n<pre>SELECT Eintragstyp, EintragstypID FROM tblEintragstypen ORDER BY Eintragstyp;<\/pre>\n<p>Die Datensatzherkunft des Feldes KategorieID hat einen &auml;hnlichen Aufbau:<\/p>\n<pre>SELECT tblKategorien.Kategorie, tblKategorien.KategorieID FROM tblKategorienORDER BY tblKategorien.Kategorie;<\/pre>\n<p>Die beiden SQL-Anweisungen fragen jeweils das Text- und das Prim&auml;rschl&uuml;sselfeld beider Nachschlagetabellen ab und sortieren es zudem nach dem Textfeld. Durch die Einstellung der Spaltenbreiten-Eigenschaft ist sp&auml;ter nur das Textfeld sichtbar.<\/p>\n<p>Neben den drei bereits vorgestellten Tabellen enth&auml;lt das Datenmodell noch eine vierte Tabelle namens tblSuchergebnis. Hier wird das Ergebnis eines Suchvorgangs abgelegt. Die genaue Funktion dieser Tabelle lernen Sie sp&auml;ter noch kennen.<\/p>\n<p><IMG height=\"274\" src=\"..\/fileadmin\/_temp_\/{3C1D22E4-04C6-4140-843D-26435476D304}\/pic001.png\" width=\"451\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Das ER-Diagramm der Musterl&ouml;sung<\/span><\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Die Datenbank liegt in zwei Versionen f&uuml;r Access 97 (KB97.mdb) und f&uuml;r Access 2000\/XP (KB2000.mdb) auf der Heft-CD der vorliegenden Ausgabe von Access im Unternehmen vor. Die Version f&uuml;r Access 97 verwendet einige DAO-Anweisungen f&uuml;r den Datenzugriff, die im Beitrag nicht beschrieben werden. Im Beitrag finden Sie die Beschreibung der Vorgehensweise anhand des ADO-Objektmodells, das in Access 2000 und h&ouml;her standardm&auml;&szlig;ig eingesetzt wird. <\/p>\n<p>Die Erfassung und Pflege einzelner Artikel erfolgt &uuml;ber das Formular frmKBEintr&auml;ge (siehe Bild 2). Als Basis kann ein Standardformular dienen, das Sie mit Hilfe des Formularassistenten von Access anlegen:<\/p>\n<li>W&auml;hlen Sie den Befehl Formular des Men&uuml;punkts Einf&uuml;gen aus.<\/li>\n<li>W&auml;hlen Sie den Assistenten AutoFormular: Einspaltig.<\/li>\n<li>Selektieren Sie aus dem Kombinationsfeld die Tabelle tblKBEintr&auml;ge.<\/li>\n<li>Best&auml;tigen Sie mit OK. (<\/li>\n<p>Durch die Definition der Nachschlagefelder sollte das neu erzeugte Formular f&uuml;r die beiden Felder EintragstypID und KategorieID bereits zwei Kombinationsfelder enthalten.<\/p>\n<p>Speichern Sie das Formular unter dem Namen frmKBEintr&auml;ge.<\/p>\n<p>Zur Verbesserung des optischen Erscheinungsbildes entfernen Sie noch das Prim&auml;rschl&uuml;sselfeld samt Bezeichnung.<\/p>\n<p>Aus den Bezeichnungsfeldern der beiden Fremdschl&uuml;ssel entfernen Sie au&szlig;erdem das &#8222;ID&#8220; und vergr&ouml;&szlig;ern das Textfeld Text.<\/p>\n<p>Um von dem Formular einfach in das Suchformular zu wechseln, das sp&auml;ter noch angelegt wird, schalten Sie in die Entwurfsansicht um und platzieren im oberen Bereich des Formulars eine neue Schaltfl&auml;che.<\/p>\n<p><IMG height=\"436\" src=\"..\/fileadmin\/_temp_\/{3C1D22E4-04C6-4140-843D-26435476D304}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b>Beschriften Sie diese mit dem Text Suchen&#8230; und geben Sie ihr den Namen btnSuchen.<\/b><\/p>\n<p><IMG height=\"109\" src=\"..\/fileadmin\/_temp_\/{3C1D22E4-04C6-4140-843D-26435476D304}\/pic003.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Das Formular frmKBEintr&auml;ge<\/span><\/b><\/p>\n<p><IMG height=\"44\" src=\"..\/fileadmin\/_temp_\/{3C1D22E4-04C6-4140-843D-26435476D304}\/pic004.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Der Kopfbereich des Suchformulars<\/span><\/b><\/p>\n<pre>Private Sub RefreshUI()\r\n    Me.cmbEintragstypID.Enabled = _        Me.chkEintragstyp.Value\r\n    Me.cmbKategorieID.Enabled = Me.chkKategorie.Value\r\nEnd Sub<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<pre>Private Sub chkEintragstyp_Click()\r\n    RefreshUI\r\nEnd Sub\r\nPrivate Sub chkKategorie_Click()\r\n    RefreshUI\r\nEnd Sub\r\nPrivate Sub Form_Load()\r\n    RefreshUI\r\nEnd Sub<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<p>Zur Anlage der Ereignisprozedur w&auml;hlen Sie den Befehl Ereignis aus dem Kontextmen&uuml; der neu erstellten Schaltfl&auml;che. <\/p>\n<p>Best&auml;tigen Sie das folgende Dialogfenster mit einem Doppelklick auf Code-Generator und erg&auml;nzen Sie die Ereignisprozedur wie folgt:<\/p>\n<pre>DoCmd.OpenForm _    \"frmSuchen\", acNormal<\/pre>\n<p>Diese Anweisung &ouml;ffnet das im folgenden Abschnitt vorgestellte Formular frmSuchen.<\/p>\n<p>Das Suchformular hat zwei Aufgaben: Zu einem erm&ouml;glicht es die Erfassung der Suchkriterien und zum anderen zeigt es das Suchergebnis an.<\/p>\n<p>Zu diesem Zweck kommt ein Formular mit Endlosansicht zum Einsatz, bei dem zus&auml;tzlich der Formularkopf eingeblendet ist.<\/p>\n<p><!--30percent--><\/p>\n<p>Im Kopf sind die drei Felder Titel, Eintragstyp und Kategorie untergebracht, die zur Definition der Suchkriterien dienen (siehe Bild 3). Sie k&ouml;nnen diese Felder aus dem Formular frmKBEintr&auml;ge kopieren und mit den Namen cmbEintragstypID, cmbKategorieID und txtSuchtext versehen. Zus&auml;tzlich sind vor den beiden Kombinationsfeldern zwei Kontrollk&auml;stchen untergebracht.<\/p>\n<p>Hiermit kann der Benutzer sp&auml;ter bestimmen, ob der ausgew&auml;hlte Eintragstyp beziehungsweise die ausgew&auml;hlte Kategorie bei der Suche ber&uuml;cksichtigt werden soll.<\/p>\n<pre>Private Sub btnSucheStarten_Click()\r\n    SuchergebnisAktualisieren\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<pre>If Me.txtSuchtext.Value = \"\" Then\r\n        MsgBox \"Bitte geben Sie einen Suchtext ein!\", vbInformation\r\n        Exit Sub\r\nEnd If<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<pre>SQL = \"SELECT * FROM tblKBEintr&auml;ge\"\r\n    SQL = SQL + \" WHERE (Titel LIKE \" + Quote(\"%\" + Me.txtSuchtext + \"%\")\r\n    SQL = SQL + \" OR Text LIKE \" + Quote(\"%\" + Me.txtSuchtext + \"%\")\r\n    SQL = SQL + \" OR Schl&uuml;sselw&ouml;rter LIKE \" + Quote(\"%\" + Me.txtSuchtext + \"%\") + \")\"<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<p>Geben Sie den Kontrollk&auml;stchen die Namen chkEintragstyp bzw. chkKategorie. Als Standardwert-Eigenschaft tragen Sie f&uuml;r beide Kontrollk&auml;stchen den Wert 0 ein.<\/p>\n<p>Um den Komfort f&uuml;r den Benutzer zu erh&ouml;hen, soll das entsprechende Kombinationsfeld deaktiviert werden, sofern das Kontrollk&auml;stchen nicht angekreuzt ist. Dies erledigt die Ereignisprozedur RefreshUI (s. Quellcode 1), die im Klassenmodul des Formulars untergebracht ist.<\/p>\n<p>Der Aufruf dieser Prozedur erfolgt sowohl beim &ouml;ffnen des Formulars als auch bei jeder &auml;nderung des Zustands der beiden Kontrollk&auml;stchen. Diese Aufgabe &uuml;bernehmen die drei Ereignisprozeduren aus Quellcode 2.<\/p>\n<p>Die ersten beiden Prozeduren sind an das On Click-Ereignis der beiden Kontrollk&auml;stchen gebunden. Die Dritte ist dagegen mit dem On Load-Ereignis des Formulars verkn&uuml;pft.<\/p>\n<p>Zus&auml;tzlich befindet sich im Kopf noch eine Schaltfl&auml;che namens btnSucheStarten, die den Suchvorgang startet. Die Ereignisprozedur ist wie in Quellcode 3 aufgebaut.<\/p>\n<p>Sie ruft die Unterprozedur SuchergebnisAktualisieren, die Sie im folgenden Abschnitt kennen lernen.<\/p>\n<p>Wie bereits zu Beginn dieses Artikels erw&auml;hnt, besteht die Besonderheit der Suche darin, dass nicht nur die gefundenen KB-Eintr&auml;ge, sondern auch der Textausschnitt, also zum Beispiel die 30 vorhergehenden bzw. nachfolgenden Zeichen mit angezeigt werden. So kann der Benutzer besser entscheiden, ob die Fundstelle seinen W&uuml;nschen entspricht.<\/p>\n<p>Um eine solche Suche zu realisieren, enth&auml;lt die Datenbank die Tabelle tblSuchergebnis (s. Tab. 3).<\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Feldname<\/b><\/p>\n<\/td>\n<td>\n<p><b>Beschreibung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>SuchergebnisID<\/p>\n<\/td>\n<td>\n<p>AutoWert-Prim&auml;rschl&uuml;ssel<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Text<\/p>\n<\/td>\n<td>\n<p>Gefundener Textausschnitt <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>KBEintragID<\/p>\n<\/td>\n<td>\n<p>Artikel, in dem der Text gefunden wurde<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Priorit&auml;t<\/p>\n<\/td>\n<td>\n<p>Relevanz derFundstelle<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 3: Der Aufbau der Tabelle tblSuchergebnis<\/b><\/p>\n<pre>Public Function Quote(Text As Variant) As Variant\r\n    Const Q = \"''\"\r\n    If IsNull(Text) Then\r\n        Quote = Q & Q\r\n    Else\r\n        Quote = Q & Replace(Text, Q, Q & Q) & Q\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<pre>If Me.chkEintragstyp.Value = True Then\r\n    If IsNull(Me.cmbEintragstypID.Value) Then\r\n        MsgBox \"Bitte w&auml;hlen Sie einen Eintragstyp aus!\"\r\n        Exit Sub\r\n    Else\r\n        SQL = SQL + \" AND EintragstypID=\" _            + Me.cmbEintragstypID.Value\r\n    End If\r\nEnd If\r\nIf Me.chkKategorie.Value = True Then\r\n    If IsNull(Me.cmbKategorieID.Value) Then\r\n        MsgBox \"Bitte w&auml;hlen Sie eine Kategorie aus!\"\r\n        Exit Sub\r\n    Else\r\n        SQL = SQL + \" AND KategorieID=\" _            + Me.cmbKategorieID.Value\r\n    End If\r\nEnd If<\/pre>\n<p><b>Quellcode 7<\/b><\/p>\n<pre>With rstEintr&auml;ge\r\n    .ActiveConnection = CurrentProject.Connection\r\n    .CursorLocation = adUseClient\r\n    .CursorType = adOpenDynamic\r\n    .LockType = adLockOptimistic\r\n    .Source = SQL\r\n    .Open\r\nEnd With<\/pre>\n<p><b>Quellcode 8<\/b><\/p>\n<pre>If rstEintr&auml;ge.RecordCount = 0 Then\r\n    MsgBox \"Es wurde kein Eintrag gefunden\"\r\n    Exit Sub\r\nEnd If<\/pre>\n<p><b>Quellcode 9<\/b><\/p>\n<p>Das Suchergebnis wird hier mit Hilfe der VBA-Prozedur SuchergebnisAktualisieren eingetragen, sodass dieses dann im Formular angezeigt werden kann.<\/p>\n<p>Die Prozedur pr&uuml;ft zun&auml;chst, ob ein Suchkriterium eingegeben wurde (s. Quellcode 4).<\/p>\n<p>Sollte dies nicht der Fall sein, bricht die Prozedur ab.<\/p>\n<p>Anschlie&szlig;end wird eine SQL-Abfrage zur Suche nach dem eingegebenen Text zusammengestellt (s. Quellcode 5).<\/p>\n<p>Diese SQL-Anweisung sucht mit Hilfe des LIKE-Operators im Titel, im Text sowie bei den Schl&uuml;sselw&ouml;rtern nach dem eingegebenen Text.<\/p>\n<p>Damit Eingaben inklusive einfacher Anf&uuml;hrungszeichen (&#8220;) nicht zu einem Fehler f&uuml;hren, werden diese durch die Quote-Funktion doppelt ausgegeben. Access interpretiert diese dann nicht als Beginn einer neuen Zeichenkette innerhalb der SQL-Anweisung (s. Quellcode 6).<\/p>\n<p>Sollte der Benutzer zus&auml;tzlich einen Eintragstyp oder eine Kategorie als Filter definiert haben, wird die Abfrage entsprechend erweitert (s. Quellcode 7). Zus&auml;tzlich pr&uuml;ft dieser Anweisungsblock noch, ob zum Beispiel eine Kategorie ausgew&auml;hlt ist, und gibt gegebenenfalls eine Meldung aus. Im Anschluss daran wird das Ergebnis der Abfrage in ein Recordset geladen (s. Quellcode 8).<\/p>\n<pre>CurrentProject.Connection.Execute (\"DELETE * FROM tblSuchergebnisse\")\r\nWith rstSuchergebnis\r\n    .ActiveConnection = CurrentProject.Connection\r\n    .CursorLocation = adUseClient\r\n    .CursorType = adOpenDynamic\r\n    .LockType = adLockOptimistic\r\n    .Source = \"tblSuchergebnisse\"\r\n    .Open\r\nEnd With<\/pre>\n<p><b>Quellcode 10<\/b><\/p>\n<pre>While Not rstEintr&auml;ge.EOF\r\n    Found = False\r\n    If Not IsNull(rstEintr&auml;ge(\"Titel\")) Then\r\n        If InStr(1, rstEintr&auml;ge(\"Titel\"), Me.txtSuchtext.Value) &lt;&gt; 0 Then\r\n            TempText = GetFundstellenumgebung(rstEintr&auml;ge(\"Titel\"), _                Me.txtSuchtext.Value)\r\n            rstSuchergebnis.AddNew\r\n            rstSuchergebnis(\"Text\") = TempText\r\n            rstSuchergebnis(\"KBEintragID\") = rstEintr&auml;ge(\"KBEintragID\")\r\n            rstSuchergebnis(\"Priorit&auml;t\") = 3\r\n            rstSuchergebnis.Update\r\n            Found = True\r\n        End If\r\n    End If\r\n    If Found = False Then\r\n        If Not IsNull(rstEintr&auml;ge(\"Text\")) Then\r\n            If InStr(1, rstEintr&auml;ge(\"Text\"), Me.txtSuchtext.Value) &lt;&gt; 0 Then\r\n                TempText = GetFundstellenumgebung(rstEintr&auml;ge(\"Text\"), _                    Me.txtSuchtext.Value)\r\n                rstSuchergebnis.AddNew\r\n                rstSuchergebnis(\"Text\") = TempText\r\n                rstSuchergebnis(\"KBEintragID\") = rstEintr&auml;ge(\"KBEintragID\")\r\n                rstSuchergebnis(\"Priorit&auml;t\") = 1\r\n                rstSuchergebnis.Update\r\n                Found = True\r\n            End If\r\n        End If\r\n    End If<\/pre>\n<p><b>Quellcode 11 (erster Teil)<\/b><\/p>\n<p>Sollte kein Eintrag gefunden werden, zeigt die Prozedur eine Meldung an (s. Quellcode 9).<\/p>\n<pre>    If Found = False Then\r\n        If Not IsNull(rstEintr&auml;ge(\"Schl&uuml;sselw&ouml;rter\")) _            Then\r\n            If InStr(1, _                rstEintr&auml;ge(\"Schl&uuml;sselw&ouml;rter\"), _                Me.txtSuchtext.Value) &lt;&gt; 0 Then\r\n                TempText = _                    GetFundstellenumgebung _                    (rstEintr&auml;ge(\"Schl&uuml;sselw&ouml;rter\"), _                    Me.txtSuchtext.Value)\r\n                rstSuchergebnis.AddNew\r\n                rstSuchergebnis(\"Text\") = TempText\r\n                rstSuchergebnis(\"KBEintragID\") = _                    rstEintr&auml;ge(\"KBEintragID\")\r\n                rstSuchergebnis(\"Priorit&auml;t\") = 2\r\n                rstSuchergebnis.Update\r\n                Found = True\r\n            End If\r\n        End If\r\n    End If\r\n    rstEintr&auml;ge.MoveNext\r\nWend<\/pre>\n<p><b>Quellcode 11 (Fortsetzung)<\/b><\/p>\n<p>Anschlie&szlig;end wird das F&uuml;llen der Tabelle tblSuchergebnisse vorbereitet, indem zuerst alle alten Eintr&auml;ge gel&ouml;scht und danach ein leeres Recordset zwecks Anlage neuer Datens&auml;tze ge&ouml;ffnet wird (s. Quellcode 10).<\/p>\n<p>Es folgt eine While Wend-Schleife, in der alle Fundstellen einzeln durchlaufen und in die Tabelle tblSuchergebnisse &uuml;bertragen werden (s. Quellcode 11).<\/p>\n<p>Innerhalb der Schleife wird zun&auml;chst mit Hilfe der InStr-Funktion gepr&uuml;ft, ob der Suchetext im Titel vorhanden ist. Sollte dies der Fall sein, wird der Eintrag dem Suchergebnis mit der Priorit&auml;t 1 hinzugef&uuml;gt. Falls der Eintrag nicht gefunden wurde (die Variable Found also noch den Wert False hat), erfolgt eine Suche im Text und anschlie&szlig;end noch in den Schl&uuml;sselw&ouml;rtern. Hierbei werden jeweils unterschiedliche Priorit&auml;ten vergeben.<\/p>\n<p>Zumindest eine dieser drei Suchen sollte erfolgreich sein, da der KB-Eintrag ansonsten nicht im Suchergebnis der urspr&uuml;nglichen Abfrage enthalten gewesen w&auml;re.<\/p>\n<p>Nach Abschluss dieses Vorgangs wird schlie&szlig;lich noch das Suchformular aktualisiert und das Suchergebnis damit angezeigt:<\/p>\n<pre>Me.Requery<\/pre>\n<p>Den vollst&auml;ndigen Aufbau der Prozedur entnehmen Sie der Beispieldatenbank.<\/p>\n<h3>Fundstellenumgebung<\/h3>\n<p>Innerhalb der Schleife kommt eine Prozedur namens GetFundstellenumgebung zum Einsatz. Diese Prozedur ermittelt ausgehend von der Fundstelle je 30 vorhergehende und nachfolgende Zeichen (s. Quellcode 12).<\/p>\n<p>&uuml;ber die Konstante AnzahlZeichenUmgebung wird die Anzahl der Zeichen festgelegt, die im Suchergebnis vor und nach der Fundstelle mit ausgegeben werden.<\/p>\n<p>Danach wird die jeweilige Anzahl der Zeichen davor und danach abgeschnitten und mit dem Text &#8222;&#8230;&#8220; versehen. Ein Sonderfall tritt ein, wenn die Fundstelle am Anfang beziehungsweise am Ende eines Textes auftritt.<\/p>\n<p>In diesem Fall werden die drei Punkte nicht mit ausgegeben und es werden entsprechend weniger Zeichen ausgeschnitten.<\/p>\n<p>Zuletzt werden noch Zeilenumbr&uuml;che aus dem Text entfernt.<\/p>\n<pre>Public Function GetFundstellenumgebung(Text As String, Suchtext As String) As String\r\n    Const AnzahlZeichenUmgebung = 30\r\n    Dim pos As Integer\r\n    Dim Result As String\r\n    Dim pos2 As Integer\r\n    pos = InStr(1, Text, Suchtext)\r\n    If pos = 0 Then Exit Function\r\n    If pos &gt; AnzahlZeichenUmgebung Then\r\n        Result = \"... \" + LTrim(Mid(Text, pos - AnzahlZeichenUmgebung, _            AnzahlZeichenUmgebung + Len(Suchtext) + 1))\r\n    Else\r\n        Result = Left(Text, pos + Len(Suchtext))\r\n    End If\r\n    If pos + AnzahlZeichenUmgebung + Len(Suchtext) &gt; Len(Text) Then\r\n        pos2 = Len(Text) - (pos + Len(Suchtext))\r\n        If pos2 &gt; 0 Then\r\n            Result = Result + Right(Text, pos2)\r\n        End If\r\n    Else\r\n        Result = Result + RTrim(Mid(Text, pos + Len(Suchtext) + 1, _            AnzahlZeichenUmgebung)) + \" ...\"\r\n    End If\r\n    Result = Replace(Result, Chr(13), \" \")\r\n    Result = Replace(Result, Chr(10), \" \")\r\n    GetFundstellenumgebung = Result\r\nEnd Function<\/pre>\n<p><b>Quellcode 12<\/b><\/p>\n<pre>SELECT tblKBEintr&auml;ge.Titel, tblSuchergebnisse.* FROM tblSuchergebnisse INNER JOIN tblKBEintr&auml;ge ON tblSuchergebnisse.KBEintragID=tblKBEintr&auml;ge.KBEintragID ORDER BY Priorit&auml;t DESC;<\/pre>\n<p><b>Quellcode 13<\/b><\/p>\n<p>Wie bereits erw&auml;hnt, wird das Ergebnis der Suche in dem Formular frmSuchen angezeigt. Zu diesem Zweck ist das Formular an die SQL-Abfrage aus Quellcode 13 gekn&uuml;pft. Das Ergebnis dieser Abfrage ist eine Liste aller Fundstellen inklusive dem Titel des KB-Eintrags.<\/p>\n<p>Zur Anzeige des Suchergebnisses befinden sich im Detailbereich des Formulars drei Textfelder, in denen jeweils die Priorit&auml;t, der Titel sowie die Fundstelle angezeigt werden (siehe Bild 4). Bei allen Feldern ist die Gesperrt-Eigenschaft auf Ja und die Aktiviert-Eigenschaft auf Nein eingestellt, sodass keine &auml;nderungen am Suchergebnis vorgenommen werden k&ouml;nnen.<\/p>\n<p>Zus&auml;tzlich befindet sich im Detailbereich die Schaltfl&auml;che btnGo, die mit drei Punkten beschriftet ist (s. Quellcode 14).<\/p>\n<p>Ein Klick darauf &ouml;ffnet das Formular frmKBEintr&auml;ge und zeigt den Artikel an (siehe Bild 5).<\/p>\n<pre>Private Sub btnGo_Click()\r\n    Dim KBEintragID As Long\r\n    KBEintragID = Me.Recordset(\"KBEintragID\")\r\n    DoCmd.OpenForm \"frmKBEintr&auml;ge\", acNormal, , _        \"KBEintragID=\" + CStr(KBEintragID)\r\nEnd Sub<\/pre>\n<p><b>Quellcode 14<\/b><\/p>\n<p>Die vorgestellte Knowledge-Base l&auml;sst sich im Bereich der Suche noch weiter optimieren. So ist beispielsweise ein abgestuftes Ranking interessant, bei dem der am besten passende Artikel an oberster Stelle erscheint.<\/p>\n<p>Die hier vorgestellte L&ouml;sung mittels Priorit&auml;ten stellt einen Ansatz dazu dar.<\/p>\n<p><IMG height=\"309\" src=\"..\/fileadmin\/_temp_\/{3C1D22E4-04C6-4140-843D-26435476D304}\/pic005.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Der Detailbereich des Suchformulars in der Entwurfsansicht<\/span><\/b><\/p>\n<p><IMG height=\"309\" src=\"..\/fileadmin\/_temp_\/{3C1D22E4-04C6-4140-843D-26435476D304}\/pic006.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Das Suchformular inklusive Suchergebnis<\/span><\/b><\/p>\n<p>Weiterhin w&auml;re eine Suche nach mehreren W&ouml;rtern m&ouml;glich, die beispielsweise nach dem Vorbild von Google interpretiert werden. So bedeutet die Suche nach<\/p>\n<p>+Access -Zugriff<\/p>\n<p>dass alle Artikel aufgelistet werden sollen, die zwar den Text Access, aber nicht den Text Zugriff enthalten. Im Hintergrund muss zu diesem Zweck die Eingabe des Benutzers in eine g&uuml;ltige WHERE-Klausel einer SQL-Abfrage umgesetzt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auch erfahrene Access-Entwickler m&uuml;ssen von Zeit zu Zeit passen, wenn knifflige Fragen zu beantwor-ten oder Probleme zu l&ouml;sen sind. Oft versucht man sich dann mit dem Satz &#8222;Ich hab&#8216; da mal was gele-sen &#8230;&#8220; aus der Aff&auml;re zu ziehen (sofern das Gegen&uuml;ber nicht mit der Frage &#8222;Was denn&#8220; kontert). Hierbei soll Ihnen die Knowledge-Base (kurz &#8222;KB&#8220;) helfen, die Ihnen in dieser Musterl&ouml;sung vorgestellt wird.<\/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":[662003,66052003,44000027],"tags":[],"class_list":["post-55000123","post","type-post","status-publish","format-standard","hentry","category-662003","category-66052003","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Knowledgebase mit Suchfunktion - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Knowledgebase mit Suchfunktion\" \/>\n<meta property=\"og:description\" content=\"Auch erfahrene Access-Entwickler m&uuml;ssen von Zeit zu Zeit passen, wenn knifflige Fragen zu beantwor-ten oder Probleme zu l&ouml;sen sind. Oft versucht man sich dann mit dem Satz &quot;Ich hab&#039; da mal was gele-sen ...&quot; aus der Aff&auml;re zu ziehen (sofern das Gegen&uuml;ber nicht mit der Frage &quot;Was denn&quot; kontert). Hierbei soll Ihnen die Knowledge-Base (kurz &quot;KB&quot;) helfen, die Ihnen in dieser Musterl&ouml;sung vorgestellt wird.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:31+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg03.met.vgwort.de\/na\/162567e2956747d38bef9ebc21f1bcd9\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Knowledgebase mit Suchfunktion\",\"datePublished\":\"2020-05-06T15:17:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/\"},\"wordCount\":1892,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/162567e2956747d38bef9ebc21f1bcd9\",\"articleSection\":[\"2003\",\"5\\\/2003\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/\",\"name\":\"Knowledgebase mit Suchfunktion - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/162567e2956747d38bef9ebc21f1bcd9\",\"datePublished\":\"2020-05-06T15:17:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/162567e2956747d38bef9ebc21f1bcd9\",\"contentUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/162567e2956747d38bef9ebc21f1bcd9\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Knowledgebase_mit_Suchfunktion\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase mit Suchfunktion\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Knowledgebase mit Suchfunktion - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/","og_locale":"de_DE","og_type":"article","og_title":"Knowledgebase mit Suchfunktion","og_description":"Auch erfahrene Access-Entwickler m&uuml;ssen von Zeit zu Zeit passen, wenn knifflige Fragen zu beantwor-ten oder Probleme zu l&ouml;sen sind. Oft versucht man sich dann mit dem Satz \"Ich hab' da mal was gele-sen ...\" aus der Aff&auml;re zu ziehen (sofern das Gegen&uuml;ber nicht mit der Frage \"Was denn\" kontert). Hierbei soll Ihnen die Knowledge-Base (kurz \"KB\") helfen, die Ihnen in dieser Musterl&ouml;sung vorgestellt wird.","og_url":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:31+00:00","og_image":[{"url":"http:\/\/vg03.met.vgwort.de\/na\/162567e2956747d38bef9ebc21f1bcd9","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Knowledgebase mit Suchfunktion","datePublished":"2020-05-06T15:17:31+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/"},"wordCount":1892,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/162567e2956747d38bef9ebc21f1bcd9","articleSection":["2003","5\/2003","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/","url":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/","name":"Knowledgebase mit Suchfunktion - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/162567e2956747d38bef9ebc21f1bcd9","datePublished":"2020-05-06T15:17:31+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/#primaryimage","url":"http:\/\/vg03.met.vgwort.de\/na\/162567e2956747d38bef9ebc21f1bcd9","contentUrl":"http:\/\/vg03.met.vgwort.de\/na\/162567e2956747d38bef9ebc21f1bcd9"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Knowledgebase_mit_Suchfunktion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Knowledgebase mit Suchfunktion"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000123"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000123\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}