{"id":55000748,"date":"2010-12-01T00:00:00","date_gmt":"2020-05-22T22:08:18","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=748"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"DatensatzSlider","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/","title":{"rendered":"Datensatz-Slider"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/b567f303c21c4bfea6fe2b71aec06b1c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Neulich &auml;rgerte ich mich mal wieder &uuml;ber die fehlende Ergonomie einer meiner Datenbanken. Dort bewege ich mich in einem Detailformular &ouml;fter mal ein paar hundert Datens&auml;tze vor oder zur&uuml;ck. Das geht entweder per Navigationsschaltfl&auml;chen (wenn der gesuchte Datensatz in der N&auml;he liegt) oder per Filter &uuml;ber die Datensatz-ID. Eine elegantere L&ouml;sung w&auml;re eine Art Datensatz-Bildlaufleiste, mit der man den Datensatzzeiger schneller vor- und zur&uuml;ckspringen lassen kann. Schauen wir also, ob sich das mit Access realisieren l&auml;sst.<\/b><\/p>\n<p>Der Datensatz-Slider soll nicht nur als Eingabe-Steuerelement dienen, sondern auch reagieren, wenn Sie die Position des Datensatzzeigers anderweitig ver&auml;ndern &#8211; also auch beim L&ouml;schen oder Hinzuf&uuml;gen von Datens&auml;tzen. Das Steuerelement soll etwa so wie in Bild 1 aussehen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_06\/DatensatzSlider-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Der Datensatz-Slider in einem Beispielformular<\/span><\/b><\/p>\n<p>Den Slider bauen Sie selbst zusammen, indem Sie ein Rechteck-Steuerelement als Hintergrund und eine Schaltfl&auml;che als Slider einsetzen. Die grafische Gestaltung bleibt Ihnen &uuml;berlassen &#8211; allein bez&uuml;glich der Breite des Hintergrund-Rechtecks gibt es keinen Spielraum: Der gibt genau vor, von wo bis wo der Benutzer den Slider bewegen kann.<\/p>\n<p><b>Mausbewegungen nutzen<\/b><\/p>\n<p>Als Erstes soll der Slider als Eingabe-Steuerelement dienen, also beim Bewegen die Position des Datensatzzeigers und somit den aktuell angezeigten Datensatz ver&auml;ndern. Dies erreichen Sie durch das Anklicken der Schaltfl&auml;che und durch anschlie&szlig;endes Bewegen des Mauszeigers bei gedr&uuml;ckter linker Maustaste. Dabei sind einige Regeln wichtig: Wenn der Mauszeiger nach dem ersten Anklicken &uuml;ber oder unter die Schaltfl&auml;che rutscht, soll diese einfach weiter nach links oder rechts bewegt werden k&ouml;nnen. Wenn die Schaltfl&auml;che ganz nach links verschoben wurde und der Benutzer den Mauszeiger weiter nach links bewegt, soll der Slider nat&uuml;rlich stehen bleiben. Erst wenn der Benutzer die Maus wieder nach rechts bewegt, soll sich der Slider mit nach rechts bewegen &#8211; allerdings erst, wenn der Mauszeiger sich wieder auf der gleichen Breite wie die Schaltfl&auml;che befindet. Das Gleiche gilt f&uuml;r die rechte Seite.<\/p>\n<p><b>Maus-Ereignisse<\/b><\/p>\n<p>Das Schaltfl&auml;chen-Steuerelement, das Sie hier als Slider verwenden werden, l&ouml;st drei Ereignisse aus, die wir hier gut gebrauchen k&ouml;nnen: <b>Bei Maustaste ab <\/b>reagiert auf das Bet&auml;tigen einer der Maustasten, <b>Bei Maustaste auf <\/b>wird ausgel&ouml;st, wenn die Maustaste wieder losgelassen wird.<\/p>\n<p>Dabei gilt: Das Anklicken der Maustaste muss auf dem Steuerelement erfolgen, das Loslassen kann an beliebiger Stelle geschehen. Wenn der Benutzer den Mauszeiger &uuml;ber der Schaltfl&auml;che bewegt, wird f&uuml;r jede Bewegung in einem bestimmten Intervall das Ereignis <b>Bei Mausbewegung <\/b>ausgel&ouml;st. Dabei liefert der Parameter X jeweils die X-Position des Mauszeigers vom linken Rand des Steuerelements.<\/p>\n<p><b>Schaltfl&auml;che verschieben<\/b><\/p>\n<p>Um die Schaltfl&auml;che bei gedr&uuml;ckter Maustaste zu verschieben, muss die Ereignisprozedur, die durch das Ereignis <b>Bei Mausbewegung <\/b>ausgel&ouml;st wird, zun&auml;chst erkennen, ob die linke Maustaste gerade heruntergedr&uuml;ckt ist. Ist dies der Fall, soll die Schaltfl&auml;che jeweils um die gleiche Entfernung nach links oder rechts bewegt werden, die der Mauszeiger soeben zur&uuml;ckgelegt hat. Die Schaltfl&auml;che folgt dem Mauszeiger also mit einer geringen zeitlichen Verz&ouml;gerung. Das gelingt im einfachsten Fall mit zwei einfachen Ereignisprozeduren. Die erste wird beim ersten Herunterdr&uuml;cken der Maustaste auf dem Slider ausgel&ouml;st und speichert die X-Koordinate, auf welcher der Benutzer die Taste gedr&uuml;ckt hat:<\/p>\n<pre>Private Sub cmdSlider_MouseDown(Button As  Integer, Shift As Integer, X As Single, Y As Single)\r\n    sngX = X\r\nEnd Sub<\/pre>\n<p>Die zweite wird beim Bewegen des Mauszeigers ausgel&ouml;st. Sie pr&uuml;ft, ob der Benutzer gerade die linke Maustaste herunterdr&uuml;ckt. In diesem Fall liefert der Parameter <b>Button <\/b>den Wert <b>1<\/b>. Ist das der Fall, stellt die Prozedur den Abstand des Sliders vom linken Formularrand auf den vorherigen Abstand plus der neuen Position minus der alten Position ein:<\/p>\n<pre>Private Sub cmdSlider_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)\r\n    If Button = 1 Then\r\n        cmdSlider.Left = cmdSlider.Left + X - sngX\r\n    End If\r\nEnd Sub<\/pre>\n<p>Auf diese Weise k&ouml;nnen Sie den Slider nach links und rechts bewegen. Die erste H&uuml;rde folgt allerdings sogleich: Der Slider l&auml;sst sich n&auml;mlich nicht durch den linken und den rechten Rand des Rechteck-Steuerelements aufhalten, das eigentlich als Begrenzung dienen sollte. Also bauen wir eine Bedingung ein, die den Slider nicht aus den vorgegebenen Grenzen herausl&auml;sst.<\/p>\n<p>Damit diese Bedingung funktioniert, muss sie bereits vor der &Uuml;bertragung der Bewegung des Mauszeigers auf den Slider pr&uuml;fen, ob der Slider sich &uuml;ber den linken oder rechten Rand des Rechteck-Steuerelements hinausbewegen w&uuml;rde.<\/p>\n<p>Dazu berechnen wir in einer einfachen Anweisung die n&auml;chste Position, speichern diese in einer Variablen und pr&uuml;fen dann, ob der linke oder rechte Rand &uuml;bertreten w&uuml;rde:<\/p>\n<pre>Dim sngNewX As Single\r\nIf Button = 1 Then\r\n    sngNewX = Me!cmdSlider.Left + X - sngX\r\n    If sngNewX &gt;= Me!rctFrame.Left And sngNewX + Me.cmdSlider.Width &lt;= _\r\n            Me.rctFrame.Left  + Me.rctFrame.Width Then\r\n        Me!cmdSlider.Left = Me!cmdSlider.Left + X - sngX\r\n    End If\r\nEnd If<\/pre>\n<p>Auf diese Weise erhalten wir bereits das gew&uuml;nschte Verhalten des Sliders: Wenn der Mauszeiger links oder rechts &uuml;ber den durch das Rechteck-Steuerelement festgelegten Bereich hinausf&auml;hrt, bleibt die Slider-Schaltfl&auml;che stehen. Und wir erhalten noch ein weiteres Verhalten gratis dazu: Wenn der Mauszeiger zum Slider zur&uuml;ckbewegt wird, bewegt er diesen bei gedr&uuml;ckter Maustaste einfach weiter, als ob nichts gewesen w&auml;re.<\/p>\n<p><b>Datensatzzeiger bewegen<\/b><\/p>\n<p>Nun sorgen Sie daf&uuml;r, dass der Datensatzzeiger analog zum Slider bewegt wird. Das hei&szlig;t, dass er auf der Position ganz links den ersten Datensatz markiert und auf der Position ganz rechts den letzten Datensatz. Dazu m&uuml;ssen Sie die Position des Sliders in eine entsprechende Position des Datensatzzeigers umrechnen. Dazu nehmen wir erstmal einige Vereinfachungen vor, die sich im Nachhinein auf die Performance auswirken werden: Die Prozedur soll nicht bei jedem Aufruf erneut die Position und Breite der beiden Steuerelemente <b>rctFrame <\/b>und <b>cmdSlider <\/b>ermitteln.<\/p>\n<p>Daher speichern wir alle fixen Werte beim &Ouml;ffnen des Formulars in entsprechenden Variablen. Deren Deklaration sieht so aus:<\/p>\n<pre>Dim sngFrameWidth As Single\r\nDim sngSliderWidth As Single\r\nDim sngFrameLeft As Single\r\nDim sngRange As Single<\/pre>\n<p>Diese Variablen werden beim &Ouml;ffnen des Formulars wie folgt gef&uuml;llt:<\/p>\n<pre>Private Sub Form_Open(Cancel As Integer)\r\n    sngFrameWidth = Me!rctFrame.Width\r\n    sngSliderWidth = Me!cmdSlider.Width\r\n    sngFrameLeft = Me!rctFrame.Left\r\n    sngRange = sngFrameWidth - sngSliderWidth\r\nEnd Sub<\/pre>\n<p>In die Prozedur, die beim Bewegen der Maus ausgel&ouml;st wird, f&uuml;gen wir als ersten Ansatz die folgende Zeile ein:<\/p>\n<pre>Me.Recordset.AbsolutePosition = Me.Recordset.RecordCount * (Me!cmdSlider.Left - sngFrameLeft) \/ (sngRange)<\/pre>\n<p>Diese ermittelt &uuml;ber die <b>RecordCount<\/b>-Eigenschaft des <b>Recordset<\/b>-Objekts des Formulars die Datensatzanzahl und multipliziert diese anschlie&szlig;end mit einem Faktor, welcher der Position des Sliders innerhalb des Rechtecks entspricht. Diese ermitteln wir aus dem Quotienten der tats&auml;chlichen Position (Abstand Slider vom linken Rand minus Abstand Rechteck vom linken Rand) und der Breite des Bereichs, in dem man den Slider bewegen kann (Breite des Rechtecks minus Breite des Sliders &#8211; wird bereits beim &Ouml;ffnen des Formulars berechnet und in <b>sngRange <\/b>gespeichert).<\/p>\n<p>Damit landet der Datensatzzeiger aber bei gr&ouml;&szlig;eren Datenmengen nicht zuverl&auml;ssig auf dem ersten und letzten Datensatz. Dies realisieren wir im <b>Else<\/b>-Teil der <b>If&#8230;Then<\/b>-Bedingung, die pr&uuml;ft, ob sich der Slider innerhalb des Rechtecks befindet. Eine weitere <b>If&#8230;Then<\/b>-Bedingung ermittelt, ob der Slider links oder rechts herausrutschen w&uuml;rde, und stellt die Eigenschaft <b>AbsolutePosition <\/b>des <b>Recordset<\/b>-Objekts entsprechend auf den ersten beziehungsweise letzten Datensatz ein. Da <b>AbsolutePosition <\/b>f&uuml;r den ersten Datensatz den Index <b>0 <\/b>vergibt, verwendet die Prozedur entsprechend die Werte <b>0 <\/b>und <b>Me.Recordset.RecordCount -1<\/b>. Die Ereignisprozedur <b>cmdSlider_MouseMove <\/b>sieht nun wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-19-anchor\">Listing 1<\/a><\/span> aus.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Diese Prozedur stellt den Datensatzzeiger auf die dem Slider entsprechende Position.<\/p>\n<pre>Private Sub cmdSlider_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)\r\n    Dim sngNewX As Single\r\n    If Button = 1 Then\r\n        sngNewX = Me!cmdSlider.Left + X - sngX\r\n        If sngNewX &gt;= sngFrameLeft And sngNewX + sngSliderWidth &lt;= sngFrameLeft + sngFrameWidth Then\r\n            Me!cmdSlider.Left = Me!cmdSlider.Left + X - sngX\r\n            Me.Recordset.AbsolutePosition = _\r\n            Me.Recordset.RecordCount * (Me!cmdSlider.Left - sngFrameLeft) \/ (sngRange)\r\n        Else\r\n            If sngNewX &lt; sngFrameLeft Then\r\n                Me.Recordset.AbsolutePosition = 0\r\n            Else\r\n                Me.Recordset.AbsolutePosition = Me.Recordset.RecordCount - 1\r\n            End If\r\n        End If\r\n    End If\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p>Der Slider kann, wenn Sie diesen zu schnell verschieben, h&auml;ngen bleiben.<\/p>\n<p><b>Slider bei manuellem Datensatzwechsel verschieben<\/b><\/p>\n<p>Wenn der Benutzer den Datensatz &uuml;ber die Navigationsschaltfl&auml;chen verschiebt, soll die Position des Sliders entsprechend angepasst werden. Der Wechsel des Datensatzes l&ouml;st immer das Ereignis <b>Beim Anzeigen <\/b>des Formulars aus. Daf&uuml;r legen Sie die Ereignisprozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-21-anchor\">Listing 2<\/a><\/span> an. Diese addiert zum linken Rand des Rahmens den der aktuellen Position entsprechenden prozentualen Anteil des vom Slider befahrbaren Bereichs und weist diesen Wert der Eigenschaft <b>Left <\/b>des <b>Slider<\/b>-Steuerelements zu.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Einstellen der Slider-Position anhand der Position des Datensatzzeigers<\/p>\n<pre>Private Sub Form_Current()\r\n    Me!cmdSlider.Left = sngFrameLeft + Me.Recordset.AbsolutePosition \/ Me.Recordset.RecordCount * (sngRange)\r\nEnd Sub<\/pre>\n<p><b>Hinzuf&uuml;gen neuer Datens&auml;tze<\/b><\/p>\n<p>Die Technik funktioniert leider noch nicht, wenn der Benutzer einen neuen Datensatz zum Formular hinzuf&uuml;gt. Das liegt daran, dass sich der Wert der Eigenschaft <b>AbsolutePosition <\/b>beim Springen zu einem neuen, leeren Datensatz nicht &auml;ndert. Wenn das Formular also 100 Datens&auml;tze anzeigt, der Datensatzzeiger auf dem letzten Datensatz steht und Sie zehn weitere Datens&auml;tze hinzuf&uuml;gen, ohne auf einen der bestehenden Datens&auml;tze zu wechseln, bleibt der Datensatzzeiger bei 100 stehen. Bei gro&szlig;en Datenmengen f&auml;llt dies nicht auf und die Gelegenheiten, bei denen man manuell eine relevante Menge Datens&auml;tze hinzuf&uuml;gt, sollten &uuml;berschaubar sein.<\/p>\n<p>Bei kleinen Datenmengen f&auml;llt dies jedoch gleich auf, weil sich der Slider immer weiter nach links bewegt, obwohl der Datensatzzeiger doch auf dem jeweils letzten Datensatz stehen sollte. Dies ist jedoch kein Problem: Wir wissen, dass der neue Datensatz erstmal der letzte ist, also k&ouml;nnen wir den Slider in diesem Fall einfach ganz nach rechts schieben. Dies erm&ouml;glichen eine Pr&uuml;fung der Eigenschaft <b>NewRecord <\/b>und die entsprechende Reaktion wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-22-anchor\">Listing 3<\/a><\/span>.<\/p>\n<p class=\"listingueberschrift\">Listing 3: Positionseinstellung, nun auch f&uuml;r neue Datens&auml;tze<\/p>\n<pre>Private Sub Form_Current()\r\n    If Not Me.NewRecord Then\r\n        Me!cmdSlider.Left = sngFrameLeft + Me.Recordset.AbsolutePosition \/ Me.Recordset.RecordCount * (sngRange)\r\n    Else\r\n        Me!cmdSlider.Left = sngFrameLeft + sngRange\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>L&ouml;schen von Datens&auml;tzen<\/b><\/p>\n<p>Wie wirkt sich das L&ouml;schen von Datens&auml;tzen auf die Position aus Der Versuch liefert gleich Fehler <b>3167<\/b>, <b>Datensatz ist gel&ouml;scht<\/b>. Dieser tritt in der Ereignisprozedur <b>Form_Current <\/b>beim Versuch auf, nach dem L&ouml;schen des Datensatzes auf die Eigenschaft <b>AbsolutePosition <\/b>zuzugreifen.<\/p>\n<p>Dies birgt ein kleines Dilemma: Wenn die Prozedur nicht auf den Wert von <b>AbsolutePosition <\/b>zugreifen kann, erschwert dies die Einstellung der Slider-Position. Allerdings ist das auch nicht so schlimm: Die Slider-Position ist sicher nicht kriegsentscheidend, wenn der Benutzer gerade den gew&uuml;nschten Datensatz vor sich hat, und falls nicht, wird der Slider ja ohnehin gleich wieder vom Benutzer verschoben oder durch eine manuelle &auml;nderung der <b>AbsolutePosition <\/b>richtig positioniert.<\/p>\n<p>Wir &uuml;bergehen diesen Fehler also einfach durch eine entsprechende Fehlerbehandlung.<\/p>\n<p><b>Slider-Steuerung ohne Maus<\/b><\/p>\n<p>Sch&ouml;n w&auml;re es auch, wenn wir den Slider statt mit der Maus auch mit der Tastatur steuern k&ouml;nnten. Genau genommen sollen nur die <b>Nach links<\/b>&#8211; und die <b>Nach rechts<\/b>-Taste zum Einsatz kommen, um den aktivierten Slider nach links oder rechts bewegen zu k&ouml;nnen.<\/p>\n<p>Dies soll entweder Datensatz f&uuml;r Datensatz geschehen oder bei gedr&uuml;ckter Taste auch f&uuml;r mehrere Datens&auml;tze &#8211; je nachdem, wie lange der Benutzer die Taste gedr&uuml;ckt h&auml;lt. Dazu muss der Slider nat&uuml;rlich den Fokus besitzen.<\/p>\n<p>Wir verwenden die <b>Bei Taste ab<\/b>-Ereignisprozedur, denn es soll ja bereits etwas passieren, wenn der Benutzer die Taste herunterdr&uuml;ckt. Die ben&ouml;tigte Ereignisprozedur sieht wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-27-anchor\">Listing 4<\/a><\/span> aus. Die Prozedur pr&uuml;ft zun&auml;chst innerhalb einer <b>Select Case<\/b>-Bedingung, ob der Benutzer die <b>Nach links<\/b>&#8211; oder die <b>Nach rechts<\/b>-Taste gedr&uuml;ckt hat. Der Wert <b>39 <\/b>entspricht der <b>Nach rechts<\/b>-Taste. Wenn das Formular gerade keinen neuen Datensatz anzeigt, weist die Prozedur der Variablen <b>intDirection<\/b> den Wert <b>1 <\/b>zu, was bedeutet, dass der Datensatzzeiger um eins nach rechts verschoben werden soll. <\/p>\n<p class=\"listingueberschrift\">Listing 4: Einstellen der Slider-Position beim Herunterdr&uuml;cken einer der Cursor-Tasten<\/p>\n<pre>Private Sub cmdSlider_KeyDown(KeyCode As Integer, Shift As Integer)\r\n    Dim intDirection As Integer\r\n    Select Case KeyCode\r\n        Case 39 ''rechts\r\n            If Not Me.NewRecord Then\r\n                intDirection = 1\r\n            End If\r\n        Case 37\r\n            If Me.Recordset.AbsolutePosition &gt; 0 Then\r\n                intDirection = -1\r\n            End If\r\n    End Select\r\n    If Not intDirection = 0 Then\r\n        If Not Me.NewRecord Then\r\n            If Not (Me.Recordset.AbsolutePosition + intDirection = Me.Recordset.RecordCount) Then\r\n                Me.Recordset.AbsolutePosition = Me.Recordset.AbsolutePosition + intDirection\r\n            Else\r\n                Me.Recordset.AddNew\r\n            End If\r\n        Else\r\n            Me.Recordset.AbsolutePosition = Me.Recordset.RecordCount\r\n        End If\r\n        KeyCode = 0\r\n    End If\r\nEnd Sub<\/pre>\n<p>In die andere Richtung geht es, wenn der <b>KeyCode <\/b>den Wert <b>37 <\/b>liefert und die absolute Position des Datensatzzeigers noch gr&ouml;&szlig;er als <b>0 <\/b>ist. Der Wert von <b>intDirection <\/b>wird dann auf <b>-1 <\/b>eingestellt.<\/p>\n<p>Der Rest der Prozedur wird nur ausgef&uuml;hrt, wenn die <b>Select Case<\/b>-Bedingung die Variable <b>intDirection <\/b>entweder mit dem Wert <b>1 <\/b>oder <b>-1 <\/b>gef&uuml;llt hat. Dort wird wiederum gepr&uuml;ft, ob der Datensatzzeiger gerade auf einen neuen oder auf einen vorhandenen Datensatz zeigt.<\/p>\n<p>Handelt es sich um einen neuen Datensatz, kann aufgrund der vorherigen Bedingung nur die <b>Nach links<\/b>-Taste gedr&uuml;ckt worden sein. Also stellt die Prozedur den Datensatzzeiger wieder auf den letzten vorhandenen Datensatz ein.<\/p>\n<p>Anderenfalls pr&uuml;ft die Routine noch, ob die neue Position des Datensatzzeigers plus dem Wert von <b>intDirection <\/b>gr&ouml;&szlig;er als die Anzahl der Datens&auml;tze w&auml;re. Falls ja, steht der Datensatzzeiger auf dem letzten vorhandenen Datensatz und wird nun auf einen neuen Datensatz verschoben (<b>Me.Recordset.AddNew<\/b>). Anderenfalls stellt die Routine <b>AbsolutePosition <\/b>einfach auf den vorherigen Wert plus <b>intDirection <\/b>ein. Dabei spielt es keine Rolle, ob <b>intDirection <\/b>den Wert <b>1 <\/b>oder <b>-1 <\/b>enth&auml;lt.<\/p>\n<p><b>Dauerfeuer<\/b><\/p>\n<p>Bei Formularen mit vielen Datens&auml;tzen kann das Scrollen durch diese gar nicht schnell genug gehen. Durch Verschieben des Sliders gelingt dies recht gut, aber wenn Sie gerade mit der Slider-Navigation &uuml;ber die <b>Nach links<\/b>&#8211; und die <b>Nach rechts<\/b>-Schaltfl&auml;chen begonnen haben, wird es Ihnen beim Scrollen durch ein paar hundert Datens&auml;tze vermutlich schnell recht langweilig.<\/p>\n<p>Theoretisch w&auml;re es m&ouml;glich, eine Funktion zu implementieren, die bei l&auml;ngerem Dr&uuml;cken der <b>Nach links<\/b>&#8211; oder der <b>Nach rechts<\/b>-Schaltfl&auml;che stetig die Anzahl der gleichzeitig &uuml;bersprungenen Datens&auml;tze erh&ouml;ht. Der dazu ben&ouml;tigte Z&auml;hler m&uuml;sste jedoch wieder zur&uuml;ckgesetzt werden, wenn der Benutzer die Taste losl&auml;sst &#8211; sonst w&uuml;rde gleich beim n&auml;chsten Bet&auml;tigen der entsprechenden Taste mit dem beschleunigten Scrolling fortgefahren. Allerdings funktioniert die dazu ben&ouml;tigte Ereignisprozedur <b>Bei Maustaste auf <\/b>nicht zusammen mit den Cursor-Tasten. Wir werden also auf dieses Feature verzichten.<\/p>\n<p><b>Steuerelement per Unterformular<\/b><\/p>\n<p>M&ouml;glicherweise m&ouml;chten Sie diese L&ouml;sung nicht nur in einem, sondern in mehreren Formularen einer Anwendung einsetzen. F&uuml;r diesen Fall fassen wir die beiden Steuerelemente und die durch die Schaltfl&auml;che ausgel&ouml;sten Ereignisse in einem eigenen Formular zusammen, das Sie dann in andere Formulare einbauen k&ouml;nnen.<\/p>\n<p>Dazu erstellen Sie zun&auml;chst ein neues Formular und kopieren die beiden Steuerelemente, also <b>cmdSlider <\/b>und <b>rctFrame<\/b>, in das neue Formular. Verkleinern Sie das Formular so, dass es gerade diese beiden Steuerelemente anzeigt. Stellen Sie seine Eigenschaften <b>Navigationsschaltfl&auml;chen<\/b>, <b>Datensatzmarkierer<\/b>, <b>Bildlaufleisten <\/b>und <b>Trennlinien <\/b>auf <b>Nein <\/b>ein. Speichern Sie das Formular unter dem Namen <b>sfmSlider<\/b>. Den Entwurf des Formulars finden Sie in Bild 2.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_06\/DatensatzSlider-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Entwurf des Formulars sfmSlider<\/span><\/b><\/p>\n<p>Im Code des Klassenmoduls zu diesem Formular m&uuml;ssen Sie zun&auml;chst eine neue Variable deklarieren, die das &uuml;bergeordnete Formular referenziert:<\/p>\n<pre>Dim WithEvents frmParent As Form<\/pre>\n<p>Dann passen Sie die Prozedur, die beim &Ouml;ffnen des Unterformulars ausgel&ouml;st wird, wie folgt an:<\/p>\n<pre>Private Sub Form_Open(Cancel As Integer)\r\n    Set frmParent = Me.Parent\r\n    frmParent.OnCurrent = &quot;[Event Procedure]&quot;\r\n    Me.InsideWidth = Me.Parent!sfmSlider.Width\r\n    Me!rctFrame.Top = 50\r\n    Me!rctFrame.Height = Me.InsideHeight - 100\r\n    Me!rctFrame.Left = 50\r\n    Me!rctFrame.Width = Me.InsideWidth - 100\r\n    sngFrameWidth = Me!rctFrame.Width\r\n    sngSliderWidth = Me!cmdSlider.Width\r\n    sngFrameLeft = Me!rctFrame.Left\r\n    sngRange = sngFrameWidth - sngSliderWidth\r\nEnd Sub<\/pre>\n<p>Der wichtigste Punkt ist hier, dass Sie die zuvor deklarierte Variable <b>frmParent <\/b>mit einem Verweis auf das &uuml;bergeordnete Formular f&uuml;llen. F&uuml;r diese Variable stellen Sie au&szlig;erdem noch die Eigenschaft <b>OnCurrent <\/b>auf den Wert <b>[Event Procedure] <\/b>ein.<\/p>\n<p>Dies bewirkt, dass Sie im Klassenmodul des Unterformulars eine Ereignisprozedur f&uuml;r die Objektvariable <b>frmParent <\/b>anlegen k&ouml;nnen, die durch das entsprechende Ereignis im referenzierten Formular ausgel&ouml;st wird.<\/p>\n<p>In diesem Fall soll der Wechsel zu einem anderen Datensatz im Hauptformular dazu f&uuml;hren, dass eine Prozedur namens <b>frmParent_Current <\/b>im Klassenmodul des Unterformulars ausgel&ouml;st wird. Dieses f&uuml;hrt genau die gleichen Schritte durch wie die <b>Form_Current<\/b>-Ereignisprozedur der ersten Version der L&ouml;sung.<\/p>\n<p>Warum so viel Aufwand mit dem Ausf&uuml;hren des Ereignisses vom Hauptformular im Klassenmodul des Unterformulars Ganz einfach: Wir m&ouml;chten den kompletten Code, der zum Steuern des Sliders n&ouml;tig ist, im Unterformular unterbringen, damit Sie dieses einfach nur in das Zielformular einf&uuml;gen m&uuml;ssen.<\/p>\n<p>Abgesehen vom Prozedurnamen und von der Tatsache, dass die Prozedur die Datensatzgruppe des Hauptformulars nun nicht mehr mit <b>Me.Recordset<\/b>, sondern mit <b>frmParent.Recordset <\/b>referenziert, entspricht die Prozedur der aus dem vorigen Beispiel.<\/p>\n<p>Die Prozedur <b>Form_Open <\/b>des Formulars <b>sfmSlider <\/b>enth&auml;lt noch weitere zus&auml;tzliche Zeilen, die alle noch f&uuml;r ein wenig mehr Flexibilit&auml;t sorgen sollen. Diese stellt zun&auml;chst die Eigenschaft <b>InsideWidth <\/b>des Unterformulars auf die Breite des Unterformular-Steuerelements <b>sfmSlider <\/b>des Hauptformulars ein. Dies dient dazu, die Breite des Sliders variabel zu halten: Egal, wie breit Sie das Unterformular-Steuerelement im betroffenen Formular ziehen, der Slider-Rahmen passt sich entsprechend an.<\/p>\n<pre>Me.InsideWidth = Me.Parent!sfmSlider.Width<\/pre>\n<p>Die weiteren vier Anweisungen sorgen daf&uuml;r, dass das Steuerelement <b>rctFrame <\/b>immer einen gewissen Abstand vom Rand des Unterformulars hat. Das ist deshalb wichtig, weil der Rand dieses Rechteck-Steuerelements verschwindet, wenn dieser zu nah am Rand des Unterformular-Steuerelements liegt:<\/p>\n<pre>Me!rctFrame.Top = 50\r\nMe!rctFrame.Height = Me.InsideHeight - 100\r\nMe!rctFrame.Left = 50\r\nMe!rctFrame.Width = Me.InsideWidth - 100<\/pre>\n<p>Dem Test steht nun nichts mehr im Wege: W&auml;hlen Sie ein beliebiges Formular aus, das Daten in der Detailansicht anzeigt, und f&uuml;gen Sie das Formular <b>sfmSlider <\/b>als Unterformular hinzu (etwa wie in Bild 3 &#8211; allerdings m&uuml;ssen Sie die H&ouml;he entsprechend einstellen und gegebenenfalls den Rahmen des Unterformular-Steuerelements an den Hintergrund des Formulars anpassen).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_06\/DatensatzSlider-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Formular mit dem Slider im Unterformular<\/span><\/b><\/p>\n<p>Achten Sie darauf, dass das Unterformular-Steuerelement den gleichen Namen, also <b>sfmSlider<\/b>, enth&auml;lt. Anderenfalls gelingt die Gr&ouml;&szlig;enanpassung des Rechtecks <b>rctFrame <\/b>nicht.<\/p>\n<p><b>Einsatz in eigenen Datenbanken<\/b><\/p>\n<p>F&uuml;r den Einbau des Sliders in eigene Datenbanken brauchen Sie nur das Formular <b>sfmSlider <\/b>dort hineinzukopieren und dieses dann als Unterformular es entsprechenden Zielformulars anzulegen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DatensatzSlider.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{BBBDFDEC-30AD-4C69-9F25-7AD3AB0C03B6}\/aiu_748.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neulich &auml;rgerte ich mich mal wieder &uuml;ber die fehlende Ergonomie einer meiner Datenbanken. Dort bewege ich mich in einem Detailformular &ouml;fter mal ein paar hundert Datens&auml;tze vor oder zur&uuml;ck. Das geht entweder per Navigationsschaltfl&auml;chen (wenn der gesuchte Datensatz in der N&auml;he liegt) oder per Filter &uuml;ber die Datensatz-ID. Eine elegantere L&ouml;sung w&auml;re eine Art Datensatz-Bildlaufleiste, mit der man den Datensatzzeiger schneller vor- und zur&uuml;ckspringen lassen kann. Schauen wir also, ob sich das mit Access realisieren l&auml;sst.<\/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":[662010,66062010,44000023],"tags":[],"class_list":["post-55000748","post","type-post","status-publish","format-standard","hentry","category-662010","category-66062010","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>Datensatz-Slider - 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\/DatensatzSlider\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datensatz-Slider\" \/>\n<meta property=\"og:description\" content=\"Neulich &auml;rgerte ich mich mal wieder &uuml;ber die fehlende Ergonomie einer meiner Datenbanken. Dort bewege ich mich in einem Detailformular &ouml;fter mal ein paar hundert Datens&auml;tze vor oder zur&uuml;ck. Das geht entweder per Navigationsschaltfl&auml;chen (wenn der gesuchte Datensatz in der N&auml;he liegt) oder per Filter &uuml;ber die Datensatz-ID. Eine elegantere L&ouml;sung w&auml;re eine Art Datensatz-Bildlaufleiste, mit der man den Datensatzzeiger schneller vor- und zur&uuml;ckspringen lassen kann. Schauen wir also, ob sich das mit Access realisieren l&auml;sst.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:08:18+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/b567f303c21c4bfea6fe2b71aec06b1c\" \/>\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=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Datensatz-Slider\",\"datePublished\":\"2020-05-22T22:08:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/\"},\"wordCount\":2848,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/b567f303c21c4bfea6fe2b71aec06b1c\",\"articleSection\":[\"2010\",\"6\\\/2010\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/\",\"name\":\"Datensatz-Slider - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/b567f303c21c4bfea6fe2b71aec06b1c\",\"datePublished\":\"2020-05-22T22:08:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/b567f303c21c4bfea6fe2b71aec06b1c\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/b567f303c21c4bfea6fe2b71aec06b1c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DatensatzSlider\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Datensatz-Slider\"}]},{\"@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":"Datensatz-Slider - 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\/DatensatzSlider\/","og_locale":"de_DE","og_type":"article","og_title":"Datensatz-Slider","og_description":"Neulich &auml;rgerte ich mich mal wieder &uuml;ber die fehlende Ergonomie einer meiner Datenbanken. Dort bewege ich mich in einem Detailformular &ouml;fter mal ein paar hundert Datens&auml;tze vor oder zur&uuml;ck. Das geht entweder per Navigationsschaltfl&auml;chen (wenn der gesuchte Datensatz in der N&auml;he liegt) oder per Filter &uuml;ber die Datensatz-ID. Eine elegantere L&ouml;sung w&auml;re eine Art Datensatz-Bildlaufleiste, mit der man den Datensatzzeiger schneller vor- und zur&uuml;ckspringen lassen kann. Schauen wir also, ob sich das mit Access realisieren l&auml;sst.","og_url":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:08:18+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/b567f303c21c4bfea6fe2b71aec06b1c","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Datensatz-Slider","datePublished":"2020-05-22T22:08:18+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/"},"wordCount":2848,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/b567f303c21c4bfea6fe2b71aec06b1c","articleSection":["2010","6\/2010","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/DatensatzSlider\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/","url":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/","name":"Datensatz-Slider - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/b567f303c21c4bfea6fe2b71aec06b1c","datePublished":"2020-05-22T22:08:18+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/DatensatzSlider\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/b567f303c21c4bfea6fe2b71aec06b1c","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/b567f303c21c4bfea6fe2b71aec06b1c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/DatensatzSlider\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Datensatz-Slider"}]},{"@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\/55000748","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=55000748"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000748\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}