{"id":55000334,"date":"2006-04-01T00:00:00","date_gmt":"2020-05-06T15:18:17","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=334"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Drag_and_Drop_mit_dem_ListViewSteuerelement","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/","title":{"rendered":"Drag and Drop mit dem ListView-Steuerelement"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/23cbcd5762b246cfbe767d38a54240d1\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<h3>Zusammenfassung<\/h3>\n<p>Erfahren Sie, wie Sie mit Drag and Drop im ListView m:n-Beziehungen verwalten und individuelle Reihenfolgen anpassen k&ouml;nnen.<\/p>\n<h3>Techniken<\/h3>\n<p>ListView-Steuerelement, VBA<\/p>\n<h3>Voraussetzungen<\/h3>\n<p>Access 2000 und h&ouml;her<\/p>\n<h3>Beispieldateien<\/h3>\n<p><a href=''fileadmin\/files\/acc0206kh02.zip''>ListView.mdb, MSCOMCTL.msi<\/a><\/p>\n<h3><\/h3>\n<p><b>Andr&eacute; Minhorst, Duisburg<\/b><\/p>\n<p><b>Listenfelder sind eine sch&ouml;ne Einrichtung. Wie schade, dass sie kein Drag and Drop erlauben. Aber vielleicht haben Sie Gl&uuml;ck und setzen Access 2002 oder h&ouml;her ein oder besitzen ein passendes Entwicklerpaket: Dann k&ouml;nnen Sie n&auml;mlich das ListView-Steuerelement verwenden und mit diesem die gew&uuml;nschte Drag and Drop-Funktion realisieren.<\/b><\/p>\n<p>Beispiele f&uuml;r zwei Listenfelder, zwischen denen Daten hin und her verschoben werden sollen, gibt es wie Sand am Meer. Oft handelt es sich dabei um die Abbildung von m:n-Beziehungen. Warum also nicht mal wieder das gute alte Verteiler-Beispiel aufgreifen Hier geht es darum, f&uuml;r eine Publikation eine Reihe Empf&auml;nger aus den vorhandenen Kontakten auszuw&auml;hlen.<\/p>\n<p>Das Beispiel basiert auf drei Tabellen: Die Tabelle tblPublikationen enth&auml;lt die zu ver&ouml;ffentlichenden Werke, die Tabelle tblEmpfaenger die Adressen und die Tabelle tblVerteiler verkn&uuml;pft die Eintr&auml;ge der einen mit denen der anderen Tabelle. Im Beziehungsfenster sieht das wie in Bild 1 aus.<\/p>\n<p><IMG height=\"207\" src=\"..\/fileadmin\/_temp_\/{7ABDCF3B-B1F7-47F1-BFC7-E4042FC26D49}\/pic001.png\" width=\"457\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Datenmodell der Beispieldatenbank<\/span><\/b><\/p>\n<p>Das Formular soll in zwei ListView-Steuerelementen die Empf&auml;nger und die Nicht-Empf&auml;nger der Publikation anzeigen (siehe Bild 2).<\/p>\n<p><IMG height=\"349\" src=\"..\/fileadmin\/_temp_\/{7ABDCF3B-B1F7-47F1-BFC7-E4042FC26D49}\/pic002.png\" width=\"389\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  So soll das Formular zum Hin- und Herschieben von Empf&auml;ngern aussehen.<\/span><\/b><\/p>\n<p><b>Quellcode 1: Diese Routine f&uuml;llt eine Liste mit den Daten einer Tabelle<\/b><\/p>\n<pre>Private Sub ListeAktualisieren(objListView As ListView, strSQL As String)\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)\r\n    objListView.ListItems.Clear\r\n    Do While Not rst.EOF\r\n        objListView.ListItems.Add , \"a\" & rst(0), rst(1)\r\n        rst.MoveNext\r\n    Loop\r\n    rst.Close\r\n    Set rst = Nothing\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p><b>Quellcode 2: Aufruf der Routine zum F&uuml;llen der beiden ListView-Steuerelemente<\/b><\/p>\n<pre>Private Sub Form_Current()\r\n    Dim strSQLEmpfaenger As String\r\n    Dim strSQLKeinEmpfaenger As String\r\n    If Not IsNull(Me.Publikation) Then\r\n        strSQLEmpfaenger = \"SELECT tblEmpfaenger.EmpfaengerID, tblEmpfaenger.Empfaenger \" _            & \"FROM tblEmpfaenger INNER JOIN tblVerteiler ON tblEmpfaenger.EmpfaengerID = \" _            & \" tblVerteiler.EmpfaengerID WHERE tblVerteiler.PublikationID = \" _            & Me.PublikationID & \" ORDER BY tblEmpfaenger.Empfaenger\"\r\n        strSQLKeinEmpfaenger = \"SELECT tblEmpfaenger.EmpfaengerID, tblEmpfaenger.Empfaenger \" _            & \"FROM tblEmpfaenger WHERE tblEmpfaenger.EmpfaengerID NOT IN \" _            & \"(SELECT tblEmpfaenger.EmpfaengerID FROM tblEmpfaenger INNER JOIN tblVerteiler \" _            & \"ON tblEmpfaenger.EmpfaengerID = tblVerteiler.EmpfaengerID WHERE \" _            & \" tblVerteiler.PublikationID = \" & Me.PublikationID _            & \") ORDER BY tblEmpfaenger.Empfaenger\"\r\n        ListeAktualisieren Me.lvwZugeordnet.Object, strSQLEmpfaenger\r\n        ListeAktualisieren Me.lvwNichtZugeordnet.Object, strSQLKeinEmpfaenger\r\n    End If\r\nEnd Sub<\/pre>\n<p>Bevor &uuml;berhaupt irgendein Eintrag von links nach rechts und umgekehrt gezogen werden kann, m&uuml;ssen erst einmal &uuml;berhaupt Eintr&auml;ge da sein &#8211; dementsprechend folgt nun die Beschreibung des Aufbaus des Formulars.<\/p>\n<p>Das Formular selbst ist an die Tabelle tblPublikationen gebunden. Bei jedem Wechsel des im Formular angezeigten Publikations-Datensatzes sollen auch die beiden ListViews aktualisiert werden. Die Routine wird daher logischerweise durch die Ereigniseigenschaft Beim Anzeigen aufgerufen.<\/p>\n<p>Die beiden ListViews sind fast identisch aufgebaut, was sich auch auf das F&uuml;llen mit Daten auswirkt: Die dazu ben&ouml;tigte Routine sieht f&uuml;r beide Steuerelemente fast identisch aus. So identisch, dass man daraus eine einzige parametrisierte Routine machen kann. Als Parameter &uuml;bergibt die aufrufende Prozedur nur einen Verweis auf das jeweilige Listenfeld sowie den SQL-Ausdruck, der die einzuf&uuml;genden Datens&auml;tze festlegt.<\/p>\n<p>Die Routine ListeAktualisieren ist f&uuml;r das Anlegen der Elemente der ListViews verantwortlich (s. Quellcode 1). Sie &ouml;ffnet eine auf der &uuml;bergebenen SQL-Anweisung basierende Datensatzgruppe und durchl&auml;uft diese. Dabei f&uuml;gt sie je Datensatz ein Element zum angegebenen ListView hinzu. Das erste im SQL-Ausdruck angegebene Feld dient als Teil der Key-Eigenschaft des Elements, das zweite als angezeigter Text. Die beim Anzeigen des aktuellen Datensatzes im Formular ausgel&ouml;ste Prozedur Form_Current ruft diese Routine zweimal mit verschiedenen Parametern auf (s. Quellcode 2).<\/p>\n<p>Der erste dabei verwendete SQL-Ausdruck ermittelt alle Datens&auml;tze der verkn&uuml;pften Tabellen tblEmpfaenger und tblVerteiler, bei denen die in der Tabelle tblVerteiler angegebene PublikationID mit der aktuell im Formular angezeigten &uuml;bereinstimmt. <\/p>\n<p><b>Quellcode 3: Der Drag-and-Drop-Vorgang startet im ListView lvwNichtZugeordnet &#8230;<\/b><\/p>\n<pre>Private Sub lvwNichtZugeordnet_OLEStartDrag(Data As Object, AllowedEffects As Long)\r\n    Dim objListItem As ListItem\r\n    Dim strData As String\r\n    Dim strDataItems() As String\r\n    For Each objListItem In lvwNichtZugeordnet.ListItems\r\n        If objListItem.Selected = True Then\r\n            strData = strData & objListItem.Key & \"&brvbar;\" & objListItem.Text & \";\"\r\n        End If\r\n    Next\r\n    Data.Clear\r\n    Data.SetData strData, ccCFText\r\nEnd Sub<\/pre>\n<p>Die zweite SQL-Anweisung verwendet fast die gleiche Anweisung wie die erste &#8211; allerdings nur als Unterabfrage. Damit ermittelt diese Abfrage alle Empf&auml;nger-Datens&auml;tze, die nicht durch die erste SQL-Anweisung erfasst werden und dementsprechend nicht &uuml;ber die Tabelle tblVerteiler mit der aktuell angezeigten Publikation verkn&uuml;pft sind.<\/p>\n<h3>Aufbau der ListView-Steuerelemente<\/h3>\n<p>Die beiden ListViews sind genau gleich aufgebaut. Die einzigen Unterschiede sind der Name und die angezeigte Spalten&uuml;berschrift. Die Eigenschaften im Detail:<\/p>\n<li>Name: lvwEmpfaenger beziehungsweise lvwKeinEmpfaenger<\/li>\n<li>View: 3 &#8211; lvwReport<\/li>\n<li>Spaltenk&ouml;pfe: je einer mit einer Breite von 2500 und der Beschriftung Empf&auml;nger beziehungsweise Kein Empf&auml;nger<\/li>\n<li>MultiSelect: aktiviert<\/li>\n<li>OLEDragMode: 1 &#8211; ccOLEDragAutomatic<\/li>\n<li>OLEDropMode: 1 &#8211; ccOLEDropManual<\/li>\n<p>Mit diesen Einstellungen und den beiden beschriebenen Routinen k&ouml;nnen Sie nun bereits die Daten aus den drei Tabellen darstellen. Es fehlt also nur noch die Drag-and-Drop-Funktion &#8230;<\/p>\n<p>Beim Drag and Drop mit ungebundenen Steuerelementen, wie es die ListViews nun einmal sind, ist vor allem eines zu beachten: Neben dem Verschieben des Eintrags zwischen den Listen m&uuml;ssen auch die dahinter liegenden Datenbanktabellen aktualisiert werden. F&uuml;r das Ziehen eines Eintrags von einem zum anderen ListView ben&ouml;tigen Sie nur zwei Ereignisprozeduren &#8211; vorausgesetzt, Sie verzichten auf jeglichen Schnickschnack:<\/p>\n<li>OLEStartDrag beim Quell-ListView<\/li>\n<li>OLEDragDrop beim Ziel-ListView<\/li>\n<p><!--30percent--><\/p>\n<p>Die OLEStartDrag-Prozedur (s. Quellcode 3) durchl&auml;uft in einer Schleife alle Elemente des ListViews und pr&uuml;ft, welche Elemente markiert sind. Alle markierten Elemente werden an eine String-Variable angeh&auml;ngt &#8211; und zwar in der Form &lt;Key&gt;&brvbar;&lt;Text&gt;;.<\/p>\n<p>Wozu das alles Ganz einfach: Die Parameterliste der Ereignisprozedur enth&auml;lt ein Objekt namens Data, das zun&auml;chst mit der Clear-Methode geleert und dann &uuml;ber die SetData-Methode mit der soeben zusammengestellten Liste gef&uuml;llt wird. Dieses Objekt (OLE-DataObject) ist eine Art Zwischenablage f&uuml;r Drag-and-Drop-Operationen und wird im Ziel-Steuerelement ausgelesen.<\/p>\n<p><b>Quellcode 4: &#8230; und endet im ListView lvwZugeordnet.<\/b><\/p>\n<pre>Private Sub lvwZugeordnet_OLEDragDrop(Data As Object, Effect As Long, Button As Integer, _    Shift As Integer, x As Single, y As Single)\r\n    Dim strData As String\r\n    Dim strDataItems() As String\r\n    Dim strText As String\r\n    Dim strKey As String\r\n    Dim i As Integer\r\n    strData = Data.GetData(ccCFText)\r\n    If InStr(1, strData, \"&brvbar;\") &lt;&gt; 0 Then\r\n        If Right(strData, 1) = \";\" Then\r\n            strData = Left(strData, Len(strData) - 1)\r\n        End If\r\n        strDataItems = Split(strData, \";\")\r\n        For i = 0 To UBound(strDataItems)\r\n            strKey = Split(strDataItems(i), \"&brvbar;\")(0)\r\n            strText = Split(strDataItems(i), \"&brvbar;\")(1)\r\n            If IsNull(DLookup(\"EmpfaengerID\", \"tblVerteiler\", \"PublikationID = \" _                & Me.PublikationID & \" AND EmpfaengerID = \" & Mid(strKey, 2))) Then\r\n                lvwZugeordnet.ListItems.Add , strKey, strText\r\n                lvwNichtZugeordnet.ListItems.Remove strKey\r\n                CurrentDb.Execute \"INSERT INTO tblVerteiler(PublikationID, EmpfaengerID) \" _                    & \"VALUES(\" & Me.PublikationID & \", \" & Mid(strKey, 2) & \")\"\r\n            End If\r\n        Next i\r\n    End If\r\nEnd Sub<\/pre>\n<p>Dies passiert dann in der OLEDragDrop-Ereignisprozedur des Ziel-ListViews (s. Quellcode 4): Hier taucht das Objekt Data erneut in der Parameterliste auf. Die GetData-Methode gibt den Inhalt dieses Objekts preis. In der String-Variablen strData angekommen, werden die Daten direkt weiterverarbeitet: Nach der Pr&uuml;fung, ob mindestens ein &#8222;Pipe&#8220;-Zeichen (&brvbar;) in der &uuml;bergebenen Zeichenkette enthalten ist, teilen die folgenden Anweisungen die Zeichenkette zun&auml;chst in die durch Semikola (;) getrennten Bestandteile auf und speichern sie in einem String-Array. Dieses wird in einer For Next-Schleife &uuml;ber alle Elemente durchlaufen, wobei die Split-Anweisung die Elemente vor und hinter dem &#8222;Pipe&#8220;-Zeichen in die Variablen strKey und strText extrahiert. Und damit l&auml;sst sich nat&uuml;rlich leicht ein neues Element zum ListView hinzuf&uuml;gen. Gleiches gilt auch andersherum: Nachdem die Add-Methode der ListItems-Auflistung des Ziel-ListViews das neue Element hinzugef&uuml;gt hat, entfernt die Remove-Methode selbiges aus dem Ursprungs-ListView.<\/p>\n<p>Mit diesen beiden Routinen k&ouml;nnen Sie nun schon Elemente von rechts nach links, aber noch nicht von links nach rechts ziehen. Das l&auml;sst sich aber leicht nachholen: Legen Sie einfach die passenden Ereignisprozeduren f&uuml;r das jeweils andere ListView-Steuerelement an.<\/p>\n<p>Beim Probieren f&auml;llt allerdings eines auf: Nach ein paar Drag-and-Drop-Operationen und einem Wechsel zu einem anderen Publikations-Datensatz im Formular und wieder zur&uuml;ck enth&auml;lt jedes ListView wieder die urspr&uuml;nglichen Elemente. Das liegt daran, dass die Datenbankseite bisher au&szlig;en vor gelassen wurde: Sie k&ouml;nnen zwar lustig Elemente zwischen den ListViews hin- und herschieben, aber die entsprechenden &auml;nderungen an der Verkn&uuml;pfungstabelle tblVerteiler erfolgen nicht.<\/p>\n<p>Der Aufwand hierf&uuml;r ist allerdings vergleichsweise gering: F&uuml;r das Hinzuf&uuml;gen eines Kontakts zur Liste der Empf&auml;nger muss man schlie&szlig;lich nur einen Datensatz mit der PublikationID und der EmpfaengerID zur Tabelle tblVerteiler hinzuf&uuml;gen; zum Entfernen des Empf&auml;ngers aus der Liste l&ouml;scht man einfach den passenden Eintrag aus der Tabelle tblVerteiler.<\/p>\n<p>Ein Platz f&uuml;r die SQL-Anweisungen ist auch schnell gefunden: Da die &auml;nderungen jeweils f&uuml;r alle markierten Elemente vorzunehmen sind, geh&ouml;rt die entsprechende Anweisung selbstverst&auml;ndlich in eine der For Next-Schleifen, die alle zu bewegenden Elemente durchl&auml;uft. Soll ein Eintrag aus dem Verteiler entfernt werden, f&uuml;gen Sie diese Anweisung in die Routine lvwNichtZugeordnet_OLEDragDrop ein (in einer Zeile):<\/p>\n<pre>CurrentDb.Execute \"DELETE FROM tblVerteiler WHERE PublikationID = \" & Me.PublikationID & \" AND EmpfaengerID = \" & Mid(strKey, 2)<\/pre>\n<p>Die entsprechende Anweisung in der Routine lvwZugeordnet_OLEDragDrop sieht so aus:<\/p>\n<pre>CurrentDb.Execute \"INSERT INTO tblVerteiler(PublikationID, EmpfaengerID) VALUES(\" & Me.PublikationID & \", \" & Mid(strKey, 2) & \")\"<\/pre>\n<p>Neben dem Bewegen von Elementen zwischen zwei ListView-Steuerelementen ist auch das Einstellen der Reihenfolge von Elementen ein h&auml;ufig gefragtes Thema. Dazu ist zun&auml;chst ein Feld in der Herkunftstabelle vorzusehen, das einen die Reihenfolge festlegenden Wert enth&auml;lt &#8211; typischerweise hei&szlig;t dieses Feld dann auch Reihenfolge.<\/p>\n<p>Wichtig ist die &uuml;berlegung, wann die &auml;nderungen der Reihenfolge im ListView in die zugrunde liegende Tabelle &uuml;bertragen werden.<\/p>\n<p>Wenn man dies nach jeder &auml;nderung erledigt, ist schon eine Menge Code notwendig. Daher beschr&auml;nkt sich dieses Beispiel auf das &uuml;bertragen der &auml;nderungen der Reihenfolge auf das Schlie&szlig;en des Formulars &#8211; das hei&szlig;t, dass dann einmalig alle Elemente des ListViews durchlaufen und ihre neue Reihenfolge im Feld Reihenfolge der entsprechenden Tabelle vermerkt wird.<\/p>\n<h3>Beispielformular<\/h3>\n<p>Das Formular enth&auml;lt ein ListView namens ctlListView, das mit Daten aus der Tabelle tblPersonen gef&uuml;llt werden soll. Diese Tabelle enth&auml;lt vier Spalten inklusive der erw&auml;hnten Spalte namens Reihenfolge (siehe Bild 3).<\/p>\n<p><IMG height=\"129\" src=\"..\/fileadmin\/_temp_\/{7ABDCF3B-B1F7-47F1-BFC7-E4042FC26D49}\/pic003.png\" width=\"282\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Diese Tabelle speichert Daten mit individueller Angabe der Reihenfolge.<\/span><\/b><\/p>\n<p>Das ListView-Steuerelement im Formular zeigt die Daten wie gehabt in der Ansicht lvwReport an. OLEDragMode und OLEDropMode stellt man auf ccOLEDragAutomatic beziehungsweise ccOLEDropManual ein. Da die Elemente mit der Maus verschoben werden sollen, w&auml;re es gut, wenn man die Elemente &uuml;ber die ganze Spalte &#8222;greifen&#8220; k&ouml;nnte &#8211; dazu aktivieren Sie die Eigenschaft FullRowSelect. Das ListView soll zwei Spalten anzeigen, deren K&ouml;pfe die Texte Nachname und Vorname enthalten.<\/p>\n<h3>F&uuml;llen des ListViews<\/h3>\n<p>Das F&uuml;llen des Steuerelements erfolgt beim &ouml;ffnen des Formulars in der Ereignisprozedur Form_Load (s. Quellcode 7). Die Routine erzeugt f&uuml;r jeden Datensatz ein Element im ListView, wobei die Startreihenfolge &uuml;ber die im Feld Reihenfolge festgelegten Zahlenwerte festgelegt ist. Der Inhalt dieses Feldes ist interessanterweise nicht Bestandteil der Elemente des ListViews. Der Grund ist, dass ein ListItem mit seinem Index bereits die aktuelle Reihenfolgeposition enth&auml;lt.<\/p>\n<h3>Start Dragging<\/h3>\n<p>Der Drag-and-Drop-Vorgang beginnt mit dem Markieren eines Elements mit der Maus und dem anschlie&szlig;enden Bewegen des Mauszeigers. Dies erkennt das Steuerelement und l&ouml;st die Ereignisprozedur OLEStartDrag aus (s. Quellcode 8). Die Routine verwendet die Eigenschaft SelectedItem, um das markierte Element zu ermitteln. Dessen Daten werden durch ein &#8222;Pipe&#8220;-Zeichen (&brvbar;) getrennt in eine String-Variable geschrieben und dem Data-Parameter der Ereignisprozedur &uuml;bergeben.<\/p>\n<p><b>Quellcode 7: Das ListView wird beim &ouml;ffnen des Formulars mit den Datens&auml;tzen der Tabelle tblPersonen gef&uuml;llt.<\/b><\/p>\n<pre>Private Sub Form_Load()\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim objListitem As ListItem\r\n    Set db = CurrentDb\r\n    Set rst = CurrentDb.OpenRecordset(\"SELECT * FROM tblPersonen ORDER BY Reihenfolge\", _        dbOpenDynaset)\r\n    Set objListView = Me.ctlListView.Object\r\n    Do While Not rst.EOF\r\n        Set objListitem = objListView.ListItems.Add(, \"a\" & rst!PersonID, rst!Nachname)\r\n        objListitem.ListSubItems.Add , , rst!Vorname\r\n        rst.MoveNext\r\n    Loop\r\nEnd Sub<\/pre>\n<p><b>Quellcode 8: Ermitteln des markierten Elements und Zwischenspeichern seiner Daten<\/b><\/p>\n<pre>Private Sub ctlListView_OLEStartDrag(Data As Object, AllowedEffects As Long)\r\n    Dim strKey As String\r\n    Dim objListitem As ListItem\r\n    Set objListitem = ctlListView.SelectedItem\r\n    strKey = objListitem.Key & \"&brvbar;\" & objListitem.Text & \"&brvbar;\" & objListitem.ListSubItems(1).Text _        & \"&brvbar;\" & objListitem.Index ''& \"&brvbar;\" & objListitem.ListSubItems(2).Text\r\n    Data.Clear\r\n    Data.SetData strKey\r\nEnd Sub<\/pre>\n<p><b>Quellcode 9: Diese Routine sorgt f&uuml;r das Markieren des Elements, &uuml;ber dem sich der Mauszeiger aktuell befindet.<\/b><\/p>\n<pre>Private Sub ctlListView_OLEDragOver(Data As Object, Effect As Long, Button As Integer, _    Shift As Integer, x As Single, y As Single, State As Integer)\r\n    Set ctlListView.DropHighlight = ctlListView.HitTest(x, y)\r\nEnd Sub<\/pre>\n<p><b>Quellcode 10: Diese Routine f&uuml;hrt die eigentliche Drag-and-Drop-Operation durch.<\/b><\/p>\n<pre>Private Sub ctlListView_OLEDragDrop(Data As Object, Effect As Long, Button As Integer, _    Shift As Integer, x As Single, y As Single)\r\n    ''Deklaration aus Platzgr&uuml;nden nicht abgedruckt\r\n    strData = Data.GetData(ccCFText)\r\n    strKey = Split(strData, \"|\")(0)\r\n    strNachname = Split(strData, \"|\")(1)\r\n    strVorname = Split(strData, \"|\")(2)\r\n    lngReihenfolgeAlt = CLng(Split(strData, \"|\")(3))\r\n    lngIndex = ctlListView.HitTest(x, y).Index\r\n    lngReihenfolgeNeu = CLng(ctlListView.HitTest(x, y).Index)\r\n    If Not lngReihenfolgeNeu = lngReihenfolgeAlt Then\r\n        ctlListView.ListItems.Remove strKey\r\n        Set objListitem = ctlListView.ListItems.Add(lngIndex, strKey, strNachname)\r\n        objListitem.ListSubItems.Add , , strVorname\r\n        bolReihenfolgeGeaendert = True\r\n    End If\r\nEnd Sub<\/pre>\n<p>Von dort kann die Ereignisprozedur OLEDragDrop die Zeichenkette wieder auslesen &#8211; dazu sp&auml;ter mehr. Erstmal tritt die Ereignisprozedur OLEDragOver auf den Plan. Diese wird regelm&auml;&szlig;ig w&auml;hrend des Ziehens ausgel&ouml;st. Hier sorgt sie daf&uuml;r, dass das Element, &uuml;ber dem sich der Mauszeiger aktuell befindet, markiert wird. So kann der Benutzer genau erkennen, wo das zu verschiebende Element landet (s. Quellcode 9).<\/p>\n<h3>Drag and Drop vollenden<\/h3>\n<p>Das Loslassen der Maustaste beziehungsweise das &#8222;Droppen&#8220; l&ouml;st die Ereignisprozedur OLEDragDrop aus (s. Quellcode 10). Zu diesem Zeitpunkt sind nun alle f&uuml;r die Operation notwendigen Informationen bekannt &#8211; n&auml;mlich das zu verschiebende Element und das Element, dessen Position es einnehmen soll. Die Daten des zu verschiebenden Elements entnimmt die Routine dem Data-Parameter der Ereignisprozedur, unter anderem auch den Index der vorherigen und der Zielposition.<\/p>\n<p>Unter Umst&auml;nden versucht der Benutzer, den Eintrag auf sich selbst zu ziehen &#8211; in dem Fall soll nat&uuml;rlich keine &auml;nderung der Reihenfolge vorgenommen werden. Anderenfalls entfernt die Routine das Ausgangselement und legt es an der gew&uuml;nschten Stelle neu an. Au&szlig;erdem wird die Boolean-Variable bolReihenfolgeGeaendert auf den Wert True gesetzt. Wozu diese Variable notwendig ist, erfahren Sie weiter unten.<\/p>\n<p><b>Quellcode 11: Speichern der neuen Reihenfolge in der zugrunde liegenden Tabelle der Datenbank<\/b><\/p>\n<pre>Private Sub Form_Close()\r\n    Dim db As DAO.Database\r\n    Dim objListitem As ListItem\r\n    If bolReihenfolgeGeaendert = True Then\r\n        Set db = CurrentDb\r\n        For Each objListitem In ctlListView.ListItems\r\n            db.Execute \"UPDATE tblPersonen SET Reihenfolge = \" _                & objListitem.Index & \" WHERE PersonID = \" _                & Mid(objListitem.Key, 2)\r\n        Next objListitem\r\n    End If\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<h3>Neue Reihenfolge speichern<\/h3>\n<p>Fehlt noch der letzte Schritt: Die neue Reihenfolge soll beim Schlie&szlig;en des Formulars gespeichert werden.<\/p>\n<p>Damit dies nicht unn&ouml;tig geschieht, also wenn etwa gar keine &auml;nderung der Reihenfolge vorgenommen wurde, gibt es die oben erw&auml;hnte Boolean-Variable bolReihenfolgeGeaendert. Diese wird nur bei einer &auml;nderung der Reihenfolge auf den Wert True gesetzt. Die Ereignisprozedur Form_Close fragt diese Variable beim Schlie&szlig;en des Formulars ab und speichert die neue Reihenfolge nur, wenn diese Variable den Wert True enth&auml;lt.<\/p>\n<p>Das Speichern ist ein Rundumschlag: Da die Anwendung nicht nachvollzieht, welche Elemente ihre Reihenfolge ver&auml;ndert haben, muss die Reihenfolge aller Elemente auf den neuesten Stand gebracht werden.<\/p>\n<p>Dazu durchl&auml;uft die Routine in einer For Each-Schleife alle Elemente und f&uuml;hrt jeweils eine SQL-Update-Anweisung aus.<\/p>\n<h3>Reihenfolge &uuml;ber Spaltenk&ouml;pfe festlegen<\/h3>\n<p>Nat&uuml;rlich w&auml;re es praktisch, wenn man die Reihenfolge auch einmal entsprechend der alphabetischen Sortierung der Spalte festlegen k&ouml;nnte. Das Beispielformular enth&auml;lt diese Funktion, die aus Platzgr&uuml;nden nicht mehr im Detail besprochen werden kann.<\/p>\n<p>Zu beachten ist hierbei: Wenn eine Sortierung nach einer Spalte aktiviert ist, bleiben die oben beschriebenen Drag-and-Drop-Funktionen wirkungslos &#8211; die Spaltensortierung wird jedes Mal direkt wiederhergestellt.<\/p>\n<p>Deshalb hat das Formular eine zus&auml;tzliche Schaltfl&auml;che zum Aufheben der aktiven Spaltensortierung (siehe Bild 4). F&uuml;r weitere Informationen konsultieren Sie den Quellcode des Beispielformulars.<\/p>\n<p><IMG height=\"262\" src=\"..\/fileadmin\/_temp_\/{7ABDCF3B-B1F7-47F1-BFC7-E4042FC26D49}\/pic004.png\" width=\"317\" border=\"0\"><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Das Formular zum individuellen Sortieren von Daten im Einsatz<\/span><\/b><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Listenfelder sind eine sch&ouml;ne Einrichtung. Wie schade, dass sie kein Drag and Drop erlauben. Aber vielleicht haben Sie Gl&uuml;ck und setzen Access 2002 oder h&ouml;her ein oder besitzen ein passendes Ent-wicklerpaket: Dann k&ouml;nnen Sie n&auml;mlich das ListView-Steuerelement verwenden und mit diesem die gew&uuml;nschte Drag and Drop-Funktion realisieren.<\/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":[66022006,662006,44000028,44000023],"tags":[],"class_list":["post-55000334","post","type-post","status-publish","format-standard","hentry","category-66022006","category-662006","category-Ergonomie_und_Benutzeroberflaeche","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Drag and Drop mit dem ListView-Steuerelement - 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\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Drag and Drop mit dem ListView-Steuerelement\" \/>\n<meta property=\"og:description\" content=\"Listenfelder sind eine sch&ouml;ne Einrichtung. Wie schade, dass sie kein Drag and Drop erlauben. Aber vielleicht haben Sie Gl&uuml;ck und setzen Access 2002 oder h&ouml;her ein oder besitzen ein passendes Ent-wicklerpaket: Dann k&ouml;nnen Sie n&auml;mlich das ListView-Steuerelement verwenden und mit diesem die gew&uuml;nschte Drag and Drop-Funktion realisieren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:18:17+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/23cbcd5762b246cfbe767d38a54240d1\" \/>\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=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Drag and Drop mit dem ListView-Steuerelement\",\"datePublished\":\"2020-05-06T15:18:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/\"},\"wordCount\":2216,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/23cbcd5762b246cfbe767d38a54240d1\",\"articleSection\":[\"2\\\/2006\",\"2006\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/\",\"name\":\"Drag and Drop mit dem ListView-Steuerelement - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/23cbcd5762b246cfbe767d38a54240d1\",\"datePublished\":\"2020-05-06T15:18:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/23cbcd5762b246cfbe767d38a54240d1\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/23cbcd5762b246cfbe767d38a54240d1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Drag_and_Drop_mit_dem_ListViewSteuerelement\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Drag and Drop mit dem ListView-Steuerelement\"}]},{\"@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":"Drag and Drop mit dem ListView-Steuerelement - 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\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/","og_locale":"de_DE","og_type":"article","og_title":"Drag and Drop mit dem ListView-Steuerelement","og_description":"Listenfelder sind eine sch&ouml;ne Einrichtung. Wie schade, dass sie kein Drag and Drop erlauben. Aber vielleicht haben Sie Gl&uuml;ck und setzen Access 2002 oder h&ouml;her ein oder besitzen ein passendes Ent-wicklerpaket: Dann k&ouml;nnen Sie n&auml;mlich das ListView-Steuerelement verwenden und mit diesem die gew&uuml;nschte Drag and Drop-Funktion realisieren.","og_url":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:18:17+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/23cbcd5762b246cfbe767d38a54240d1","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Drag and Drop mit dem ListView-Steuerelement","datePublished":"2020-05-06T15:18:17+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/"},"wordCount":2216,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/23cbcd5762b246cfbe767d38a54240d1","articleSection":["2\/2006","2006","Ergonomie und Benutzeroberfl\u00e4che","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/","url":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/","name":"Drag and Drop mit dem ListView-Steuerelement - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/23cbcd5762b246cfbe767d38a54240d1","datePublished":"2020-05-06T15:18:17+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/23cbcd5762b246cfbe767d38a54240d1","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/23cbcd5762b246cfbe767d38a54240d1"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Drag_and_Drop_mit_dem_ListViewSteuerelement\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Drag and Drop mit dem ListView-Steuerelement"}]},{"@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\/55000334","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=55000334"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000334\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}