{"id":55001129,"date":"2018-06-01T00:00:00","date_gmt":"2020-05-13T21:19:25","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1129"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Reihenfolge_einfach_festlegen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/","title":{"rendered":"Reihenfolge einfach festlegen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/a40e6b76cf894cc38322048456cbb590\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn Sie Daten mit individueller Reihenfolge anlegen wollen, k&ouml;nnen Sie das mit sehr wenig Aufwand anstellen, indem Sie daf&uuml;r einfach ein Zahlenfeld anlegen. F&uuml;r dieses kann der Benutzer dann einen eigenen Wert festlegen, der zwischen dem zweier vorhandener Felder liegt und die Reihenfolge-Werte dann per Mausklick aktualisieren. Wie das genau aussieht und wie einfach die Programmierung hierf&uuml;r ist, lesen Sie im vorliegenden Beitrag.<\/b><\/p>\n<h2>Warum die Reihenfolge festlegen<\/h2>\n<p>Gr&uuml;nde, um die Reihenfolge von Datens&auml;tzen in einer Tabelle festzulegen, gibt es gen&uuml;gend. In unserem Beispiel der Tabelle <b>tblArtikel <\/b>gehen wir zum Beispiel davon aus, dass der Benutzer die Artikel in einer bestimmten Reihenfolge f&uuml;r einen Katalog ausgeben m&ouml;chte. <\/p>\n<h2>Feld zum Speichern der Reihenfolge hinzuf&uuml;gen<\/h2>\n<p>Um die Reihenfolge f&uuml;r Datens&auml;tze festzulegen, ben&ouml;tigen wir nat&uuml;rlich ein entsprechendes Feld. Dieses nennen wir <b>Position <\/b>und f&uuml;gen es einfach der betroffenen Tabelle, in diesem Fall <b>tblArtikel<\/b>, als Feld mit dem Datentyp <b>Zahl <\/b>hinzu (siehe Bild 1). Hier passen wir allerdings noch die Feldgr&ouml;&szlig;e auf <b>Single<\/b> an, damit wir auch Dezimalzahlen eingeben k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_001.png\" alt=\"Feld f&uuml;r das Einstellen der Reihenfolge\" width=\"549,6265\" height=\"455,9498\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Feld f&uuml;r das Einstellen der Reihenfolge<\/span><\/b><\/p>\n<h2>Haupt- und Unterformular<\/h2>\n<p>Die Daten wollen wie in einem Unterformular in der Datenblattansicht anzeigen. Dazu erstellen wir zun&auml;chst ein neues Unterformular und f&uuml;gen diesem eine Abfrage als Datenherkunft hinzu, welche alle Felder der Tabelle <b>tblArtikel<\/b> liefert, und zwar sortiert nach dem Feld <b>Position <\/b>(siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_002.png\" alt=\"Datenherkunft f&uuml;r das Unterformular\" width=\"499,6607\" height=\"384,5125\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Datenherkunft f&uuml;r das Unterformular<\/span><\/b><\/p>\n<p>Danach k&ouml;nnen wir dem Unterformular die Felder der Datenherkunft zuweisen, allerdings in einer ganz bestimmten Reihenfolge: Das Feld <b>Position <\/b>greifen wir zuerst aus der Feldliste heraus und f&uuml;gen es oben im Formularentwurf ein.<\/p>\n<p>Erst danach ziehen wir die &uuml;brigen Felder aus der Feldliste unterhalb des Feldes <b>Position <\/b>in das Zielformular (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_003.png\" alt=\"Hinzuf&uuml;gen der Felder zum Unterformular\" width=\"649,559\" height=\"456,641\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Hinzuf&uuml;gen der Felder zum Unterformular<\/span><\/b><\/p>\n<p>Dadurch werden die Felder in der Datenblattansicht gleich in der gew&uuml;nschten Reihenfolge angezeigt, n&auml;mlich mit dem Feld <b>Position <\/b>an erster Stelle.<\/p>\n<p>Legen Sie nun noch die Eigenschaft <b>Standardansicht <\/b>auf den Wert <b>Datenblatt <\/b>fest und speichern Sie das Formular unter dem Namen <b>sfmArtikelMitReihenfolge<\/b>. Schlie&szlig;en Sie das Formular anschlie&szlig;end.<\/p>\n<p>Danach erstellen Sie das Hauptformular und speichern es unter dem Namen <b>frmArtikelMitReihenfolge<\/b>. Ziehen Sie dann das Unterformular aus dem Navigationsbereich von Access in den Entwurf des neu angelegten Hauptformulars.<\/p>\n<p>Richten Sie das Unterformular so aus, dass das Ergebnis wie in Bild 4 aussieht. Nun k&ouml;nnen Sie noch die Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>des Unterformular-Steuerelements auf die Werte <b>Beide <\/b>einstellen, damit dieses seine Gr&ouml;&szlig;e gemeinsam mit dem Hauptformular &auml;ndert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_004.png\" alt=\"Unterformular zum Hauptformular hinzuf&uuml;gen\" width=\"549,6265\" height=\"406,1615\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Unterformular zum Hauptformular hinzuf&uuml;gen<\/span><\/b><\/p>\n<h2>Reihenfolge ohne Reihenfolge<\/h2>\n<p>Interessant ist, was geschieht, wenn Sie das Formular nun in der Formularansicht &ouml;ffnen, ohne zuvor die Werte des Feldes <b>Position<\/b> zu f&uuml;llen. Die Datens&auml;tze werden willk&uuml;rlich sortiert &#8211; und zwar noch nicht einmal nach dem Feld mit dem Prim&auml;rindex (<b>ArtikelID<\/b>). Das Ergebnis sieht dann zun&auml;chst wie in Bild 5 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_005.png\" alt=\"Ohne Werte liefert das Feld Position eine willk&uuml;rliche Sortierung.\" width=\"599,593\" height=\"406,5201\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Ohne Werte liefert das Feld Position eine willk&uuml;rliche Sortierung.<\/span><\/b><\/p>\n<h2>Schaltfl&auml;che zum Aktualisieren der Reihenfolge<\/h2>\n<p>Nun f&uuml;gen wir dem Hauptformular eine Schaltfl&auml;che hinzu, mit der wir die Reihenfolge der Datens&auml;tze aktualisieren k&ouml;nnen. Diese Schaltfl&auml;che nennen wir <b>cmdReihenfolgeAktualisieren<\/b>. <\/p>\n<p>F&uuml;r die das Ereignis <b>Beim Klicken <\/b>der Schaltfl&auml;che hinterlegen wir die Prozedur aus Listing 1. Diese Prozedur erstellt zun&auml;chst ein Recordset auf Basis der Tabelle <b>tblArtikel<\/b>, wobei diese die Datens&auml;tze aufsteigend nach den Feldern <b>Position <\/b>und <b>ArtikelID <\/b>sortiert. Danach durchl&auml;uft sie alle Datens&auml;tze der Tabelle in einer <b>Do While<\/b>-Schleife.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdReihenfolgeAktualisieren_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblArtikel ORDER BY Position, ArtikelID\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         rst.Edit\r\n         rst!Position = rst.AbsolutePosition + 1\r\n         rst.Update\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     rst.Close\r\n     <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n     Me!sfmArtikelMitReihenfolge.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Initiales Einstellen der Reihenfolge<\/span><\/b><\/p>\n<p>Hier versetzt sie den aktuellen Datensatz zun&auml;chst mit der <b>Edit<\/b>-Methode in den Bearbeitungszustand, stellt dann das Feld <b>Position <\/b>auf den Wert der Eigenschaft <b>AbsolutePosition <\/b>des Datensatzzeigers plus ein ein (<b>AbsolutePosition <\/b>ist 0-basiert) und speichert den Datensatz mit der <b>Update<\/b>-Methode. Danach werden die &uuml;brigen Datens&auml;tze in der <b>Do While<\/b>-Schleife auf die gleiche Weise bearbeitet. Die letzte Anweisung der Prozedur aktualisiert die im Unterformular angezeigten Daten, die dann in der soeben festgelegten Sortierung erscheinen. Da das Feld <b>Position <\/b>zuvor noch keine Werte aufwies, erfolgt die Sortierung in diesem Fall ausschlie&szlig;lich nach den Werten des Prim&auml;rschl&uuml;sselfeldes <b>ArtikelID<\/b>.<\/p>\n<h2>Benutzer gibt Reihenfolge vor<\/h2>\n<p>Nun soll der Benutzer eine einfache M&ouml;glichkeit erhalten, f&uuml;r einen neuen Datensatz direkt &uuml;ber das Feld <b>Position <\/b>an der gew&uuml;nschten Stelle einzuf&uuml;gen. Nun ist es unter Access ja nicht m&ouml;glich, neue Datens&auml;tze an beliebiger Stelle einzuf&uuml;gen, denn der neue, leere Datensatz ist immer der letzte ganz unten.<\/p>\n<p>Durch unsere Vorbereitung kann der Benutzer jedoch nun einen neuen Datensatz eingeben und f&uuml;r diesen durch einen geeigneten Wert f&uuml;r das Feld <b>Position <\/b>nach dem Speichern an der richtigen Stelle einsortieren. Im Beispiel aus Bild 6 geben wir beispielsweise den Wert <b>1,5 <\/b>f&uuml;r das Feld <b>Position <\/b>ein, weil wir den Datensatz zwischen dem ersten und zweiten vorhandenen Datensatz einsortieren wollen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_006.png\" alt=\"Der neue Datensatz mit Position 1,5 ...\" width=\"549,6265\" height=\"413,4191\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Der neue Datensatz mit Position 1,5 &#8230;<\/span><\/b><\/p>\n<p>Nach dem Speichern des Datensatzes und dem anschlie&szlig;enden Bet&auml;tigen der Schaltfl&auml;che <b>Reihenfolge aktualisieren <\/b>landet der Datensatz tats&auml;chlich an der gew&uuml;nschten Stelle (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_007.png\" alt=\"... landet zwischen dem vorherigen ersten und zweiten Datensatz.\" width=\"549,6265\" height=\"214,9901\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: &#8230; landet zwischen dem vorherigen ersten und zweiten Datensatz.<\/span><\/b><\/p>\n<h2>Reihenfolge ohne Schaltfl&auml;che<\/h2>\n<p>Nun wollen wir diese L&ouml;sung noch so verfeinern, dass der Benutzer den Datensatz nur noch speichern muss und der Datensatz dann automatisch an die gew&uuml;nschte Stelle verschoben wird. Dazu f&uuml;gen wir die Anweisungen, die sich bisher in der Prozedur <b>cmdReihenfolgeAktualisieren_Click <\/b>befanden, in der Ereignisprozedur ein, die durch das Ereignis <b>Nach Aktualisierung <\/b>des Unterformulars ausgel&ouml;st wird.<\/p>\n<p>Die Ereignisprozedur sieht dann wie in Listing 2 aus. Sie f&uuml;hrt grunds&auml;tzlich die gleichen Schritte durch wie die zuvor beschriebene Ereignisprozedur &#8211; mit dem Unterschied, dass sie gleich nach der Eingabe des neuen Datensatzes ausgef&uuml;hrt wird.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>lngArtikelID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblArtikel ORDER BY Position, ArtikelID\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         rst.Edit\r\n         rst!Position = rst.AbsolutePosition + 1\r\n         rst.Update\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     rst.Close\r\n     <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Einstellen der Reihenfolge nach dem Update eines Datensatzes<\/span><\/b><\/p>\n<p>Und es gibt noch einen weiteren Einsatzzweck: Sie k&ouml;nnen n&auml;mlich auch die Position vorhandener Datens&auml;tze durch Einstellen des Wertes f&uuml;r das Feld <b>Position <\/b>&auml;ndern. Wenn Sie etwa den Datensatz an der zweiten Position auf die dritte Position verschieben wollen, sodass der dritte Datensatz auf die zweite Position rutscht, geben Sie f&uuml;r das Feld <b>Position <\/b>des zweiten Datensatzes einfach einen Wert ein, der zwischen den Werten des Feldes <b>Position<\/b> f&uuml;r die Datens&auml;tze der dritten und der vierten Position liegt (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_008.png\" alt=\"Verschieben des Datensatzes von der zweiten Position auf die dritte Position\" width=\"549,6265\" height=\"226,0488\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Verschieben des Datensatzes von der zweiten Position auf die dritte Position<\/span><\/b><\/p>\n<h2>Position nach dem L&ouml;schen &auml;ndern<\/h2>\n<p>Nun kann es nat&uuml;rlich auch einmal vorkommen, dass Sie einen Datensatz aus der Liste entfernen m&ouml;chten.<\/p>\n<p>In diesem Fall sollen die Positionen nat&uuml;rlich direkt nach dem L&ouml;schen angepasst werden. Dazu ben&ouml;tigen wir entsprechende Ereignisprozeduren, die nach dem L&ouml;schen von Datens&auml;tzen ausgel&ouml;st werden.<\/p>\n<p>Im Beitrag <b>L&ouml;schen in Formularen: Ereignissej <\/b>(<b>www.access-im-unternehmen.de\/1128<\/b>) schauen wir uns im Detail an, welche Ereignisprozeduren am L&ouml;schen von Daten aus Formularen beteiligt sind und wie Sie diese f&uuml;r eigene Zwecke nutzen k&ouml;nnen. Hier wollen wir daf&uuml;r sorgen, dass nach dem L&ouml;schen eines oder mehrerer Datens&auml;tze ebenfalls die erneute Aktualisierung der Werte im Feld <b>Position <\/b>ausgel&ouml;st wird. Dazu ben&ouml;tigen wir ein paar Ereignisprozeduren im Unterformular.<\/p>\n<p>Wir wollen in jedem Fall ber&uuml;cksichtigen, dass der Benutzer auf dem Rechner die Einstellung der Access-Option <b>Best&auml;tigen|Datensatz&auml;nderungen <\/b>beeinflussen kann. Ist diese aktiviert, soll die Meldung auch angezeigt werden, falls nicht, soll diese nicht erscheinen.<\/p>\n<p>Wenn die Datensatz&auml;nderungen ohne Meldung angezeigt werden sollen, wird allerdings auch nicht das Ereignis <b>Nach L&ouml;schbest&auml;tigung <\/b>ausgel&ouml;st, in der wir genau die Anweisungen schreiben m&ouml;chten, die nach dem L&ouml;schen den Inhalt des Feldes <b>Status <\/b>f&uuml;r alle verbleibenden Datens&auml;tze aktualisieren wollen. Das pr&uuml;fen wir eingangs und schreiben das Ergebnis in die Variable <b>bolConfirmRecordChanges<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>bolConfirmRecordChanges<span style=\"color:blue;\"> As Boolean<\/span><\/pre>\n<p>Beim Laden des Unterformulars pr&uuml;fen wir den Wert der Option <b>Best&auml;tigen|Datensatz&auml;nderungen <\/b>und tragen diesen in <b>bolConfirmRecordChanges <\/b>ein. Au&szlig;erdem aktivieren wir die Option, wenn diese nicht aktiviert ist, denn wir wollen ja, dass das Ereignis <b>Nach L&ouml;schbest&auml;tigung <\/b>feuert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     bolConfirmRecordChanges =  GetOption(\"Confirm Record Changes\")\r\n     <span style=\"color:blue;\">If <\/span>bolConfirmRecordChanges = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         SetOption \"Confirm Record Changes\", <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Bevor wir das vergessen, legen wir die Prozedur f&uuml;r das Ereignis <b>Beim Entladen <\/b>an und stellen dort die Option <b>Best&auml;tigen|Datensatz&auml;nderungen <\/b>wieder auf den alten Wert aus der Variablen <b>bolConfirmRecordChanges <\/b>ein:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     SetOption \"Confirm Record Changes\",  bolConfirmRecordChanges\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dann k&uuml;mmern wir uns um die Anzeige eventueller Meldungen, die durch Datensatz&auml;nderungen und -l&ouml;schungen hervorgerufen werden. Wenn der Benutzer <b>Best&auml;tigen|Datensatz&auml;nderungen <\/b>auf seinem Rechner aktiviert hat, sollen die Meldungen erscheinen, sonst nicht. Wir haben an dieser Stelle jedenfalls in der Ereignisprozedur <b>Beim Laden <\/b>die Anzeige der Meldungen aktiviert. Damit diese nicht erscheint, wenn der Benutzer die Meldungen nicht sehen will, f&uuml;llen wir die Prozedur, die durch das Ereignis <b>Vor L&ouml;schbest&auml;tigung <\/b>ausgel&ouml;st wird, wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_BeforeDelConfirm(Cancel<span style=\"color:blue;\"> As Integer<\/span>,  Response<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span>bolConfirmRecordChanges = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         Response = acDataErrContinue\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur pr&uuml;ft anhand von <b>bolConfirmRecordChanges<\/b>, ob der Benutzer die Best&auml;tigung der Datensatz&auml;nderungen aktiviert hat.<\/p>\n<p>Falls nicht, sorgen wir mit <b>Response = acDataErrContinue <\/b>daf&uuml;r, dass diese auch nicht erscheint, obwohl wir die Anzeige der Meldungen eigentlich aktiviert haben.<\/p>\n<p>Nun kommt der interessante Teil &#8211; die Aktualisierung der Werte des Feldes <b>Position<\/b>. Da wir diesen Vorgang nun nicht mehr nur beim Hinzuf&uuml;gen und Aktualisieren eines Datensatzes, sondern auch beim L&ouml;schen ausl&ouml;sen wollen, nehmen wir die notwendigen Anweisungen zun&auml;chst aus der Ereignisprozedur <b>Form_AfterUpdate <\/b>heraus und tragen diese in eine eigene Prozedur ein (siehe Listing 3).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>PositionenAktualisieren()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>lngArtikelID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblArtikel ORDER BY Position, ArtikelID\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         rst.Edit\r\n         rst!Position = rst.AbsolutePosition + 1\r\n         rst.Update\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     rst.Close\r\n     <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n     Me.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Positionen aktualisieren in einer eigenen Prozedur<\/span><\/b><\/p>\n<p>Den ersten Aufruf dieser Prozedur m&uuml;ssen wir nun nat&uuml;rlich in die Ereignisprozedur <b>Form_AfterUpdate <\/b>eintragen, der wir die entsprechenden Zeilen entnommen haben:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     PositionenAktualisieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Au&szlig;erdem f&uuml;gen wir den Aufruf der Prozedur <b>PositionenAktualisieren <\/b>noch in die Ereignisprozedur <b>Form_AfterDelConfirm <\/b>ein:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterDelConfirm(Status<span style=\"color:blue;\"> As Integer<\/span>)\r\n     PositionenAktualisieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit haben wir nun ein rundes Paket, welches die Reihenfolge nicht nur beim Hinzuf&uuml;gen eines Datensatzes oder beim &auml;ndern des Feldes <b>Position <\/b>anpasst, sondern auch noch beim L&ouml;schen eines Datensatzes.<\/p>\n<h2>Mehrere Datens&auml;tze verschieben<\/h2>\n<p>Fehlt noch die M&ouml;glichkeit, gleich mehrere Datens&auml;tze gleichzeitig an die gew&uuml;nschte Stelle zu verschieben. Hier ergibt sich das Problem, dass wir zwar mehrere Datens&auml;tze markieren k&ouml;nnen, aber wenn wir dann auf das Feld <b>Position <\/b>eines der Datens&auml;tze klicken, hebt Access die Markierung wieder auf.<\/p>\n<p>Also f&uuml;gen wir dem Hauptformular eine Schaltfl&auml;che namens <b>cmdVerschieben <\/b>hinzu, welche eine <b>InputBox <\/b>anzeigt, &uuml;ber die der Benutzer die Zielposition eingeben kann. Anschlie&szlig;end soll die Ereignisprozedur, die durch die Schaltfl&auml;che aufgerufen wurde, die markierten Datens&auml;tze an der gew&uuml;nschten Stelle verschieben.<\/p>\n<p>Das Unterfangen ist allerdings nicht ganz so einfach. Wir k&ouml;nnen mit den beiden Eigenschaften <b>SelTop <\/b>und <b>SelHeight <\/b>ermitteln, welche Zeilen im Datenblatt der Benutzer markiert hat.<\/p>\n<p>Wenn wir dies allerdings in der Ereignisprozedur erledigen wollen, die durch die Schaltfl&auml;che <b>cmdVerschieben <\/b>ausgel&ouml;st wird, haben wir ein Problem: Sobald wir auf die Schaltfl&auml;che klicken, wird der Fokus n&auml;mlich vom Unterformular auf die Schaltfl&auml;che im Hauptformular verschoben und damit hebt Access auch die Markierung im Unterformular auf.<\/p>\n<p>Wir m&uuml;ssen also ein wenig tricksen. Dazu legen wir zwei Variablen im Kopf des Klassenmoduls des Hauptformulars, also in <b>Form_frmArtikelMitReihenfolge<\/b>, an:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>lngSelTop<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Dim <\/span>lngSelHeight<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Diese f&uuml;llen wir, wenn das Ereignis <b>Beim Verlassen <\/b>des Unterformulars ausgel&ouml;st wird. Zu diesem Zeitpunkt ist die Markierung noch vorhanden, wir k&ouml;nnen diese also wie folgt auslesen und in die beiden Variablen schreiben:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>sfmArtikelMitReihenfolge_Exit(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     lngSelTop = Me!sfmArtikelMitReihenfolge.Form.SelTop\r\n     lngSelHeight =  Me!sfmArtikelMitReihenfolge.Form.SelHeight\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit kommen wir zu der Prozedur aus Listing 4. Hier nutzen wir einige DAO-Techniken, um unser Vorhaben umzusetzen. Dabei ermitteln wir zun&auml;chst die Zielposition per <b>InputBox <\/b>und speichern diese in <b>sngPosition<\/b>. Dann &ouml;ffnen wir ein Recordset auf Basis der Tabelle <b>tblArtikel<\/b>. Diese durchlaufen wir nicht per <b>Do While<\/b>-Schleife, sondern nur die zu verschiebenden Datens&auml;tze in einer <b>For&#8230;Next<\/b>-Schleife &uuml;ber alle Werte vom Index des ersten markierten Artikels bis zum letzten.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVerschieben_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>sfm<span style=\"color:blue;\"> As <\/span>Form\r\n     <span style=\"color:blue;\">Dim <\/span>l<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>sngPosition<span style=\"color:blue;\"> As Single<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strPosition<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strPosition = InputBox(\"An welche Position sollen die markierten Datens&auml;tze verschoben werden\", _\r\n         \"Datens&auml;tze verschieben\")\r\n     <span style=\"color:blue;\">If <\/span>IsNumeric(<span style=\"color:blue;\">Replace<\/span>(strPosition, \".\", \",\"))<span style=\"color:blue;\"> Then<\/span>\r\n         sngPosition = CSng(strPosition)\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strPosition) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"''''\" & strPosition & \"'''' ist keine g&uuml;ltige Zahl.\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> sfm = Me!sfmArtikelMitReihenfolge.Form\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblArtikel ORDER BY Position, ArtikelID\", dbOpenDynaset)\r\n     For l = lngSelTop To lngSelTop + lngSelHeight - 1\r\n         rst.AbsolutePosition = l - 1\r\n         rst.Edit\r\n         rst!Position = sngPosition + (l - lngSelTop + 1) \/ 1000\r\n         rst.Update\r\n     <span style=\"color:blue;\">Next<\/span> l\r\n     rst.MoveFirst\r\n     rst.Sort = \"Position, ArtikelID\"\r\n     <span style=\"color:blue;\">Set<\/span> rst = rst.OpenRecordset\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         rst.Edit\r\n         rst!Position = rst.AbsolutePosition + 1\r\n         rst.Update\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     rst.Close\r\n     <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n     Me!sfmArtikelMitReihenfolge.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Einstellen der Reihenfolge f&uuml;r mehrere Datens&auml;tze gleichzeitig<\/span><\/b><\/p>\n<p>Dabei stellen wir den Wert des Feldes <b>Position <\/b>auf einen Wert ein, der dem Wert aus <b>sngPosition<\/b> plus einem Hundertstel der aktuellen Z&auml;hlervariablen <b>l <\/b>geteilt durch <b>1000 <\/b>erh&auml;lt. Wenn der Benutzer also beispielsweise als Position <b>1,1 <\/b>eingibt, erhalten zwei markierte Datens&auml;tze die Positionswerte <b>1,101 <\/b>und <b>1,102<\/b>.<\/p>\n<p>Dies ist nur der erste Teil. Danach nutzen wir eine relativ selten verwendete M&ouml;glichkeit von DAO, n&auml;mlich das Festlegen der Sortierkriterien f&uuml;r ein DAO-Recordset mit der <b>Sort<\/b>-Methode und der Angabe des Sortierausdrucks (hier <b>Position, ArtikelID<\/b>) und weisen das bestehende Recordset aus der Variablen <b>rst<\/b> erneut der Variablen <b>rst <\/b>zu (im Gegensatz zum herk&ouml;mmlichen &ouml;ffnen eines Recordsets ohne Angabe der Datenherkunft und Parametern wie <b>dbOpenDynaset<\/b>).<\/p>\n<p>Anschlie&szlig;end durchlaufen wir wie in den vorherigen Beispielen das komplette Recordset, das nach dem Inhalt des Feldes <b>Position <\/b>sortiert ist und beispielsweise Werte wie <b>1<\/b>, <b>1,101<\/b>, <b>1,102<\/b>, <b>2<\/b>, <b>3<\/b>, &#8230; enth&auml;lt. Dabei stellen wir den Inhalt des Feldes <b>Position <\/b>wieder auf ganze Zahlen ein, in diesem Fall also <b>1<\/b>, <b>2<\/b>, <b>3<\/b>, <b>4<\/b>, <b>5<\/b> &#8230;<\/p>\n<p>Dieser Teil des Beispiels sieht dann in Aktion wie in Bild 9 aus. Hier sehen Sie eine Bildmontage, denn nat&uuml;rlich ist die Markierung der beiden Datens&auml;tze bereits aufgehoben, wenn die <b>InputBox <\/b>erscheint.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1129_009.png\" alt=\"Verschieben mehrerer Datens&auml;tze gleichzeitig\" width=\"649,559\" height=\"445,4984\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Verschieben mehrerer Datens&auml;tze gleichzeitig<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Die hier vorgestellte Methode zum Sortieren von Daten nach individuellen, nicht durch die Feldinhalte abgebildeten Kriterien ist nicht unbedingt die ergonomischste. Da gibt es wesentlich benutzerfreundlichere Methoden wie beispielsweise das Markieren des zu verschiebenden Datensatzes und das Verschieben mit entsprechenden Schaltfl&auml;chen.<\/p>\n<p>Oder, als beste Variante, das Verschieben per Drag and Drop. Das Verschieben mit Schaltfl&auml;chen wie <b>Ganz nach oben<\/b>, <b>Nach oben<\/b>, <b>Nach unten <\/b>oder <b>Ganz nach unten <\/b>ist jedoch auch m&uuml;hselig, da man dann durchaus einige Mausklicks ben&ouml;tigt, um ans Ziel zu gelangen. Das Drag and Drop wird in der Datenblattansicht von Access nicht unterst&uuml;tzt. Daf&uuml;r m&uuml;sste man etwa das <b>ListView<\/b>-Steuerelement heranziehen, was aber seinerseits nicht die M&ouml;glichkeiten der Datenblattansicht zum Bearbeiten der Daten liefert.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>EinfacheReihenfolge.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/887E88B8-9AF4-44B5-B12F-BD6C6B71FC9D\/aiu_1129.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie Daten mit individueller Reihenfolge anlegen wollen, k&ouml;nnen Sie das mit sehr wenig Aufwand anstellen, indem Sie daf&uuml;r einfach ein Zahlenfeld anlegen. F&uuml;r dieses kann der Benutzer dann einen eigenen Wert festlegen, der zwischen dem zweier vorhandener Felder liegt und die Reihenfolge-Werte dann per Mausklick aktualisieren. Wie das genau aussieht und wie einfach die Programmierung hierf&uuml;r ist, lesen Sie im vorliegenden Beitrag.<\/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":[662018,66032018,44000023],"tags":[],"class_list":["post-55001129","post","type-post","status-publish","format-standard","hentry","category-662018","category-66032018","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Reihenfolge einfach festlegen - 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\/Reihenfolge_einfach_festlegen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reihenfolge einfach festlegen\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie Daten mit individueller Reihenfolge anlegen wollen, k&ouml;nnen Sie das mit sehr wenig Aufwand anstellen, indem Sie daf&uuml;r einfach ein Zahlenfeld anlegen. F&uuml;r dieses kann der Benutzer dann einen eigenen Wert festlegen, der zwischen dem zweier vorhandener Felder liegt und die Reihenfolge-Werte dann per Mausklick aktualisieren. Wie das genau aussieht und wie einfach die Programmierung hierf&uuml;r ist, lesen Sie im vorliegenden Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:19:25+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/a40e6b76cf894cc38322048456cbb590\" \/>\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=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Reihenfolge einfach festlegen\",\"datePublished\":\"2020-05-13T21:19:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/\"},\"wordCount\":2494,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/a40e6b76cf894cc38322048456cbb590\",\"articleSection\":[\"2018\",\"3\\\/2018\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/\",\"name\":\"Reihenfolge einfach festlegen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/a40e6b76cf894cc38322048456cbb590\",\"datePublished\":\"2020-05-13T21:19:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/a40e6b76cf894cc38322048456cbb590\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/a40e6b76cf894cc38322048456cbb590\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Reihenfolge_einfach_festlegen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reihenfolge einfach festlegen\"}]},{\"@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":"Reihenfolge einfach festlegen - 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\/Reihenfolge_einfach_festlegen\/","og_locale":"de_DE","og_type":"article","og_title":"Reihenfolge einfach festlegen","og_description":"Wenn Sie Daten mit individueller Reihenfolge anlegen wollen, k&ouml;nnen Sie das mit sehr wenig Aufwand anstellen, indem Sie daf&uuml;r einfach ein Zahlenfeld anlegen. F&uuml;r dieses kann der Benutzer dann einen eigenen Wert festlegen, der zwischen dem zweier vorhandener Felder liegt und die Reihenfolge-Werte dann per Mausklick aktualisieren. Wie das genau aussieht und wie einfach die Programmierung hierf&uuml;r ist, lesen Sie im vorliegenden Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:19:25+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/a40e6b76cf894cc38322048456cbb590","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Reihenfolge einfach festlegen","datePublished":"2020-05-13T21:19:25+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/"},"wordCount":2494,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/a40e6b76cf894cc38322048456cbb590","articleSection":["2018","3\/2018","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/","url":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/","name":"Reihenfolge einfach festlegen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/a40e6b76cf894cc38322048456cbb590","datePublished":"2020-05-13T21:19:25+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/a40e6b76cf894cc38322048456cbb590","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/a40e6b76cf894cc38322048456cbb590"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Reihenfolge_einfach_festlegen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Reihenfolge einfach festlegen"}]},{"@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\/55001129","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=55001129"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001129\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}