{"id":55001160,"date":"2018-12-01T00:00:00","date_gmt":"2020-05-13T21:12:49","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1160"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Neue_Datensaetze_oben_anfuegen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/","title":{"rendered":"Neue Datens&auml;tze oben anf&uuml;gen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/3ec8dd1544c54e58924d6bb9c309bdb5\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es scheint in Stein gemei&szlig;elt: Neue Datens&auml;tze werden unter Access immer unten, am Ende der Datensatzliste, angeh&auml;ngt. Das gilt sowohl f&uuml;r die Datenblattansicht als auch f&uuml;r die Endlosansicht. F&uuml;r uns kein Anlass, es nicht doch einmal auszuprobieren. Mit ein paar Tricks schaffen wir es schlie&szlig;lich, eine passable Datenblattansicht zu programmieren, die scheinbar das Anf&uuml;gen eines neuen Datensatzes in der obersten Zeile der Datenblattansicht erlaubt.<\/b><\/p>\n<p>Wenn Sie in der Datenblattansicht unter Access einen neuen Datensatz einf&uuml;gen m&ouml;chten, haben Sie nur eine M&ouml;glichkeit: Sie klicken in der Navigationsleiste auf die Schaltfl&auml;che f&uuml;r einen neuen Datensatz und f&uuml;gen den neuen Datensatz dann unten an (siehe Bild 1). Das gilt aber auch nur, wenn diese Leiste sichtbar ist &#8211; anderenfalls gelangen Sie nur durch Scrollen oder entsprechende Tastenkombinationen zum Ende der Liste. Oder Sie nutzen den Ribbon-Eintrag <b>Start|Datens&auml;tze|Neu<\/b>, um zu einem neuen, leeren Datensatz zu gelangen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_001.png\" alt=\"Datens&auml;tze werden unter Access unten angef&uuml;gt.\" width=\"499,6607\" height=\"261,054\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Datens&auml;tze werden unter Access unten angef&uuml;gt.<\/span><\/b><\/p>\n<p>Nun, wir wollen schauen, ob wir nicht doch einen Weg finden, den neuen, leeren Datensatz oben im Datenblatt anzuzeigen. Das w&auml;re zum Beispiel praktisch, wenn Sie ohnehin immer die neuesten Eintr&auml;ge oben anzeigen und dort auch neue Datens&auml;tze anlegen wollen.<\/p>\n<h2>Neuer Datensatz dank zweitem Unterformular<\/h2>\n<p>Wie aber k&ouml;nnen wir dies realisieren Ganz klar: Mit einem einzigen Unterformular in der Datenblatt-Ansicht bekommen wir dies nicht hin. Wir zauben im oberen Bereich unseres Hauptformulars ein zweites Unterformular mit der gleichen Datenherkunft hin, die auch das eigentliche Unterformular aufweist.<\/p>\n<p>Der Unterschied: Das obere Unterformular soll nur der Eingabe eines neuen Datensatzes dienen und sonst keine Datens&auml;tze anzeigen. Das untere Datenblatt soll im Gegenzug keine M&ouml;glichkeit mehr bieten, einen neuen Datensatz anzulegen.<\/p>\n<p>Soweit, so gut: Damit das obere Formular nur einen neuen, leeren Datensatz anzeigt, brauchen wir diesem lediglich einen Filter hinzuzuf&uuml;gen, der die Anzeige aller anderen Datens&auml;tze verhindert &#8211; also beispielsweise 1:2.<\/p>\n<p>Damit der neue, leere Datensatz am Ende des zweiten Unterformulars, das ansonsten alle Datens&auml;tze anzeigen soll, nicht mehr erscheint, stellen wir einfach die Eigenschaft <b>Anf&uuml;gen zulassen <\/b>auf den Wert <b>Nein <\/b>ein.<\/p>\n<p>Und dann kommt da nat&uuml;rlich noch ein geschicktes Arrangement der beiden Unterformulare, damit diese wie ein einziges Unterformular aussehen. Doch eins nach dem anderen!<\/p>\n<h2>Hauptformular erstellen<\/h2>\n<p>Das Hauptformular unserer Anwendung, die wieder auf die Tabellen der S&uuml;dsturm-Datenbank zugreift, soll <b>frmArtikel <\/b>hei&szlig;en. Legen Sie dieses an und lassen Sie es in der Entwurfsansicht ge&ouml;ffnet. Stellen Sie direkt die Eigenschaften <b>Datensatzmarkierer <\/b>und <b>Navigationsschaltfl&auml;chen <\/b>auf <b>Nein <\/b>und <b>Automatisch zentrieren <\/b>auf <b>Ja <\/b>ein.<\/p>\n<h2>Erstes Unterformular<\/h2>\n<p>Das erste Unterformular soll <b>sfmArtikelNeu <\/b>hei&szlig;en. Weisen Sie seiner Eigenschaft <b>Datenherkunft <\/b>die Tabelle <b>tblArtikel <\/b>zu. Stellen Sie au&szlig;erdem die Eigenschaft <b>Standardansicht <\/b>auf <b>Datenblatt <\/b>ein. Dann speichern und schlie&szlig;en Sie das Formular und ziehen es aus dem Navigationsbereich von Access in den Detailbereich des noch in der Entwurfsansicht ge&ouml;ffneten Hauptformulars (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_002.png\" alt=\"Einf&uuml;gen des ersten Unterformulars in das Hauptformular\" width=\"499,6607\" height=\"295,0299\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Einf&uuml;gen des ersten Unterformulars in das Hauptformular<\/span><\/b><\/p>\n<p>Dieses Formular wollen wir gleich ein wenig breiter gestalten, und zwar so, dass die Felder in der Datenblattansicht nicht die ganze Breite einnehmen und somit keine horizontale Bildlaufleiste angezeigt werden muss. Au&szlig;erdem k&ouml;nnen wir die H&ouml;he des Formulars auch gleich soweit reduzieren, dass diese lediglich die Spaltenk&ouml;pfe und die erste Zeile anzeigt. Das sieht dann etwa wie in Bild 3 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_003.png\" alt=\"Das Unterformular sollte breit genug sein, damit keine horizontale Bildlaufleiste eingeblendet werden muss.\" width=\"700\" height=\"107,6923\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Das Unterformular sollte breit genug sein, damit keine horizontale Bildlaufleiste eingeblendet werden muss.<\/span><\/b><\/p>\n<p>Die Navigationsleiste soll dieses Formular gar nicht anzeigen, daher stellen wir die Eigenschaft <b>Navigationsschaltfl&auml;chen <\/b>auf den Wert <b>Nein <\/b>ein &#8211; ebenso wie die Eigenschaft <b>Bildlaufleisten<\/b>. Dann k&ouml;nnen wir in die Formularansicht des Hauptformulars wechseln und die H&ouml;he des Unterformulars kontrollieren. Dieses sollte genau so hoch sein wie in Bild 4 abgebildet.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_004.png\" alt=\"Die H&ouml;he stellen wir so ein, dass soeben die Markierung der Linie unter dem neuen Datensatz sichtbar ist.\" width=\"700\" height=\"99,66891\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die H&ouml;he stellen wir so ein, dass soeben die Markierung der Linie unter dem neuen Datensatz sichtbar ist.<\/span><\/b><\/p>\n<p>Damit das Unterformular erst gar keine Datens&auml;tze anzeigt, sondern nur den leeren, neuen Datensatz, hinterlegen wir f&uuml;r die Ereigniseigenschaft <b>Beim Laden <\/b>die folgende Ereignisprozedur:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     Me!sfmArtikelNeu.Form.Filter = \"1=2\"\r\n     Me!sfmArtikelNeu.Form.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dadurch werden nur die Datens&auml;tze angezeigt, f&uuml;r welche die Bedingung <b>1=2 <\/b>gilt &#8211; also gar keiner.<\/p>\n<h2>Zweites Unterformular erstellen und einf&uuml;gen<\/h2>\n<p>Danach begeben wir uns an das zweite Unterformular, das wir <b>sfmArtikel <\/b>nennen. Es soll ebenfalls die Tabelle <b>tblArtikel <\/b>als Datenherkunft verwenden und seine Daten in der Datenblattansicht anzeigen. Dar&uuml;ber hinaus stellen wir seine Eigenschaft <b>Anf&uuml;gen zulassen <\/b>auf den Wert <b>Nein <\/b>ein. Wie weiter oben bereits beschrieben, soll die Zeile mit dem leeren, neuen Datensatz hier nicht nochmals auftauchen.<\/p>\n<p>Anschlie&szlig;end f&uuml;gen wir dieses Formular ebenfalls in das Hauptformular <b>frmArtikel <\/b>ein. Dieses bringen wir auf die gleiche Breite wie das Unterformular <b>sfmArtikelNeu <\/b>und eine beliebige H&ouml;he. Im Entwurf sehen die beiden Unterformulare nun wie in Bild 5 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_005.png\" alt=\"Hauptformular mit den beiden Unterformularen\" width=\"499,6607\" height=\"444,1428\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Hauptformular mit den beiden Unterformularen<\/span><\/b><\/p>\n<h2>Unterformulare &uuml;berlagern<\/h2>\n<p>Nun kommt der interessante Teil. Wenn wir uns die Unterformulare in der Formularansicht des Hauptformulars ansehen, erhalten wir die Ansicht aus Bild 6. Wir haben also im oberen Bereich das Unterformular <b>sfmArtikelNeu<\/b>, das nur den leeren, neuen Datensatz anzeigt und keine Navigationsschaltfl&auml;chen und im unteren Bereich das Unterformular <b>sfmArtikel<\/b>, das alle Datens&auml;tze und Navigationsschaltfl&auml;chen enth&auml;lt, aber keinen neuen, leeren Datensatz.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_006.png\" alt=\"Hauptformular mit den beiden Unterformularen in der Formularansicht\" width=\"599,593\" height=\"444,3683\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Hauptformular mit den beiden Unterformularen in der Formularansicht<\/span><\/b><\/p>\n<p>Was st&ouml;rt Nat&uuml;rlich die Spalten&uuml;berschriften des unteren Unterformulars. Wie &auml;ndern wir das In dem wir einfach das Unterformular <b>sfmArtikel <\/b>unter das Unterformular <b>sfmArtikelNeu <\/b>schieben. Die Sache hat einen kleinen Haken, denn da wir das Unterformular <b>sfmArtikelNeu <\/b>zuerst angelegt haben, liegt es in der Z-Reihenfolge unter dem Formular <b>sfmArtikel<\/b>. Das k&ouml;nnen wir aber leicht &auml;ndern, indem wir das Formular <b>sfmArtikelNeu <\/b>einmal ausschneiden (<b>Strg + X<\/b>) und es direkt wieder einf&uuml;gen (<b>Strg + V<\/b>).<\/p>\n<p>Dadurch verschieben wir es in der Z-Reihenfolge &uuml;ber das Formular <b>sfmArtikel<\/b>. Nun schieben wir das Formular <b>sfmArtikel <\/b>soweit nach oben, dass sich das Lineal der Entwurfsansicht unter die Bildlaufleiste von <b>sfmArtikelNeu <\/b>verschiebt (siehe Bild 7). In diesem Bild ist das Unterformular <b>sfmArtikelNeu <\/b>markiert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_007.png\" alt=\"Das Formular sfmArtikelNeu &uuml;berlappt nun das Formular frmArtikel\" width=\"549,6265\" height=\"196,7267\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Das Formular sfmArtikelNeu &uuml;berlappt nun das Formular frmArtikel<\/span><\/b><\/p>\n<h2>Erster Test<\/h2>\n<p>Wie sieht dies nun in der Formularansicht aus So gut wie perfekt, wie Bild 8 zeigt. Ganz oben wird der leere, neue Datensatz angezeigt, darunter befinden sich die vorhandenen Datens&auml;tze. Sind wir damit fertig Nein! Es warten noch eine Menge Aufgaben auf uns:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_008.png\" alt=\"Das Formular, das den neuen Datensatz scheinbar ganz oben anzeigt\" width=\"549,6265\" height=\"381,9943\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Das Formular, das den neuen Datensatz scheinbar ganz oben anzeigt<\/span><\/b><\/p>\n<ul>\n<li>Wenn ein neuer Datensatz angelegt wird, muss das Unterformular <b>sfmArtikel <\/b>aktualisiert werden.<\/li>\n<li>Wenn der Benutzer die &uuml;ber die Spaltenk&ouml;pfe des Formulars <b>sfmArtikelNeu <\/b>verf&uuml;gbaren Sortierungen und Filter nutzt, m&uuml;ssen diese auf die Daten des Unterformulars <b>sfmArtikel <\/b>&uuml;bertragen werden.<\/li>\n<li>Und es fallen bei der Bearbeitung dieser beiden Aufgaben bestimmt noch weitere Aufgaben auf &#8230;<\/li>\n<\/ul>\n<h2>Anlegen eines neuen Datensatzes<\/h2>\n<p>Wenn wir nun einen neuen Datensatz im Unterformular <b>sfmArtikelNeu <\/b>anlegen, soll dieser nach dem Speichern im Unterformular <b>sfmArtikel <\/b>angezeigt werden. Dazu m&uuml;ssen wir dieses nach dem Anf&uuml;gen eines neuen Datensatzes aktualisieren. Wir m&uuml;ssen also ein Ereignis im Unterformular <b>sfmArtikelNeu <\/b>abfangen und daraufhin eine Methode des Unterformulars <b>sfmArtikel <\/b>ausf&uuml;hren. Wie erledigen wir das am geschicktesten Und welches Ereignis wollen wir &uuml;berhaupt nutzen<\/p>\n<p><!--30percent--><\/p>\n<p>Doch schauen wir uns zun&auml;chst einmal an, was geschieht, wenn wir &uuml;berhaupt einen neuen Datensatz anlegen. Bei der Eingabe des ersten Zeichens oder auch schon vorher kann es geschehen, dass pl&ouml;tzlich die horizontale Bildlaufleiste des Unterformulars auftaucht und die Zeile zur Eingabe verdeckt. In diesem Fall haben Sie offensichtlich die beiden Unterformulare nicht breit genug gestaltet, sodass die Bildlaufleiste notwendig wird. Also verbreitern Sie nun zun&auml;chst die beiden Unterformulare so, dass alle Felder komfortabel Platz finden.<\/p>\n<p>Danach beginnen wir, einen neuen Datensatz anzulegen. Das gelingt auch zun&auml;chst wie gewohnt &#8211; der Datensatzmarkierer erh&auml;lt das Bearbeiten-Symbol und ein neuer Wert f&uuml;r das Feld <b>ArtikelID <\/b>wird angelegt (siehe Bild 9). Wenn wir die &uuml;brigen Felder f&uuml;llen und dann den Datensatz durch einen Klick auf den Datensatzmarkierer oder durch Verlassen der Zeile speichern, geschieht genau dies &#8211; der Datensatz wird gespeichert. Mehr passiert allerdings nicht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_009.png\" alt=\"Hinzuf&uuml;gen eines neuen Datensatzes\" width=\"599,593\" height=\"139,7878\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Hinzuf&uuml;gen eines neuen Datensatzes<\/span><\/b><\/p>\n<p>Der neue Datensatz bleibt in der Zeile stehen, die normalerweise zum Anlegen weiterer neuer Datens&auml;tze genutzt werden soll. Und der neue Datensatz erscheint auch nicht automatisch im unteren Unterformular <b>sfmArtikel<\/b>.<\/p>\n<p>Davon abgesehen k&ouml;nnen wir im Unterformular <b>sfmArtikelNeu <\/b>nun nach unten zum n&auml;chsten neuen Datensatz scrollen &#8211; immerhin.<\/p>\n<p>Wie bekommen wir es nun hin, dass erstens der neue Datensatz aus dem Unterformular <b>sfmArtikelNeu <\/b>verschwindet und dieser zweitens im Unterformular <b>sfmArtikel <\/b>erscheint Dazu verwenden wir eine Ereignisprozedur, die beim Speichern des neuen Datensatzes ausgel&ouml;st wird, n&auml;mlich <b>Nach Aktualisierung<\/b>.<\/p>\n<p>Diese k&ouml;nnten wir nun direkt im Unterformular <b>sfmArtikelNeu <\/b>ausl&ouml;sen und dann das Unterformular selbst per <b>Requery <\/b>und das Unterformular <b>sfmArtikel <\/b>&uuml;ber den Bezug <b>Me!Parent!sfmArtikel.Form <\/b>aktualisieren. Das gef&auml;llt uns stilistisch aber nicht, sodass wir die Ereignisprozedur im Klassenmodul des Hauptformulars implementieren.<\/p>\n<p>Dort legen wir zun&auml;chst zwei Objektvariablen f&uuml;r die beiden Unterformulare <b>sfmArtikelNeu <\/b>und <b>sfmArtikel <\/b>an:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents sfmNeu<span style=\"color:blue;\"> As <\/span>Form\r\n<span style=\"color:blue;\">Dim <\/span>WithEvents sfm<span style=\"color:blue;\"> As <\/span>Form<\/pre>\n<p>Diese statten wir mit dem Schl&uuml;sselwort <b>WithEvents <\/b>aus, damit wir Ereignisprozeduren f&uuml;r diese beiden Formulare hier in diesem Klassenmodul implementieren k&ouml;nnen.<\/p>\n<p>Die Ereignisprozedur, die durch das Ausl&ouml;sen des Ereignisses <b>Beim Laden <\/b>ausgel&ouml;st wird, nutzen wir, um diese Variablen mit Verweisen auf die beiden Unterformulare zu f&uuml;llen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Set<\/span> sfm = Me!sfmArtikel.Form\r\n     <span style=\"color:blue;\">Set<\/span> sfmNeu = Me!sfmArtikelNeu.Form\r\n     <span style=\"color:blue;\">With<\/span> sfmNeu\r\n         .AfterUpdate = \"[Event Procedure]\"\r\n         .Filter = \"1=2\"\r\n         .FilterOn = <span style=\"color:blue;\">True<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die ersten beiden Anweisungen f&uuml;llen die Objektvariablen <b>sfm <\/b>und <b>sfmNeu <\/b>mit den Verweisen auf die Unterformulare.<\/p>\n<p>Danach stellen wir Eigenschaften f&uuml;r das Unterformular <b>sfmArtikelNeu <\/b>ein. Die <b>Filter<\/b>-Eigenschaften hatten wir bereits vorher f&uuml;r <b>Me!sfmArtikelNeu.Form <\/b>eingestellt und setzen diese nun f&uuml;r <b>sfmNeu<\/b>. Au&szlig;erdem legen wir mit der Eigenschaft <b>AfterUpdate <\/b>fest, dass wir in diesem Klassenmodul auf das Ausl&ouml;sen des Ereignisses <b>Nach Aktualisierung <\/b>des Unterformulars <b>sfmArtikelNeu <\/b>lauschen.<\/p>\n<p>Anschlie&szlig;end k&ouml;nnen wir das Ereignis <b>AfterUpdate<\/b> f&uuml;r die Variable <b>sfmNeu <\/b>aus der Liste der Ereignisse im rechten Kombinationsfeld ausw&auml;hlen, nachdem wir im linken Kombinationsfeld den Wert <b>sfmNeu<\/b> ausgew&auml;hlt haben (siehe Bild 10). Hier aktualisieren wir nun einfach beide Unterformulare:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_010.png\" alt=\"Anlegen von Ereignisprozeduren f&uuml;r WithEvents-Variablen\" width=\"549,6265\" height=\"440,6174\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Anlegen von Ereignisprozeduren f&uuml;r WithEvents-Variablen<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>sfmNeu_AfterUpdate()\r\n     sfmNeu.Requery\r\n     sfm.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn Sie das Formular nun schlie&szlig;en und erneut &ouml;ffnen, damit die Variablen beim Laden des Formulars gef&uuml;llt werden k&ouml;nnen und einen neuen Datensatz eingegeben haben, werden die beiden Unterformulare aktualisiert. Das f&uuml;hrt dazu, dass das Unterformular <b>sfmArtikelNeu <\/b>nun wieder den leeren, neuen Datensatz anzeigt und das Unterformular <b>sfmArtikel <\/b>den neuen Datensatz liefert.<\/p>\n<h2>Sortierung &auml;ndern<\/h2>\n<p>Wenn wir nun die Sortierung des zweiten Unterformulars ebenfalls in der Ereignisprozedur <b>Beim Laden <\/b>so einstellen, dass die neuesten Datens&auml;tze anz oben angezeigt werden, finden Sie den neu hinzugef&uuml;gten Datensatz auch direkt unter der Zeile f&uuml;r den neuen, leeren Datensatz vor.<\/p>\n<p>Wenn wir nun einen neuen Datensatz anf&uuml;gen, sieht das w&auml;hrend der Eingabe wie in Bild 11 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_011.png\" alt=\"Vor dem Speichern eines neuen Datensatzes ...\" width=\"499,6607\" height=\"177,7882\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Vor dem Speichern eines neuen Datensatzes &#8230;<\/span><\/b><\/p>\n<p>Nachdem die Eingabe abgeschlossen ist, landet der neue Datensatz direkt unter dem neuen, leeren Datensatz im zweiten Unterformular (siehe Bild 12).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_012.png\" alt=\"... und nach dem Speichern.\" width=\"499,6607\" height=\"196,657\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: &#8230; und nach dem Speichern.<\/span><\/b><\/p>\n<h2>Filter und Sortierung zur Laufzeit &auml;ndern<\/h2>\n<p>Nun gibt es allerdings &uuml;ber die Spaltenk&ouml;pfe der Datenblattansicht die M&ouml;glichkeit, die Sortierung und die Filterung der enthaltenen Datens&auml;tze zu beeinflussen (siehe Bild 13). An dieser Stelle m&uuml;ssen wir ber&uuml;cksichtigen, dass die Spaltenk&ouml;pfe, die oben angezeigt werden, ja nur zum oberen Unterformular zur Eingabe neuer Datens&auml;tze geh&ouml;rt und nicht zum Unterformular <b>sfmArtikel<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_013.png\" alt=\"Setzen eines benutzerdefinierten Filters\" width=\"649,559\" height=\"330,4631\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Setzen eines benutzerdefinierten Filters<\/span><\/b><\/p>\n<p>Dessen Spaltenk&ouml;pfe sind ja hinter dem Unterformular <b>sfmArtikelNeu <\/b>verborgen. Wenn wir dem Benutzer die Illusion erhalten wollen, dass er mit einem Formular arbeitet, in das er die Datens&auml;tze ganz oben eingeben kann, m&uuml;ssen wir ein wenig tricksen.<\/p>\n<p>Das sieht so aus, dass wir wiederum Ereignisse abfangen m&uuml;ssen &#8211; und zwar diejenigen, die durch das Filtern und das Sortieren ausgel&ouml;st werden. Das Ereignis f&uuml;r das Setzen eines Filters ist schnell gefunden: Es hei&szlig;t im Eigenschaftsfenster <b>Bei angewendetem Filter<\/b>, unter VBA <b>OnApplyFilter<\/b>.<\/p>\n<p>Damit wir es im Klassenmodul des Hauptformulars implementieren k&ouml;nnen, stellen wir die Eigenschaft <b>OnApplyFilter <\/b>in der Ereignisprozedur <b>Form_Load <\/b>auf <b>[Event Procedure] <\/b>ein:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Set<\/span> sfmNeu = Me!sfmArtikelNeu.Form\r\n     <span style=\"color:blue;\">With<\/span> sfmNeu\r\n         ...\r\n         .OnApplyFilter = \"[Event Procedure]\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Implementierung wird indes etwas komplizierter. Der Kern sieht schon einmal so aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>sfmNeu_ApplyFilter(Cancel<span style=\"color:blue;\"> As Integer<\/span>,  ApplyType<span style=\"color:blue;\"> As Integer<\/span>)\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Warum wird es kompliziert Nun: F&uuml;r das erste Unterformular <b>sfmArtikelNeu <\/b>legen wir ja bereits beim Laden einen Filter mit dem Kriterium <b>1=2 <\/b>fest. Wenn wir also nun &uuml;ber das Men&uuml;, das wir mit der Pfeil nach unten-Taste &ouml;ffnen k&ouml;nnen, eines der Filterkriterien ausw&auml;hlen, beispielsweise <b>Beginnt mit&#8230; <\/b>und etwa den Buchstaben <b>C <\/b>als Kriterium eingeben, sollte aber nur dieses Filterkriterium auf das zweite Unterformular angewendet werden, nicht aber das Kriterium <b>1=2<\/b>. Dann w&uuml;rden n&auml;mlich keine Datens&auml;tze im Unterformular erscheinen.<\/p>\n<p>Also schauen wir uns erst einmal an, wie der aus <b>1=2 <\/b>und unserem hinzugef&uuml;gten Kriterium bestehende Filterausdruck nun aussieht. Dazu geben wir im Direktbereich des VBA-Editors die folgende Anweisung ein:<\/p>\n<pre>  Screen.ActiveForm!sfmArtikelNeu.Form.Filter\r\n(1=2) AND ([tblArtikel].[Artikelname] Like \"C*\")<\/pre>\n<p>Aus diesem Ausdruck m&uuml;ssen wir nun den hinteren Teil herausnehmen. Zuvor schauen wir uns allerdings noch an, was geschieht, wenn wir den Filter &uuml;ber den Eintrag <b>Filter l&ouml;schen aus Artikelname <\/b>wieder entfernen. Danach sieht der Filter so aus:<\/p>\n<pre>  Screen.ActiveForm!sfmArtikelNeu.Form.Filter\r\n((1=2))<\/pre>\n<p>Grunds&auml;tzlich ist das in Ordnung. Aber wo kommt das zweite Paar Klammern her F&uuml;gen wir nochmals einen Filter hinzu, diesmal f&uuml;r alle Eintr&auml;ge, deren Artikelname mit dem Buchstaben <b>D <\/b>beginnt. Danach erhalten wir folgenden Filterausdruck:<\/p>\n<pre>  Screen.ActiveForm!sfmArtikelNeu.Form.Filter\r\n(((1=2))) AND ([tblArtikel].[Artikelname] Like \"D*\")<\/pre>\n<p>Offensichtlich f&uuml;gt Access also bei jeder &auml;nderung des Filters ein neues Klammern zum Ausdruck <b>1=2 <\/b>hinzu. Wir m&uuml;ssen die Methode, die den gew&uuml;nschten Filterausdruck von unserem Kriterium <b>1=2 <\/b>trennt, theoretisch etwas aufwendiger gestalten. Au&szlig;er nat&uuml;rlich, man geht einfach davon aus, dass wir einfach nach dem ersten <b>AND<\/b> suchen und den Teil dahinter als Kriterium f&uuml;r das Unterformular verwenden. Probieren wir also aus, ob das funktioniert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>sfmNeu_ApplyFilter(Cancel<span style=\"color:blue;\"> As Integer<\/span>,  ApplyType<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strFilter<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intPosAnd<span style=\"color:blue;\"> As String<\/span>\r\n     strFilter = sfmNeu.Filter\r\n     intPosAnd = <span style=\"color:blue;\">InStr<\/span>(1, strFilter, \" AND \")\r\n     <span style=\"color:blue;\">If <\/span>intPosAnd &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         strFilter = <span style=\"color:blue;\">Mid<\/span>(strFilter, intPosAnd + 4)\r\n         sfm.Filter = strFilter\r\n         sfm.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         sfm.Filter = \"\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     sfmNeu.Filter = \"1=2\"\r\n     sfmNeu.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies funktioniert erstmal ganz gut. Die Prozedur erfasst nach dem Setzen des Filters den Filter des Formulars <b>sfmArtikelNeu <\/b>in der Variablen <b>strFilter<\/b>. Das sieht dann etwa so aus:<\/p>\n<pre>(1=2) AND ([tblArtikel].[Artikelname] Like \"D*\")<\/pre>\n<p>Nun ermittelt die Prozedur, ob sich ein <b>AND <\/b>im Filterausdruck befindet. Ist das der Fall, schneidet sie den Teil bis zum <b>AND <\/b>ab und beh&auml;lt nur den Rest. In unserem Fall:<\/p>\n<pre>([tblArtikel].[Artikelname] Like \"D*\")<\/pre>\n<p>Perfekt &#8211; dieser Ausdruck landet nun in der Eigenschaft Filter des Unterformulars und wir aktivieren diesen noch durch Setzen der Eigenschaft <b>FilterOn<\/b> auf den Wert <b>True<\/b>. Sollte kein <b>AND <\/b>enthalten sein, ist der Filter wohl geleert worden und wir stellen die <b>Filter<\/b>-Eigenschaft f&uuml;r das Unterformular <b>sfmArtikel <\/b>auf eine leere Zeichenfolge ein.<\/p>\n<p>Dies blendet alle Datens&auml;tze wieder ein. Au&szlig;erdem leeren wir das obere Formular <b>sfmArtikelNeu <\/b>wieder, indem wir dessen Filter wieder auf <b>1=2 <\/b>einstellen und diesem mit <b>FilterOn = True <\/b>aktivieren.<\/p>\n<p>Sind wir fertig mit dem Filter Nein, wir wollen noch ausprobieren, was geschieht, wenn wir ein zweites Kriterium setzen. Also erst <b>Artikelname beginnt mit C<\/b>, dann <b>Artikelname enth&auml;lt D<\/b>.<\/p>\n<p>Leider erhalten wir dann den Fehler aus Bild 14. Was ist hier passiert Schauen wir uns den Filterausdruck an, der f&uuml;r die <b>Filter<\/b>-Eigenschaft des Unterformulars <b>sfmArtikelNeu <\/b>hinterlegt wurde:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_014.png\" alt=\"Fehler beim Setzen des Filters\" width=\"649,559\" height=\"407,4104\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Fehler beim Setzen des Filters<\/span><\/b><\/p>\n<pre>((1=2) AND ([tblArtikel].[Artikelname] Like \"C*\")) AND ([tblArtikel].[Artikelname] Like \"*D*\")<\/pre>\n<p>Hier f&auml;llt uns noch nichts auf. Schauen wir uns dann an, wie der aktuelle Inhalt der Variablen <b>strFilter <\/b>nach dem Abtrennen des Kriteriume <b>1=2 <\/b>aussieht:<\/p>\n<pre>  strFilter\r\n([tblArtikel].[Artikelname] Like \"C*\")) AND ([tblArtikel].[Artikelname] Like \"*D*\")<\/pre>\n<p>Dieser sieht auch zun&auml;chst unauff&auml;llig aus &#8211; es handelt sich halt um den hinteren Teil, den vorderen Teil haben wir ja abgeschnitten. Beim Klammern-Z&auml;hlen f&auml;llt dann allerdings auf, dass wir offensichtlich vorn eine Klammer zu viel abgeschnitten haben.<\/p>\n<p>Und da wird es deutlich: Access hat den gesamten Ausdruck vor dem Hinzuf&uuml;gen des neuen Kriteriums in ein neues Klammernpaar eingefasst. Deshalb haben wir vorn eine Klammer zu viel abgeschnitten.<\/p>\n<p>Also machen wir es uns nun etwas einfacher und ersetzen einfach nur <b>1=2 <\/b>durch <b>1=1<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>sfmNeu_ApplyFilter(Cancel<span style=\"color:blue;\"> As Integer<\/span>,  ApplyType<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strFilter<span style=\"color:blue;\"> As String<\/span>\r\n     strFilter = sfmNeu.Filter\r\n     strFilter = <span style=\"color:blue;\">Replace<\/span>(strFilter, \"1=2\", \"1=1\")\r\n     sfm.Filter = strFilter\r\n     sfm.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n     sfmNeu.Filter = \"1=2\"\r\n     sfmNeu.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit wird der Filter nun zuverl&auml;ssig gesetzt.<\/p>\n<h2>Sortierung anpassen<\/h2>\n<p>Nun kommt die scheinbar komplizierte Aufgabe, was die Umsetzung der per Kontextmen&uuml; ausgew&auml;hlten Befehle angeht &#8212; die Sortierung. Diese wird angewendet, wenn wir einen der beiden Befehle <b>Von A bis Z sortieren <\/b>oder <b>Von Z bis A sortieren <\/b>ausw&auml;hlen (siehe Bild 15).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1160_015.png\" alt=\"Aufrufen einer Sortierung\" width=\"599,593\" height=\"233,3441\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Aufrufen einer Sortierung<\/span><\/b><\/p>\n<p>Dumm nur: Wir finden in den Ereignissen des Formulars keine einzige Eigenschaft, die namentlich etwas mit dem Sortieren zu tun hat.<\/p>\n<p>Was nun Wie es der Zufall will, hatte ich beim Ausw&auml;hlen einer der beiden Sortierungen noch einen Haltepunkt auf der Ereignisprozedur <b>sfmNeu_ApplyFilter <\/b>stehen, der prompt angesteuert wurde.<\/p>\n<p>Diese Methode wird also auch ausgel&ouml;st, wenn man einen der Sortieren-Befehle des Kontextmen&uuml;s ausw&auml;hlt. Beim Blick auf die Definition dieser Ereignisprozedur f&auml;llt dann auch der Parameter <b>ApplyType <\/b>auf, den wir uns nun genauer ansehen. Dazu f&uuml;gen wir eine entsprechende <b>Debug.Print<\/b>-Anweisung in die Prozedur ein:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>sfmNeu_ApplyFilter(Cancel<span style=\"color:blue;\"> As Integer<\/span>,  ApplyType<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strFilter<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Debug.Print<\/span> ApplyType\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn wir nun einen Filter setzen, liefert der Parameter <b>ApplyType <\/b>den Wert <b>1<\/b>. Das gilt auch f&uuml;r das L&ouml;schen des Filters. Diesen Wert erhalten wir allerdings auch, wenn wir eine Sortierung einstellen. Wann also tauchen andere Werte als <b>1 <\/b>oder <b>acApplyFilter <\/b>auf Das ist der Fall, wenn  Sie eine <b>.adp<\/b>-Anwendung nutzen &#8211; dann erhalten wir an dieser Stelle den Wert <b>3 <\/b>oder <b>acApplyServerFilter<\/b>.<\/p>\n<p>Also m&uuml;ssen wir in der Ereignisprozedur <b>sfmNeu_ApplyFilter <\/b>immer auch pr&uuml;fen, welche Sortierung gerade f&uuml;r das Unterformular <b>sfmArtikelNeu <\/b>eingestellt ist und dieses auf <b>sfmArtikel <\/b>&uuml;bertragen. Dazu erg&auml;nzen wir die Prozedur wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>sfmNeu_ApplyFilter(Cancel<span style=\"color:blue;\"> As Integer<\/span>,  ApplyType<span style=\"color:blue;\"> As Integer<\/span>)\r\n     ...\r\n     sfm.OrderBy = sfmNeu.OrderBy\r\n     sfm.OrderByOn = sfmNeu.OrderByOn\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Auf diese Weise werden die Werte der beiden Eigenschaften <b>OrderBy <\/b>und <b>OrderByOn <\/b>immer von <b>sfmNeu <\/b>auf <b>sfm <\/b>&uuml;bertragen.<\/p>\n<h2>&auml;ndern der Spaltenbreiten<\/h2>\n<p>Wir m&uuml;ssen auch noch ber&uuml;cksichtigen, dass der Benutzer gegebenenfalls einmal &uuml;ber de Spaltenk&ouml;pfe die Spaltenbreiten des Datenblatts anpasst.<\/p>\n<p>Also schauen wir uns dies auch noch an &#8211; allerdings in einem weiteren Artikel namens <b>Spalten zweier Datenbl&auml;tter synchronisieren <\/b>(<b>www.access-im-unternehmen.de\/****<\/b>). <\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag zeigt, wie Sie die unter Access &uuml;bliche Konstellation, dass neue Datens&auml;tze im Datenblatt immer unten angelegt werden m&uuml;ssen, &auml;ndern k&ouml;nnen.<\/p>\n<p>Daf&uuml;r sind zwar ein paar Tricks n&ouml;tig, aber das ist ja das Sch&ouml;ne an Access: Es bietet so viele M&ouml;glichkeiten, dass man die meisten Dinge an seine Bed&uuml;rfnisse anpassen kann.<\/p>\n<p>Sie m&uuml;ssen bei der hier vorgestellten L&ouml;sung zwar ein paar kleinere Einschr&auml;nkungen hinnehmen wie etwa die Tatsache, dass Sie die Unterformularsteuerelemente so breit gestalten m&uuml;ssen, dass diese alle in den Spalten angezeigten Informationen aufnehmen k&ouml;nnen. Anderenfalls w&uuml;rde im oberen Formular die horizontale Bildlaufleiste eingeblendet werden, wodurch der neue, leere Datensatz nicht mehr sichtbar ist.<\/p>\n<p>Im Beitrag <b>Spalten zweier Datenbl&auml;tter synchronisieren <\/b>werden wir uns auch noch ansehen, wie wir daf&uuml;r sorgen k&ouml;nnen, dass der Benutzer die Spaltenbreiten nicht so gro&szlig; macht, dass die Gesamtbreite gr&ouml;&szlig;er als die Breite des Unterformulars wird.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>NeuerDatensatz.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/5A8B2A18-D6B6-4AEB-B18F-58A340205ACA\/aiu_1160.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es scheint in Stein gemei&szlig;elt: Neue Datens&auml;tze werden unter Access immer unten, am Ende der Datensatzliste, angeh&auml;ngt. Das gilt sowohl f&uuml;r die Datenblattansicht als auch f&uuml;r die Endlosansicht. F&uuml;r uns kein Anlass, es nicht doch einmal auszuprobieren. Mit ein paar Tricks schaffen wir es schlie&szlig;lich, eine passable Datenblattansicht zu programmieren, die scheinbar das Anf&uuml;gen eines neuen Datensatzes in der obersten Zeile der Datenblattansicht erlaubt.<\/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,66062018,44000023],"tags":[],"class_list":["post-55001160","post","type-post","status-publish","format-standard","hentry","category-662018","category-66062018","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>Neue Datens&auml;tze oben anf&uuml;gen - 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\/Neue_Datensaetze_oben_anfuegen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Neue Datens&auml;tze oben anf&uuml;gen\" \/>\n<meta property=\"og:description\" content=\"Es scheint in Stein gemei&szlig;elt: Neue Datens&auml;tze werden unter Access immer unten, am Ende der Datensatzliste, angeh&auml;ngt. Das gilt sowohl f&uuml;r die Datenblattansicht als auch f&uuml;r die Endlosansicht. F&uuml;r uns kein Anlass, es nicht doch einmal auszuprobieren. Mit ein paar Tricks schaffen wir es schlie&szlig;lich, eine passable Datenblattansicht zu programmieren, die scheinbar das Anf&uuml;gen eines neuen Datensatzes in der obersten Zeile der Datenblattansicht erlaubt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:12:49+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/3ec8dd1544c54e58924d6bb9c309bdb5\" \/>\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=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Neue Datens&auml;tze oben anf&uuml;gen\",\"datePublished\":\"2020-05-13T21:12:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/\"},\"wordCount\":3314,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/3ec8dd1544c54e58924d6bb9c309bdb5\",\"articleSection\":[\"2018\",\"6\\\/2018\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/\",\"name\":\"Neue Datens&auml;tze oben anf&uuml;gen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/3ec8dd1544c54e58924d6bb9c309bdb5\",\"datePublished\":\"2020-05-13T21:12:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/3ec8dd1544c54e58924d6bb9c309bdb5\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/3ec8dd1544c54e58924d6bb9c309bdb5\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Datensaetze_oben_anfuegen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Neue Datens&auml;tze oben anf&uuml;gen\"}]},{\"@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":"Neue Datens&auml;tze oben anf&uuml;gen - 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\/Neue_Datensaetze_oben_anfuegen\/","og_locale":"de_DE","og_type":"article","og_title":"Neue Datens&auml;tze oben anf&uuml;gen","og_description":"Es scheint in Stein gemei&szlig;elt: Neue Datens&auml;tze werden unter Access immer unten, am Ende der Datensatzliste, angeh&auml;ngt. Das gilt sowohl f&uuml;r die Datenblattansicht als auch f&uuml;r die Endlosansicht. F&uuml;r uns kein Anlass, es nicht doch einmal auszuprobieren. Mit ein paar Tricks schaffen wir es schlie&szlig;lich, eine passable Datenblattansicht zu programmieren, die scheinbar das Anf&uuml;gen eines neuen Datensatzes in der obersten Zeile der Datenblattansicht erlaubt.","og_url":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:12:49+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/3ec8dd1544c54e58924d6bb9c309bdb5","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Neue Datens&auml;tze oben anf&uuml;gen","datePublished":"2020-05-13T21:12:49+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/"},"wordCount":3314,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/3ec8dd1544c54e58924d6bb9c309bdb5","articleSection":["2018","6\/2018","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/","url":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/","name":"Neue Datens&auml;tze oben anf&uuml;gen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/3ec8dd1544c54e58924d6bb9c309bdb5","datePublished":"2020-05-13T21:12:49+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/3ec8dd1544c54e58924d6bb9c309bdb5","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/3ec8dd1544c54e58924d6bb9c309bdb5"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Neue_Datensaetze_oben_anfuegen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Neue Datens&auml;tze oben anf&uuml;gen"}]},{"@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\/55001160","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=55001160"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001160\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}