{"id":55000851,"date":"2012-08-01T00:00:00","date_gmt":"2020-05-22T21:48:12","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=851"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"1nDaten_mit_HTML","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/","title":{"rendered":"1:n-Daten mit HTML"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/019b20d3a04945a991a3c075b0dca83d\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es gibt einige Darstellungen, die sich mit Access-Bordmitteln nicht oder nur mit sehr hohem Aufwand realisieren lassen. Dazu geh&ouml;ren beispielsweise alle Konstellationen aus 1:n-Beziehungen mit Unterformularen, bei denen man gern mehr als einen Datensatz im Hauptformular anzeigen w&uuml;rde. Zum Gl&uuml;ck erlaubt Access einen Blick &uuml;ber den Tellerrand, und mit dem Webbrowser-Steuerelement und HTML erreichen Sie wohl alle denkbaren Darstellungen &#8211; in diesem Fall die Endlosanzeige von 1:n-Beziehungen.<\/b><\/p>\n<p>Im vorliegenden Fall sollen alle Abteilungen einer Firma samt den dazugeh&ouml;rigen Mitarbeitern dargestellt werden, und zwar inklusive eines Kontrollk&auml;stchens je Abteilung und Mitarbeiter, mit dem man komplette Abteilungen oder einzelne Mitarbeiter aus- und abw&auml;hlen kann. Das Beispielformular aus Bild 1 geh&ouml;rt zu der L&ouml;sung aus dem Beitrag <b>Fehlzeiten verwalten <\/b>(<b>www.access-im-unternehmen.de\/850<\/b>).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/1nDatenMitHTML-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: 1:n-Beziehung im Webbrowser-Steuerelement<\/span><\/b><\/p>\n<p>Das Formular soll die Daten der beiden Tabellen <b>tblAbteilungen <\/b>und <b>tblMitarbeiter <\/b>anzeigen, die per 1:n-Beziehung &uuml;ber das Fremdschl&uuml;sselfeld <b>AbteilungID <\/b>der Tabelle <b>tblMitarbeiter <\/b>miteinander verkn&uuml;pft sind (s. Bild 3 aussieht. Das Webbrowser-Steuerelement erh&auml;lt den Namen <b>ctlWebbrowser<\/b>.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/1nDatenMitHTML-web-images\/pic237.png\" alt=\"pic237.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Tabellen der Beispielanwendung<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/1nDatenMitHTML-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Das Beispielformular in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Um ein HTML-Dokument mit den Methoden der MSHTML-Bibliothek zu best&uuml;cken, ben&ouml;tigen Sie zun&auml;chst einen Verweis auf diese Bibliothek. Diesen legen Sie im <b>Verweise<\/b>-Dialog (Men&uuml;eintrag <b>Optionen|Verweise <\/b>im VBA-Editor) fest (s. Bild 4). Danach k&ouml;nnen Sie bereits loslegen. Die Prozedur, die durch das Ereignis <b>Beim Laden <\/b>des Formulars ausgel&ouml;st wird, ruft wiederum die Prozedur <b>MitarbeiterAnzeigen <\/b>auf:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/1nDatenMitHTML-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Verweis auf die MSHTML-Bibliothek<\/span><\/b><\/p>\n<pre>Private Sub Form_Load()\r\n    MitarbeiterAnzeigen\r\nEnd Sub<\/pre>\n<p>Der weitere Aufbau wird von der Prozedur <b>MitarbeiterAnzeigen <\/b>gesteuert (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-36-anchor\">Listing 1<\/a><\/span>). Die Prozedur legt zun&auml;chst mit der Funktion <b>DokumentAnlegen<\/b> (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-44-anchor\">Listing 2<\/a><\/span>) ein Dokument im Webbrowser-Steuerelement an und speichert einen Verweis darauf in der Variablen <b>objDocument<\/b>.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Mitarbeiter im Webbrowser-Steuerelement anzeigen<\/p>\n<pre>Private Sub MitarbeiterAnzeigen()\r\n    Dim db As DAO.Database\r\n    Dim rstAbteilungen As DAO.Recordset\r\n    Dim rstMitarbeiter As DAO.Recordset\r\n    Dim objDocument As MSHTML.HTMLDocument\r\n    Dim objTable As MSHTML.HTMLTable\r\n    Dim objInnerRow As MSHTML.HTMLTableRow\r\n    Dim objInnerCell As MSHTML.HTMLTableCell\r\n    Dim objCheckbox As MSHTML.HTMLInputElement\r\n    Set colCheckboxes_Mitarbeiter = New Collection\r\n    Set colCheckboxes_Abteilungen = New Collection\r\n    Set objDocument = DokumentHolen\r\n    Set objTable = objDocument.createElement(&quot;Table&quot;)\r\n    objDocument.Body.appendChild objTable\r\n    objDocument.Body.Style.fontFamily = &quot;calibri&quot;\r\n    objDocument.Body.Style.FontSize = &quot;8px&quot;\r\n    objTable.Style.borderCollapse = &quot;collapse&quot;\r\n    Set db = CurrentDb\r\n    Set rstAbteilungen = db.OpenRecordset(&quot;SELECT * FROM qryAbteilungenMitMitarbeitern&quot;, dbOpenDynaset)\r\n    Do While Not rstAbteilungen.EOF\r\n        Set objInnerRow = ZeileZelleTabelleAnlegen(objDocument, objTable)\r\n        Set objInnerCell = objInnerRow.insertCell\r\n        objInnerCell.appendChild CheckboxAbteilungErstellen(objDocument, rstAbteilungen!AbteilungID)\r\n        Set objInnerCell = objInnerRow.insertCell\r\n        objInnerCell.innerText = rstAbteilungen!Abteilung\r\n        Set rstMitarbeiter = db.OpenRecordset(&quot;SELECT * FROM qryMitarbeiterauswahl &quot; _\r\n            &amp; &quot;WHERE AbteilungID &quot; &amp; rstAbteilungen!AbteilungID, dbOpenDynaset)\r\n        Do While Not rstMitarbeiter.EOF\r\n            Set objInnerRow = ZeileZelleTabelleAnlegen(objDocument, objTable)\r\n            Set objInnerCell = objInnerRow.insertCell\r\n            objInnerCell.Width = &quot;30px&quot;\r\n            Set objInnerCell = objInnerRow.insertCell\r\n            Set objCheckbox = CheckboxMitarbeiterErstellen(objDocument, _\r\n                rstMitarbeiter!MitarbeiterID)\r\n            objInnerCell.appendChild objCheckbox\r\n            objCheckbox.Checked = Not IsNull(rstMitarbeiter!MitarbeiterAnzeigenID)\r\n            Set objInnerCell = objInnerRow.insertCell\r\n            With objInnerCell\r\n                .innerText = rstMitarbeiter!Bezeichnung\r\n                .Style.fontFamily = &quot;calibri&quot;\r\n                .Style.FontSize = &quot;12px&quot;\r\n            End With\r\n            rstMitarbeiter.MoveNext\r\n        Loop\r\n        rstAbteilungen.MoveNext\r\n    Loop\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p class=\"listingueberschrift\">Listing 2: Browser mit leerem Dokument f&uuml;llen<\/p>\n<pre>Private Function DokumentHolen() As MSHTML.HTMLDocument\r\n    Dim objWebbrowser As SHDocVw.WebBrowser\r\n    Dim objDocument As MSHTML.HTMLDocument\r\n    Set objWebbrowser = GetWebbrowser\r\n    DoEvents\r\n    objWebbrowser.Navigate &quot;about:blank&quot;\r\n    Do\r\n        DoEvents\r\n    Loop Until objWebbrowser.ReadyState = READYSTATE_COMPLETE\r\n    Set objDocument = objWebbrowser.Document\r\n    Set DokumentHolen = objDocument\r\nEnd Function<\/pre>\n<p>Au&szlig;erdem erstellt die Prozedur zwei <b>Collection<\/b>-Objekte, welche sp&auml;ter Verweise auf Wrapper-Klassen f&uuml;r die Checkbox-Steuerelemente zum Ausw&auml;hlen der Abteilungen und der Mitarbeiter aufnehmen &#8211; dazu sp&auml;ter mehr. Wichtig ist erstmal, dass die <b>Collection<\/b>-Elemente wie folgt im Kopf des Klassenmoduls des Formulars deklariert werden:<\/p>\n<pre>Dim colCheckboxes_Mitarbeiter As Collection\r\nDim colCheckboxes_Abteilungen As Collection<\/pre>\n<p>Auch die Wrapper-Klassen werden im Kopf des Moduls deklariert:<\/p>\n<pre>Dim objCheckboxWrapper_Mitarbeiter As clsCheckboxWrapper_Mitarbeiter\r\nDim objCheckboxWrapper_Abteilung As clsCheckboxWrapper_Abteilung<\/pre>\n<p>Nun geht erstmal der Aufbau der Tabellenstruktur im HTML-Dokument weiter. Die Prozedur erstellt ein <b>HTMLTable<\/b>-Objekt und h&auml;ngt es als Kind-Element an das <b>HTMLDocument<\/b>-Element an. Einige Einstellungen bez&uuml;glich der Schriftart sorgen sp&auml;ter f&uuml;r ein einheitliches Bild.<\/p>\n<p>Danach kommt auch schon die Datenbank mit ihren Tabellen <b>tblAbteilungen <\/b>und <b>tblMitarbeiter<\/b> ins Spiel. Genau genommen &ouml;ffnet die Prozedur zun&auml;chst eine Datensatzgruppe auf Basis der Abfrage <b>qryAbteilungenMitMitarbeitern<\/b> (s. Bild 5<\/a><\/span>). Diese liefert alle Datens&auml;tze der Tabelle <b>tblAbteilungen<\/b>, denen mindestens ein Mitarbeiter angeh&ouml;rt. Diese Abteilungen werden in einer <b>Do While<\/b>-Schleife durchlaufen. Dabei erstellt die Prozedur <b>MitarbeiterAnzeigen <\/b>zun&auml;chst innerhalb einer Funktion namens <b>ZeileZelleTabelleAnlegen <\/b>einige Elemente im <b>HTMLTable<\/b>-Objekt, und zwar zun&auml;chst ein <b>HTMLRow<\/b>-Element, darin ein <b>HTMLCell<\/b>-Element, darin ein <b>HTMLTable<\/b>-Element und schlie&szlig;lich noch ein <b>HTMLRow<\/b>-Element (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-47-anchor\">Listing 3).<\/p>\n<p class=\"listingueberschrift\">Listing 3: Unabh&auml;ngige Zeilen anlegen<\/p>\n<pre>Public Function ZeileZelleTabelleAnlegen(objDocument As MSHTML.HTMLDocument, _\r\n        objTable As MSHTML.HTMLTable) As MSHTML.HTMLTableRow\r\n    Dim objRow As MSHTML.HTMLTableRow\r\n    Dim objCell As MSHTML.HTMLTableCell\r\n    Dim objInnerTable As MSHTML.HTMLTable\r\n    Dim objInnerRow As MSHTML.HTMLTableRow\r\n    Set objRow = objTable.insertRow\r\n    objRow.Style.verticalAlign = &quot;top&quot;\r\n    Set objCell = objRow.insertCell\r\n    Set objInnerTable = objDocument.createElement(&quot;Table&quot;)\r\n    objInnerTable.Style.borderCollapse = &quot;collapse&quot;\r\n    objCell.appendChild objInnerTable\r\n    Set objInnerRow = objInnerTable.insertRow\r\n    Set ZeileZelleTabelleAnlegen = objInnerRow\r\nEnd Function<\/pre>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/1nDatenMitHTML-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Datenherkunft f&uuml;r die &auml;u&szlig;ere Schleife<\/span><\/b><\/p>\n<p><!--30percent--><\/p>\n<p>Wozu das Ganze &#8211; w&uuml;rde denn nicht eine einfache Zeile reichen Eigentlich ja, wenn wir alle Zellen-Elemente sp&auml;ter genau untereinander anordnen wollten. Die Mitarbeiter-Elemente sollen jedoch etwas einger&uuml;ckt sein, weshalb wir in einer in einer Zelle eingebetteten Tabelle eine weitere Zeile anlegen. Und da wir sp&auml;ter das Gleiche f&uuml;r die Mitarbeiter-Zeilen erledigen, k&ouml;nnen wir darin nach Lust und Laune Tabellenzellen unterbringen, ohne dass deren Positionen vom Raster anderer Zeilen abh&auml;ngen.<\/p>\n<p><b>Checkbox f&uuml;r Abteilung einf&uuml;gen<\/b><\/p>\n<p>In diese neue Zeile, die mit <b>objInnerRow <\/b>referenziert wird, f&uuml;gt die Prozedur nun zwei Zellen ein: eine f&uuml;r die Checkbox und eine f&uuml;r die Bezeichnung der Abteilung. Die erste Zelle wird durch die Funktion <b>CheckboxAbteilungErstellen <\/b>gef&uuml;llt (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-48-anchor\">Listing 4<\/a><\/span>). Diese Prozedur erwartet das <b>HTMLDocument<\/b>-Element und den Wert des Feldes <b>AbteilungID <\/b>der Abteilung als Parameter. Damit ausgestattet legt sie zun&auml;chst ein neues Checkbox-Element an. Danach folgt direkt die Erstellung einer Instanz der Klasse <b>clsCheckboxWrapper_Abteilung<\/b>, welche die Funktionen enth&auml;lt, die beim Anklicken der Checkbox ausgel&ouml;st werden. Die Eigenschaft <b>Checkbox <\/b>der Wrapper-Klasse wird mit einem Verweis auf das Checkbox-Steuerelement gef&uuml;llt. Au&szlig;erdem erh&auml;lt die Eigenschaft <b>AbteilungID <\/b>den entsprechenden Wert der aktuell durchlaufenen Abteilung. Schlie&szlig;lich f&uuml;gt die Prozedur der Eigenschaft <b>Mitarbeiter <\/b>einen Verweis auf die Collection <b>colCheckboxes_Mitarbeiter <\/b>hinzu. Dieser wird sp&auml;ter ben&ouml;tigt, um beim Aktivieren oder Deaktivieren der kompletten Abteilung alle enthaltenen Mitarbeiter aus- oder abzuw&auml;hlen.<\/p>\n<p class=\"listingueberschrift\">Listing 4: Hinzuf&uuml;gen einer Checkbox zum Aktivieren einer Abteilung<\/p>\n<pre>Public Function CheckboxAbteilungErstellen(objDocument As MSHTML.HTMLDocument, _\r\n        lngAbteilungID As Long) As MSHTML.HTMLInputElement\r\n    Dim objCheckbox As MSHTML.HTMLInputElement\r\n    Set objCheckbox = objDocument.createElement(&quot;input&quot;)\r\n    objCheckbox.Type = &quot;Checkbox&quot;\r\n    Set objCheckboxWrapper_Abteilung = New clsCheckboxWrapper_Abteilung\r\n    With objCheckboxWrapper_Abteilung\r\n        Set .Checkbox = objCheckbox\r\n        .AbteilungID = lngAbteilungID\r\n        Set .Mitarbeiter = colCheckboxes_Mitarbeiter\r\n    End With\r\n    colCheckboxes_Abteilungen.Add objCheckboxWrapper_Abteilung, &quot;a&quot; &amp; lngAbteilungID\r\n    Set CheckboxAbteilungErstellen = objCheckbox\r\nEnd Function<\/pre>\n<p>Schlie&szlig;lich wird die Wrapper-Klasse der Collection zum Aufbewahren der Abteilungs-Wrapper-Klassen hinzugef&uuml;gt, damit diese auch nach dem Beenden dieser Prozedur noch existiert.<\/p>\n<p><b>Mitarbeiter-Checkboxen hinzuf&uuml;gen<\/b><\/p>\n<p>Zur&uuml;ck zur Prozedur <b>MitarbeiterAnzeigen<\/b>. Diese legt nach der Checkbox f&uuml;r die Abteilungen auch noch eine weitere Zelle an, die den Namen der jeweiligen Abteilung aufnimmt. Danach folgen die Mitarbeiter: Ein weiteres Recordset namens <b>rstMitarbeiter <\/b>wird mit allen Datens&auml;tzen der Abfrage <b>qryMitarbeiterauswahl <\/b>gef&uuml;llt, deren <b>AbteilungID <\/b>mit der aktuellen <b>AbteilungID <\/b>der &auml;u&szlig;eren <b>Do While<\/b>-Schleife &uuml;bereinstimmt (s. Bild 7). Hier tritt erstmals die Tabelle <b>tblMitarbeiterAusgewaehlt <\/b>in Aktion: Diese enth&auml;lt zwei Felder, n&auml;mlich ein Prim&auml;rschl&uuml;sselfeld namens <b>MitarbeiterAusgewaehltID <\/b>und ein Feld zur Aufnahme der <b>MitarbeiterID <\/b>aller aktuell ausgew&auml;hlten Mitarbeiter. Wird ein Mitarbeiter im Formular per Checkbox ausgew&auml;hlt, wird seine <b>MitarbeiterID <\/b>zu einem neuen Datensatz der Tabelle <b>tblMitarbeiterAusgewaehlt <\/b>hinzugef&uuml;gt, wird er abgew&auml;hlt, wird der Datensatz mit seiner <b>MitarbeiterID <\/b>gel&ouml;scht. Somit kann die Auswahl erfolgen, ohne dass dazu ein zus&auml;tzliches Feld in der Tabelle <b>tblMitarbeiter <\/b>angelegt werden muss.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/1nDatenMitHTML-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Datenherkunft f&uuml;r die innere Schleife<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/1nDatenMitHTML-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Ausgew&auml;hlte und nicht ausgew&auml;hlte Mitarbeiter<\/span><\/b><\/p>\n<p>Die Abfrage ermittelt alle Datens&auml;tze der Tabelle <b>tblMitarbeiter <\/b>und der Tabelle <b>tblMitarbeiterAusgewaehlt<\/b>, wobei auch die Datens&auml;tze der Tabelle <b>tblMitarbeiter <\/b>zum Abfrageergebnis geh&ouml;ren, deren <b>MitarbeiterID <\/b>nicht in der Tabelle <b>tblMitarbeiterAusgewaehlt<\/b> erscheint. Sp&auml;ter k&ouml;nnen Sie den Wert des Feldes <b>MitarbeiterAnzeigenID<\/b> dieser Abfrage auf <b>Null <\/b>pr&uuml;fen, um herauszufinden, ob dieser aktuell ausgew&auml;hlt ist.<\/p>\n<p>In der <b>Do While<\/b>-Schleife &uuml;ber alle Mitarbeiter der aktuellen Abteilung wird zun&auml;chst wieder die Funktion <b>ZeileZelleTabelleAnlegen <\/b>aufgerufen, um ein Konstrukt aus den entsprechenden Elementen zu erzeugen &#8211; auf diese Weise k&ouml;nnen wir die Elemente der Mitarbeiter-Zeile unabh&auml;ngig von den Elementen der Abteilungs-Zeile platzieren.<\/p>\n<p>In die Zeile, welche die Funktion zur&uuml;ckgeliefert hat und die nun mit <b>objInnerCell <\/b>referenziert wird, schreibt die folgende Anweisung eine neue Zelle, die allein die Aufgabe hat, einen Einschub von 30 Pixeln zu gew&auml;hrleisten.<\/p>\n<p>Die n&auml;chste Zelle in dieser Zeile soll die Checkbox f&uuml;r den aktuellen Mitarbeiter aufnehmen. Die Checkbox beziehen wir &uuml;ber die Funktion <b>CheckboxMitarbeiterErstellen <\/b>(s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-49-anchor\">Listing 5<\/a><\/span>), die &auml;hnlich aufgebaut ist wie die zuvor verwendete Funktion <b>CheckboxAbteilungErstellen<\/b>. Die damit erstellte Checkbox wird allerdings im Anschluss noch aktiviert oder deaktiviert &#8211; je nachdem, ob der Mitarbeiter in der Tabelle <b>tblMitarbeiterAusgewaehlt <\/b>enthalten ist oder nicht.<\/p>\n<p class=\"listingueberschrift\">Listing 5: Hinzuf&uuml;gen einer Checkbox zum Aktivieren eines Mitarbeiters<\/p>\n<pre>Public Function CheckboxMitarbeiterErstellen(objDocument As MSHTML.HTMLDocument, _\r\n        lngMitarbeiterID As Long) As MSHTML.HTMLInputElement\r\n    Dim objCheckbox As MSHTML.HTMLInputElement\r\n    Set objCheckbox = objDocument.createElement(&quot;input&quot;)\r\n    objCheckbox.Type = &quot;Checkbox&quot;\r\n    Set objCheckboxWrapper_Mitarbeiter = New clsCheckboxWrapper_Mitarbeiter\r\n    Set objCheckboxWrapper_Mitarbeiter.Checkbox = objCheckbox\r\n    objCheckboxWrapper_Mitarbeiter.MitarbeiterID = lngMitarbeiterID\r\n    colCheckboxes_Mitarbeiter.Add objCheckboxWrapper_Mitarbeiter, &quot;m&quot; &amp; lngMitarbeiterID\r\n    Set CheckboxMitarbeiterErstellen = objCheckbox\r\nEnd Function<\/pre>\n<p>Schlie&szlig;lich f&uuml;gt die innere <b>Do While<\/b>-Schleife noch eine Zelle zur Mitarbeiter-Zeile hinzu, die den Namen des Mitarbeiters aufnimmt.<\/p>\n<p>Auf diese Weise werden alle Datens&auml;tze des Abteilungen-Recordsets und des Mitarbeiter-Recordsets abgearbeitet.<\/p>\n<p><b>Ereignisse f&uuml;r Checkboxen programmieren<\/b><\/p>\n<p>Fehlt noch die interessanteste Aufgabe: Die per MSHTML erstellten Checkboxen sollen mit Funktionen versehen werden. Dazu haben wir pro Abteilungs-Checkbox eine Instanz der Klasse <b>clsCheckboxWrapper_Abteilung <\/b>erstellt und dieser einen Verweis auf das Checkbox-Steuerelement zugewiesen. Dazu ben&ouml;tigt die Wrapper-Klasse eine Objektvariable &#8211; genauso wie zum Speichern der <b>AbteilungID <\/b>des Mitarbeiters und des <b>Collection<\/b>-Objekts, das die Verweise auf die Instanzen der Klasse <b>clsCheckboxWrapper_Mitarbeiter<\/b> aufnimmt:<\/p>\n<pre>Private WithEvents m_Checkbox As MSHTML.HTMLInputElement\r\nPrivate m_AbteilungID As Long\r\nPrivate m_Mitarbeiter As Collection<\/pre>\n<p>Die folgende Prozedur nimmt &uuml;ber die Eigenschaft <b>Checkbox <\/b>einen Verweis auf das Checkbox-Steuerelement entgegen:<\/p>\n<pre>Public Property Set Checkbox(objCheckbox As MSHTML.HTMLInputElement)\r\n    Set m_Checkbox = objCheckbox\r\n    m_Checkbox.OnClick = &quot;[Event Procedure]&quot;\r\nEnd Property<\/pre>\n<p>Au&szlig;erdem stellt sie die Eigenschaft <b>OnClick <\/b>auf den Wert <b>[Event Procedure] <\/b>ein, damit die Klasse mit einer noch zu definierenden Prozedur auf dieses Ereignis reagieren kann. Die beiden folgenden <b>Property Let<\/b>\/<b>Get<\/b>-Prozeduren nehmen die <b>AbteilungID<\/b> und die Mitarbeiter-Collection entgegen:<\/p>\n<pre>Public Property Let AbteilungID(lngAbteilungID As Long)\r\n    m_AbteilungID = lngAbteilungID\r\nEnd Property\r\nPublic Property Set Mitarbeiter(colMitarbeiter As Collection)\r\n    Set m_Mitarbeiter = colMitarbeiter\r\nEnd Property<\/pre>\n<p>Fehlt noch die wichtigste Prozedur &#8211; die Ereignisprozedur <b>m_Checkbox_Click<\/b>, die beim Anklicken der mit <b>m_Checkbox <\/b>referenzierten Checkbox ausgel&ouml;st wird (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-50-anchor\">Listing 6<\/a><\/span>). Die Prozedur durchl&auml;uft alle Datens&auml;tze der Tabelle <b>tblMitarbeiter<\/b>, die zur angeklickten Abteilung geh&ouml;ren. Hat der Benutzer die Checkbox f&uuml;r die Abteilung aktiviert, werden alle Mitarbeiter dieser Abteilung zur Tabelle <b>tblMitarbeiterAusgewaehlt <\/b>hinzugef&uuml;gt und die entsprechenden Checkboxen aktiviert. Die Referenz auf die Checkboxen erh&auml;lt die Prozedur dabei &uuml;ber die in <b>m_Mitarbeiter <\/b>gespeicherte Collection. Sollte der Benutzer die Abteilung hingegen abgew&auml;hlt haben, l&ouml;scht die Prozedur alle entsprechenden Datens&auml;tze aus der Tabelle <b>tblMitarbeiterAusgewaehlt<\/b> und deaktiviert die Checkboxen der Mitarbeiter der betroffenen Abteilung.<\/p>\n<p class=\"listingueberschrift\">Listing 6: Ereignisprozedur beim Bet&auml;tigen der Abteilungen-Checkbox<\/p>\n<pre>Private Function m_Checkbox_onclick() As Boolean\r\n    Dim bolChecked As Boolean\r\n    Dim db As DAO.Database\r\n    Dim rstMitarbeiter As DAO.Recordset\r\n    bolChecked = m_Checkbox.Checked\r\n    Set db = CurrentDb\r\n    Set rstMitarbeiter = db.OpenRecordset(&quot;SELECT * FROM tblMitarbeiter WHERE AbteilungID = &quot; _\r\n        &amp; m_AbteilungID, dbOpenDynaset)\r\n    If bolChecked Then\r\n        Do While Not rstMitarbeiter.EOF\r\n            On Error Resume Next\r\n            db.Execute &quot;INSERT INTO tblMitarbeiterAnzeigen(MitarbeiterID) VALUES(&quot; _\r\n                &amp; rstMitarbeiter!MitarbeiterID &amp; &quot;)&quot;, dbFailOnError\r\n            On Error GoTo 0\r\n            m_Mitarbeiter.Item(&quot;m&quot; &amp; rstMitarbeiter!MitarbeiterID).Checked = True\r\n            rstMitarbeiter.MoveNext\r\n        Loop\r\n    Else\r\n        Do While Not rstMitarbeiter.EOF\r\n            db.Execute &quot;DELETE FROM tblMitarbeiterAnzeigen WHERE MitarbeiterID = &quot; _\r\n                &amp; rstMitarbeiter!MitarbeiterID, dbFailOnError\r\n            m_Mitarbeiter.Item(&quot;m&quot; &amp; rstMitarbeiter!MitarbeiterID).Checked = False\r\n            rstMitarbeiter.MoveNext\r\n        Loop\r\n    End If\r\n    m_Checkbox_onclick = True\r\n    Set db = Nothing\r\nEnd Function<\/pre>\n<p><b>Einzelne Mitarbeiter aus- und abw&auml;hlen <\/b><\/p>\n<p>F&uuml;r die Checkboxen der einzelnen Mitarbeiter geschieht dies &auml;hnlich. Dazu definiert auch die Wrapper-Klasse <b>clsCheckboxWrapper_Mitarbeiter<\/b> zun&auml;chst zwei entsprechende Variablen:<\/p>\n<pre>Private WithEvents m_Checkbox As MSHTML.HTMLInputElement\r\nPrivate m_MitarbeiterID As Long<\/pre>\n<p>Die Variablen werden mit diesen <b>Property Set<\/b>\/<b>Let<\/b>-Prozeduren gef&uuml;llt, wobei auch <b>m_Checkbox <\/b>mit einem <b>OnClick<\/b>-Ereignis versehen wird:<\/p>\n<pre>Public Property Set Checkbox(objCheckbox As MSHTML.HTMLInputElement)\r\n    Set m_Checkbox = objCheckbox\r\n    m_Checkbox.OnClick = &quot;[Event Procedure]&quot;\r\nEnd Property\r\nPublic Property Let MitarbeiterID(lngMitarbeiterID As Long)\r\n    m_MitarbeiterID = lngMitarbeiterID\r\nEnd Property<\/pre>\n<p>Au&szlig;erdem h&auml;lt die Klasse zwei Methoden bereit, um den <b>Checked<\/b>-Zustand von au&szlig;en zu ermitteln und zu &auml;ndern:<\/p>\n<pre>Public Property Let Checked(bolChecked As Boolean)\r\n    m_Checkbox.Checked = bolChecked\r\nEnd Property\r\nPublic Property Get Checked() As Boolean\r\n    Checked = m_Checkbox.Checked\r\nEnd Property<\/pre>\n<p>Schlie&szlig;lich aktiviert und deaktiviert das durch das Anklicken ausgel&ouml;ste Ereignis <b>m_Checkbox_onclick<\/b> die Mitarbeiter &uuml;ber die entsprechenden &auml;nderungen in der Tabelle <b>tblMitarbeiterAusgewaehlt <\/b>(s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-51-anchor\">Listing 7<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 7: Ereignisprozedur beim Bet&auml;tigen der Mitarbeiter-Checkbox<\/p>\n<pre>Private Function m_Checkbox_onclick() As Boolean\r\n    Dim bolChecked As Boolean\r\n    Dim db As DAO.Database\r\n    bolChecked = m_Checkbox.Checked\r\n    Set db = CurrentDb\r\n    If bolChecked Then\r\n        db.Execute &quot;INSERT INTO tblMitarbeiterAnzeigen(MitarbeiterID) VALUES(&quot; &amp; m_MitarbeiterID _\r\n            &amp; &quot;)&quot;, dbFailOnError\r\n    Else\r\n        db.Execute &quot;DELETE FROM tblMitarbeiterAnzeigen WHERE MitarbeiterID = &quot; _\r\n            &amp; m_MitarbeiterID, dbFailOnError\r\n    End If\r\n    m_Checkbox_onclick = True\r\n    Set db = Nothing\r\nEnd Function<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Wer sich einmal mit der Erstellung von Formularen mit dem Webbrowser-Steuerelement und MSHTML besch&auml;ftigt hat, wird diese Kenntnisse sch&auml;tzen, um Formulare zu erstellen, die sich mit Access-Bordmitteln nicht erstellen lassen.<\/p>\n<p>MSHTML bietet eine Unmenge an Ereignissen f&uuml;r die verschiedenen Elemente &#8211; experimentieren Sie einfach ein wenig damit herum!<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>FehlzeitenVerwalten.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{38908BC9-9C11-43D2-8EB3-5BE851BAD99C}\/aiu_851.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt einige Darstellungen, die sich mit Access-Bordmitteln nicht oder nur mit sehr hohem Aufwand realisieren lassen. Dazu geh&ouml;ren beispielsweise alle Konstellationen aus 1:n-Beziehungen mit Unterformularen, bei denen man gern mehr als einen Datensatz im Hauptformular anzeigen w&uuml;rde. Zum Gl&uuml;ck erlaubt Access einen Blick &uuml;ber den Tellerrand, und mit dem Webbrowser-Steuerelement und HTML erreichen Sie wohl alle denkbaren Darstellungen &#8211; in diesem Fall die Endlosanzeige von 1:n-Beziehungen.<\/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":[662012,66042012,44000026],"tags":[],"class_list":["post-55000851","post","type-post","status-publish","format-standard","hentry","category-662012","category-66042012","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>1:n-Daten mit HTML - 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\/1nDaten_mit_HTML\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"1:n-Daten mit HTML\" \/>\n<meta property=\"og:description\" content=\"Es gibt einige Darstellungen, die sich mit Access-Bordmitteln nicht oder nur mit sehr hohem Aufwand realisieren lassen. Dazu geh&ouml;ren beispielsweise alle Konstellationen aus 1:n-Beziehungen mit Unterformularen, bei denen man gern mehr als einen Datensatz im Hauptformular anzeigen w&uuml;rde. Zum Gl&uuml;ck erlaubt Access einen Blick &uuml;ber den Tellerrand, und mit dem Webbrowser-Steuerelement und HTML erreichen Sie wohl alle denkbaren Darstellungen - in diesem Fall die Endlosanzeige von 1:n-Beziehungen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:48:12+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/019b20d3a04945a991a3c075b0dca83d\" \/>\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\\\/1nDaten_mit_HTML\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"1:n-Daten mit HTML\",\"datePublished\":\"2020-05-22T21:48:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/\"},\"wordCount\":1717,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/019b20d3a04945a991a3c075b0dca83d\",\"articleSection\":[\"2012\",\"4\\\/2012\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/\",\"name\":\"1:n-Daten mit HTML - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/019b20d3a04945a991a3c075b0dca83d\",\"datePublished\":\"2020-05-22T21:48:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/019b20d3a04945a991a3c075b0dca83d\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/019b20d3a04945a991a3c075b0dca83d\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nDaten_mit_HTML\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"1:n-Daten mit HTML\"}]},{\"@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":"1:n-Daten mit HTML - 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\/1nDaten_mit_HTML\/","og_locale":"de_DE","og_type":"article","og_title":"1:n-Daten mit HTML","og_description":"Es gibt einige Darstellungen, die sich mit Access-Bordmitteln nicht oder nur mit sehr hohem Aufwand realisieren lassen. Dazu geh&ouml;ren beispielsweise alle Konstellationen aus 1:n-Beziehungen mit Unterformularen, bei denen man gern mehr als einen Datensatz im Hauptformular anzeigen w&uuml;rde. Zum Gl&uuml;ck erlaubt Access einen Blick &uuml;ber den Tellerrand, und mit dem Webbrowser-Steuerelement und HTML erreichen Sie wohl alle denkbaren Darstellungen - in diesem Fall die Endlosanzeige von 1:n-Beziehungen.","og_url":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:48:12+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/019b20d3a04945a991a3c075b0dca83d","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\/1nDaten_mit_HTML\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"1:n-Daten mit HTML","datePublished":"2020-05-22T21:48:12+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/"},"wordCount":1717,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/019b20d3a04945a991a3c075b0dca83d","articleSection":["2012","4\/2012","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/","url":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/","name":"1:n-Daten mit HTML - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/019b20d3a04945a991a3c075b0dca83d","datePublished":"2020-05-22T21:48:12+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/019b20d3a04945a991a3c075b0dca83d","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/019b20d3a04945a991a3c075b0dca83d"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/1nDaten_mit_HTML\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"1:n-Daten mit HTML"}]},{"@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\/55000851","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=55000851"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000851\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}