{"id":55001052,"date":"2016-10-01T00:00:00","date_gmt":"2020-05-22T15:24:37","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1052"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dynamische_Standardwerte","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/","title":{"rendered":"Dynamische Standardwerte"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/32b0eacdd655400fb637490492fa4e5a\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>In vielen F&auml;llen k&ouml;nnen Sie dem Benutzer bei der Nutzung Ihrer Anwendung durch die Vorgabe von Standardwerten Arbeit abnehmen. Oft kristallisiert sich aber erst sp&auml;ter heraus, welche die gew&uuml;nschten Standardwerte sind oder diese unterscheiden sich je nach Benutzer. Dann w&auml;re es praktisch, wenn die Benutzer selbst die Standardwerte f&uuml;r das Anlegen neuer Datens&auml;tze vorgeben k&ouml;nnten. Vielleicht m&ouml;chten Sie sogar, dass der n&auml;chste neue Datensatz die Werte des vorherigen Datensatzes als Standardwerte &uuml;bernimmt Wie dies gelingt, zeigt der vorliegende Beitrag.<\/b><\/p>\n<p>Als Beispielformular nutzen wir ein einfaches Detailformular namens <b>frmArtikel<\/b>, welches die Daten der Tabelle <b>tblArtikel <\/b>der Beispieldatenbank anzeigt.<\/p>\n<p>Angenommen, die Datenbank enth&auml;lt &uuml;berwiegend Artikel einer bestimmten Kategorie, beispielsweise der Kategorie <b>Getr&auml;nke <\/b>mit dem Prim&auml;rschl&uuml;sselwert <b>1<\/b>, dann k&ouml;nnte es dem Benutzer einige Arbeit sparen, wenn dieser Wert beim Anlegen eines neuen Datensatzes bereits voreingestellt wird. Dies erledigen Sie &uuml;ber die Eigenschaft <b>Standardwert <\/b>des Kombinationsfeldes zur Anzeige der Kategorie im Entwurf des Formulars (s. Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_001.png\" alt=\"Formular mit der Standardwert-Eigenschaft im Entwurf\" width=\"499,5594\" height=\"336,0535\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Formular mit der Standardwert-Eigenschaft im Entwurf<\/span><\/b><\/p>\n<p>Wenn Sie dann in die Formularansicht wechseln und einen neuen Datensatz anzeigen, erscheint im Kombinationsfeld <b>Kategorie<\/b> bereits der voreingestellte Eintrag (s. Bild 2). Dies &auml;ndert sich allerdings auch nicht beim Anlegen weiterer Datens&auml;tze.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_002.png\" alt=\"Kategorie Getr&auml;nke als Standardwert\" width=\"349,6916\" height=\"289,7662\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Kategorie Getr&auml;nke als Standardwert<\/span><\/b><\/p>\n<h2>Vorarbeit: Steuerelementname &auml;ndern<\/h2>\n<p>Da wir die Felder direkt aus der Feldliste in das Formular gezogen haben, hat Access die Namen der Felder als Steuerelementnamen &uuml;bernommen. Das kann in manchen Situationen zu Problemen f&uuml;hren, wenn Sie per VBA auf das Steuerelement zugreifen wollen &#8211; etwa, um die Eigenschaft <b>DefaultValue <\/b>einzustellen. Diese ist n&auml;mlich nur f&uuml;r Steuerelemente verf&uuml;gbar, nicht aber f&uuml;r die Felder der Datenherkunft des Formulars, die aber &#8211; wenn Steuerelement und Feld den gleichen Namen tragen &#8211; auf die gleiche Weise referenziert werden. Um Missverst&auml;ndnissen vorzubeugen, sollten Sie also das Steuerelement mit einem Pr&auml;fix versehen, also etwa <b>txt <\/b>f&uuml;r Textfelder oder <b>cbo <\/b>f&uuml;r Kombinationsfelder. Sie k&ouml;nnen ganz einfach testen, dass <b>DefaultValue <\/b>f&uuml;r Felder nicht zur Verf&uuml;gung steht, indem Sie das Kombinationsfeld in <b>cboKategorieID <\/b>umbenennen und dann versuchen, dem Feld <b>KategorieID <\/b>die Eigenschaft <b>DefaultValue <\/b>zuzuweisen. Diese steht dort nicht zur Verf&uuml;gung, wie Bild 3 zeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_003.png\" alt=\"DefaultValue steht nur f&uuml;r Steuerelemente zur Verf&uuml;gung\" width=\"424,6255\" height=\"218,9597\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: DefaultValue steht nur f&uuml;r Steuerelemente zur Verf&uuml;gung<\/span><\/b><\/p>\n<h2>Wert des vorherigen Datensatzes &uuml;bernehmen<\/h2>\n<p>Eine Variante lautet nun, den Wert des zuvor eingegebenen Datensatzes als Standardwert f&uuml;r den folgenden Datensatz zu &uuml;bernehmen. Dazu ist nicht viel Aufwand n&ouml;tig: Wir f&uuml;gen dem Klassenmodul des Formulars lediglich eine Ereignisprozedur hinzu, die durch das Ereignis <b>Nach Aktualisierung <\/b>des betroffenen Steuerelements ausgel&ouml;st wird. Diese Prozedur sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboKategorieID_AfterUpdate()\r\n     Me!cboKategorieID.DefaultValue = Me!cboKategorieID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn Sie nun den Wert des Feldes <b>KategorieID <\/b>&uuml;ber das Kombinationsfeld &auml;ndern und dann einen neuen Datensatz anzeigen, erscheint der zuletzt gew&auml;hlte Wert bereits als Standardwert dieses Feldes.<\/p>\n<p>Wenn Sie diese Methode nutzen, ben&ouml;tigen Sie f&uuml;r andere Datentypen leicht abgewandelte Varianten der obigen Methode. F&uuml;r Felder mit dem Datentyp <b>Text <\/b>etwa m&uuml;ssen Sie den Wert, den Sie der Eigenschaft <b>DefaultValue <\/b>zuweisen wollen, noch in Anf&uuml;hrungszeichen einfassen. F&uuml;r das Textfeld <b>txtArtikelname <\/b>sieht dies wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtArtikelname_AfterUpdate()\r\n     Me!txtArtikelname.DefaultValue = Chr(34) _\r\n         & Me!txtArtikelname & Chr(34)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Chr(34) <\/b>entspricht dem Anf&uuml;hrungszeichen (<b>&#8222;<\/b>). Sie k&ouml;nnen stattdessen auch zwei in zwei weitere Anf&uuml;hrungszeichen eingefasste Anf&uuml;hrungszeichen angeben:<\/p>\n<pre>Me!txtArtikelname.DefaultValue = \"\"\"\" _\r\n     & Me!txtArtikelname & \"\"\"\"<\/pre>\n<p>Die Variante mit <b>Chr(34) <\/b>ist jedoch besser lesbar.<\/p>\n<p>F&uuml;r andere Felddatentypen wie <b>Datum<\/b>&#8211; oder <b>Ja\/Nein<\/b>-Felder verwenden Sie auch die zuerst genannte Variante mit der direkten Zuweisung des aktuellen Wertes.<\/p>\n<p>Damit findet der Benutzer nun schon einmal jeweils den zuletzt eingegebenen Wert f&uuml;r verschiedene Steuerelemente als Standardwert f&uuml;r neue Datens&auml;tze vor.<\/p>\n<h2>Nach dem Schlie&szlig;en und &ouml;ffnen<\/h2>\n<p>Die L&ouml;sung hat allerdings einen kleinen Nachteil: Wenn der Benutzer die Datenbank schlie&szlig;t und wieder &ouml;ffnet, sind die zusammengestellten Standardwerte wieder weg (genau genommen geschieht dies bereits, wenn das Formular geschlossen wird). Das ist klar, denn wenn wir dynamisch per VBA Eigenschaften zuweisen, werden diese ja nicht gespeichert. Dies w&auml;re nur der Fall, wenn Sie die Eigenschaft <b>Standardwert <\/b>in der Entwurfsansicht festlegen und das Formular dann speichern.<\/p>\n<p>Was tun Abhilfe schafft eine Tabelle, in welcher wir die Standardwerte f&uuml;r verschiedene Formulare und Steuerelemente speichern k&ouml;nnen. Die Tabelle hei&szlig;t <b>tblStandardwerte<\/b> und sieht im Entwurf wie in Bild 4 aus. Damit die Tabelle nicht nur f&uuml;r ein, sondern gleich f&uuml;r mehrere Formulare Standardwerte speichern kann, legen wir zwei Felder namens <b>Formularename <\/b>und <b>Steuerelementname <\/b>an, welche die entsprechenden Daten zum betroffenen Steuerelement speichern. Das Feld <b>Standardwert <\/b>nimmt dann den zu speichernden Standardwert auf. Damit der Benutzer f&uuml;r keine Kombination aus Formularname und Steuerelementname zwei Standardwerte speichern kann, f&uuml;gen wir gleich noch einen eindeutigen Index namens <b>UniqueIndex <\/b>f&uuml;r die beiden Felder <b>Formularname <\/b>und <b>Steuerelementname <\/b>hinzu.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_004.png\" alt=\"Tabelle zum Speichern von Standardwerten\" width=\"499,5594\" height=\"347,4854\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Tabelle zum Speichern von Standardwerten<\/span><\/b><\/p>\n<p>Um unser Formular mit Funktionen zum Lesen und Schreiben der Standardwerte auszustatten, kopieren wir es zun&auml;chst und f&uuml;gen es unter dem Namen <b>frmArtikel_Standardwerttabelle<\/b> wieder ein. Werfen Sie dann die bereits angelegten Ereignisprozeduren aus der neuen Version des Formulars heraus.<\/p>\n<h2>Standardwerte speichern<\/h2>\n<p>Das Speichern eines Wertes als Standardwert soll beim Speichern des jeweiligen Datensatzes erfolgen. Dazu bauen wir uns eine Prozedur, die den Namen des Formulars, den Namen des Steuerelements und den neuen Standardwert als Parameter entgegennimmt und nennen diese <b>StandardwertSpeichern<\/b>. Die Prozedur sieht wie in Listing 1 aus. Die Prozedur pr&uuml;ft zun&auml;chst, ob der Parameter <b>varStandardwert <\/b>&uuml;berhaupt einen Wert enth&auml;lt. Falls das Feld, f&uuml;r das der Standardwert gespeichert werden soll, n&auml;mlich den Wert <b>Null <\/b>hat, ist <b>varStandardwert <\/b>leer. Ist varStandardwert leer, geschieht Folgendes:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>StandardwertSpeichern(strFormularname<span style=\"color:blue;\"> As String<\/span>, strSteuerelementname<span style=\"color:blue;\"> As String<\/span>, varStandardwert<span style=\"color:blue;\"> As Variant<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsEmpty(varStandardwert)<span style=\"color:blue;\"> Then<\/span>\r\n         db.Execute \"INSERT INTO tblStandardwerte(Formularname, Steuerelementname, Standardwert) VALUES(''''\" _\r\n             & strFormularname & \"'''', ''''\" & strSteuerelementname & \"'''', ''''\" & varStandardwert & \"'''')\", dbFailOnError\r\n         <span style=\"color:blue;\">If <\/span>Err.Number = 3022<span style=\"color:blue;\"> Then<\/span>\r\n             db.Execute \"UPDATE tblStandardwerte SET Standardwert = ''''\" & varStandardwert & \"'''' WHERE Formularname = ''''\" _\r\n                 & strFormularname & \"'''' AND Steuerelementname = ''''\" & strSteuerelementname & \"''''\", dbFailOnError\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         db.Execute \"INSERT INTO tblStandardwerte(Formularname, Steuerelementname, Standardwert) VALUES(''''\" _\r\n             & strFormularname & \"'''', ''''\" & strSteuerelementname & \"'''', NULL)\", dbFailOnError\r\n         <span style=\"color:blue;\">If <\/span>Err.Number = 3022<span style=\"color:blue;\"> Then<\/span>\r\n             db.Execute \"UPDATE tblStandardwerte SET Standardwert = NULL WHERE Formularname = ''''\" & strFormularname _\r\n                 & \"'''' AND Steuerelementname = ''''\" & strSteuerelementname & \"''''\", dbFailOnError\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Speichern von Standardwerten<\/span><\/b><\/p>\n<p>Die Prozedur versucht, einen neuen Datensatz in der Tabelle <b>tblStandardwerte <\/b>anzulegen. Dabei sollen die mit den drei Parametern <b>strFormularname<\/b>, <b>strSteuerelementname <\/b>und <b>varStandardwert <\/b>&uuml;bergebenen Werte in die drei Felder <b>Formularname<\/b>, <b>Steuerelementname <\/b>und <b>Standardwert <\/b>der Tabelle <b>tblStandardwerte <\/b>eingetragen werden. F&uuml;r den dritten Parameter haben wir den Datentyp <b>Variant <\/b>gew&auml;hlt, damit hier auch der Wert <b>Null <\/b>verarbeitet werden kann.<\/p>\n<p>Da es beim Speichern geschehen kann, dass die Prozedur versucht, einen Datensatz mit einer bereits vorhandenen Kombination aus Formularname und Steuerelementname zu speichern, haben wir zuvor die eingebaute Fehlerbehandlung deaktiviert.<\/p>\n<p><!--30percent--><\/p>\n<p>So meldet Access keinen Fehler, wenn das Anlegen des Datensatzes aus dem genannten Grund fehlschl&auml;gt. Stattdessen pr&uuml;ft die Prozedur anschlie&szlig;end, ob der Fehler mit der Nummer <b>3022 <\/b>aufgetreten ist, was diesem Fehler entspricht. In diesem Fall soll die Prozedur dann den Wert des Feldes <b>Standardwert <\/b>in dem bereits vorhandenen Datensatz &uuml;berschreiben.<\/p>\n<p>Sollte <b>varStandardwert <\/b>leer sein, dann legt die Prozedur auch einen Datensatz in der Tabelle <b>tblStandardwerte <\/b>an beziehungsweise &auml;ndert den Standardwert f&uuml;r einen eventuell vorhandenen Datensatz f&uuml;r diese Konstellation aus Formularname und Steuerelementname. Allerdings tr&auml;gt die Prozedur dann den Wert <b>NULL <\/b>f&uuml;r das Feld <b>Standardwert <\/b>ein.<\/p>\n<p>In der <b>Nach Aktualisierung<\/b>-Ereignisprozedur des Formulars tragen wir dann etwa die folgende Zeile ein, um den aktuellen Wert des Feldes <b>cboKategorieID <\/b>in der Tabelle <b>tblStandardwerte <\/b>zu speichern:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     StandardwertSpeichern Me.Name, \"cboKategorieID\", _\r\n         Me!cboKategorieID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Nachdem Sie nun einen Datensatz im Formular <b>frmArtikel_Standardwerttabelle <\/b>bearbeitet haben, speichert diese Prozedur den dabei verwendeten Wert f&uuml;r das Steuerelement <b>cboKategorien <\/b>wie in Bild 5 in der Tabelle <b>tblStandardwerte<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_005.png\" alt=\"Tabelle zum Speichern von Standardwerten, Datenblattansicht\" width=\"424,6255\" height=\"137,9675\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Tabelle zum Speichern von Standardwerten, Datenblattansicht<\/span><\/b><\/p>\n<h2>Standardwerte wiederherstellen<\/h2>\n<p>Nun ben&ouml;tigen wir noch einen Algorithmus, der die Standardwerte wiederherstellt. Hier wollen wir nicht so kleinschrittig vorgehen und eine Prozedur bereitstellen, die f&uuml;r jeden vorzugebenden Wert erneut aufgerufen wird. Stattdessen wollen wir der zu erstellenden Prozedur nur noch den Namen des Formulars &uuml;bergeben, dessen Standardwerte eingestellt werden sollen, den Rest soll die Prozedur anhand der f&uuml;r dieses Formular gespeicherten Werte erledigen.<\/p>\n<p>Die dazu verwendete Prozedur finden Sie in Listing 2. Die Prozedur erwartet diesmal nicht den Namen des zu behandelnden Formulars, sondern gleich einen Verweis auf das Formular-Objekt selbst. Das hat den Hintergrund, dass wir in der Prozedur sowieso noch auf Elemente des Formulars zugreifen wollen &#8211; also k&ouml;nnen wir auch direkt den Objektverweis darauf &uuml;bergeben. Die Prozedur &ouml;ffnet ein Recordset auf Basis der Tabelle <b>tblStandardwerte<\/b>, wobei nur diejenigen Datens&auml;tze ber&uuml;cksichtigt werden, deren Formularname dem Namen des mit <b>frm <\/b>&uuml;bergebenen Formulars entsprechen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>StandardwerteSetzen(frm<span style=\"color:blue;\"> As <\/span>Form)\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 tblStandardwerte WHERE Formularname = ''''\" & frm.Name & \"''''\", dbOpenDynaset)\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         frm.Controls(rst!Steuerelementname).DefaultValue = rst!Standardwert\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Prozedur zum Setzen von Standardwerten<\/span><\/b><\/p>\n<p>Dies durchl&auml;uft die Prozedur in einer Schleife und tr&auml;gt dabei f&uuml;r alle gefundenen Datens&auml;tze den im Feld <b>Standardwert <\/b>angegebenen Wert in das im Feld <b>Steuerelementname <\/b>gefundene Steuerelement ein. Diese Methode rufen wir nur dann auf, wenn der Benutzer einen neuen Datensatz anlegt. Dies fangen wir in der Ereignisprozedur ab, die durch das Ereignis <b>Beim Anzeigen <\/b>ausgel&ouml;st wird und die wie folgt aussieht:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     <span style=\"color:blue;\">If <\/span>Me.NewRecord<span style=\"color:blue;\"> Then<\/span>\r\n         StandardwerteSetzen Me\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wie Sie sehen, pr&uuml;fen wir hier die Eigenschaft <b>NewRecord<\/b>, die nur dann den Wert <b>True <\/b>aufweist, wenn das Formular gerade einen neuen, leeren Datensatz anzeigt. Ist dies der Fall, ruft die Prozedur die Routine <b>StandardwerteSetzen<\/b> auf und &uuml;bergibt mit <b>Me <\/b>den Verweis auf das aktuelle Formular. Die Routine <b>StandardwerteSetzen <\/b>tr&auml;gt nun die Standardwerte f&uuml;r die Steuerelemente ein.<\/p>\n<h2>Standardwerte erweitern<\/h2>\n<p>Nun wollen wir neben der Kategorie auch noch ein Textfeld mit einem dynamischen Standardwert ausstatten. Dazu f&uuml;gen wir der Prozedur <b>Form_AfterUpdate <\/b>noch eine weitere Zeile hinzu:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     StandardwertSpeichern Me.Name, \"cboKategorieID\", _\r\n         Me!cboKategorieID\r\n     StandardwertSpeichern _\r\n         Me.Name, _\r\n         \"txtArtikelname\", _\r\n         Me!txtArtikelname\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Auch diese Werte werden nach der &auml;nderung an einem Datensatz wie geplant in die Tabelle <b>tblStandardwerte <\/b>geschrieben. Beim anschlie&szlig;enden Neuanlegen eines Datensatzes erhalten wir allerdings wie in Bild 6 im Textfeld <b>txtArtikelname <\/b>den Wert <b>#Name<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_006.png\" alt=\"Das Zuweisen des Standardwertes f&uuml;r den Artikelnamen funktioniert nicht.\" width=\"349,6916\" height=\"307,4583\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Das Zuweisen des Standardwertes f&uuml;r den Artikelnamen funktioniert nicht.<\/span><\/b><\/p>\n<p>Warum das Wir haben eines &uuml;bersehen, was wir Eingangs bereits erw&auml;hnt haben: Wenn Sie Standardwerte f&uuml;r Felder mit dem Datentyp <b>Text <\/b>angeben wollen, m&uuml;ssen diese in Anf&uuml;hrungszeichen eingefasst werden. Damit haben Sie nun auch ein Bild davon, was geschieht, wenn man diese Eigenheit nicht beachtet. Interessanterweise k&ouml;nnen wir nach dem Zuweisen der Werte f&uuml;r die <b>DefaultValue<\/b>-Eigenschaft sogar den Wert im Direktbereich ausgeben und erhalten den vorgesehenen Wert f&uuml;r das Feld <b>txtArtikelname<\/b>:<\/p>\n<pre>frm.Controls(rst!Steuerelementname).DefaultValue = _\r\n     rst!Standardwert\r\n<span style=\"color:blue;\">Debug.Print<\/span> rst!Steuerelementname, _\r\n     frm.Controls(rst!Steuerelementname).DefaultValue<\/pre>\n<p>Aber wir erhalten dennoch <b>#Name <\/b>im Textfeld selbst. Leider liefert die Zuweisung ohne Anf&uuml;hrungszeichen auch keinen Fehler, auf den wir reagieren k&ouml;nnten, indem wir den Text dann einfach in Anf&uuml;hrungszeichen setzen und erneut &uuml;bergeben.<\/p>\n<p>Aber dem k&ouml;nnen wir vorbeugen: Wir passen einfach die Prozedur <b>StandardwerteSetzen <\/b>wie in Listing 3 an. Innerhalb der <b>Do While<\/b>-Schleife &uuml;ber alle Datens&auml;tze zum aktuellen Formular fragen wir mit einer <b>Select Case<\/b>-Bedingung den Datentyp des Feldes ab, das hinter dem jeweiligen Steuerelement steckt. Der dazu untersuchte Ausdruck lautet <b>frm.Recordset.Fields(frm.Con-trols(rst!Steuer-ele-ment-name).ControlSource).Type<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>StandardwerteSetzen(frm<span style=\"color:blue;\"> As <\/span>Form)\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 tblStandardwerte WHERE Formularname = ''''\" & frm.Name & \"''''\", dbOpenDynaset)\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(rst!Standardwert)<span style=\"color:blue;\"> Then<\/span>\r\n             Select Case frm.Recordset.Fields(frm.Controls(rst!Steuerelementname).ControlSource).Type\r\n                 <span style=\"color:blue;\">Case <\/span>dbText\r\n                     frm.Controls(rst!Steuerelementname).DefaultValue = Chr(34) & rst!Standardwert & Chr(34)\r\n                 <span style=\"color:blue;\">Case <\/span>dbDate\r\n                     frm.Controls(rst!Steuerelementname).DefaultValue = CDbl(CDate(rst!Standardwert))\r\n                 <span style=\"color:blue;\">Case Else<\/span>\r\n                     frm.Controls(rst!Steuerelementname).DefaultValue = rst!Standardwert\r\n             <span style=\"color:blue;\">End Select<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             frm.Controls(rst!Steuerelementname).DefaultValue = Null\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Neue Version der Prozedur StandardwerteSetzen, die auch Felder mit dem Datentyp Text korrekt behandelt<\/span><\/b><\/p>\n<p>Von innen nach au&szlig;en liefert <b>rst!Steuerelementname <\/b>den Namen des aktuell zu f&uuml;llenden Steuerelements aus der Tabelle <b>tblStandardwerte<\/b>. Die Auflistung <b>frm.Controls <\/b>f&uuml;r dieses Element liefert das Steuerelement, das an dieses Feld gebunden ist. Dieses wiederum finden wir auch in dem <b>Recordset <\/b>wieder, das an das Formular gebunden ist. Und das <b>Recordset <\/b>enth&auml;lt f&uuml;r jedes Feld Eigenschaften wie etwa <b>Type <\/b>f&uuml;r den Datentyp. Hat diese nun den Wert <b>10<\/b>, also die Konstante <b>dbText<\/b>, dann soll die Spezialbehandlung mit den einfassenden Anf&uuml;hrungszeichen durchgef&uuml;hrt werden. Dies gelingt wie gew&uuml;nscht, mit der neuen Version zeigt das Formular alle Werte wie in der Tabelle <b>tblStandardwerte <\/b>gespeichert an (s. Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_008.png\" alt=\"Die Tabelle tblStandardwerte mit allen Werten eines Artikel-Datensatzes\" width=\"599,4715\" height=\"285,2469\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Die Tabelle tblStandardwerte mit allen Werten eines Artikel-Datensatzes<\/span><\/b><\/p>\n<p>Es gibt noch einen zweiten Sonderfall, n&auml;mlich Datumswerte. Dazu haben wir auch einen <b>Case<\/b>-Zweig eingerichtet, der aus dem im Feld <b>Standardwert <\/b>gespeicherten Datumswert erst ein Datum ermittelt und dieses dann in eine <b>Double<\/b>-Zahl konvertiert. Diese wird dann im Datumsfeld <b>AufgenommenAm <\/b>wieder wie ein Datum angezeigt (<b>Double <\/b>ist ohnehin der interne Datentyp f&uuml;r das Speichern von Datumswerten):<\/p>\n<pre>frm.Controls(rst!Steuerelementname).DefaultValue = _\r\n     CDbl(CDate(rst!Standardwert))<\/pre>\n<h2>Standardwerte f&uuml;r alle Felder<\/h2>\n<p>Wenn Sie dieses f&uuml;r alle Felder eines Formulars einrichten wollen, k&ouml;nnen Sie dies mit einer Prozedur wie der aus Listing 4 erledigen. <\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     StandardwertSpeichern Me.Name, \"txtArtikelname\", Nz(Me!txtArtikelname)\r\n     StandardwertSpeichern Me.Name, \"cboKategorieID\", Nz(Me!cboKategorieID)\r\n     StandardwertSpeichern Me.Name, \"cboLieferantID\", Nz(Me!cboLieferantID)\r\n     StandardwertSpeichern Me.Name, \"txtLiefereinheit\", Nz(Me!txtLiefereinheit)\r\n     StandardwertSpeichern Me.Name, \"txtEinzelpreis\", Nz(Me!txtEinzelpreis)\r\n     StandardwertSpeichern Me.Name, \"txtLagerbestand\", Nz(Me!txtLagerbestand)\r\n     StandardwertSpeichern Me.Name, \"txtBestellteEinheiten\", Nz(Me!txtBestellteEinheiten)\r\n     StandardwertSpeichern Me.Name, \"txtMindestbestand\", Nz(Me!txtMindestbestand)\r\n     StandardwertSpeichern Me.Name, \"chkAuslaufartikel\", Nz(Me!chkAuslaufartikel)\r\n     StandardwertSpeichern Me.Name, \"txtAufgenommenAm\", Nz(Me!txtAufgenommenAm)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Diese Prozedur speichert den aktuell bearbeiteten Datensatz in der Tabelle tblStandardwerte.<\/span><\/b><\/p>\n<p>Das Ergebnis sieht wie gew&uuml;nscht aus (s. Bild 7). Sie sehen dort einen komplett neuen Datensatz, der vollst&auml;ndig mit Standardwerten gef&uuml;llt wurde. Das erkennen Sie daran, dass das Feld mit dem Prim&auml;rschl&uuml;sselwert noch den Wert <b>(Neu) <\/b>anzeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_007.png\" alt=\"Ein neuer, komplett mit Standardwerten gef&uuml;llter Datensatz\" width=\"284,7489\" height=\"262,5141\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Ein neuer, komplett mit Standardwerten gef&uuml;llter Datensatz<\/span><\/b><\/p>\n<p>An dieser Stelle m&uuml;ssen wir auch auf die Gefahr hinweisen, die bei vollst&auml;ndig mit Standardwerten gef&uuml;llten Formularen drohen: Wenn der Benutzer ein solches Formular &ouml;ffnet, den Datensatz f&uuml;r okay befindet, weil er alle Daten wie gew&uuml;nscht enth&auml;lt (zugegeben: bei einem Artikel ist das nicht unbedingt wahrscheinlich) und das Formular dann schlie&szlig;t, wird der neue Datensatz nicht gespeichert. Dies geschieht erst, wenn der Benutzer zuvor zumindest ein Feld bearbeitet hat. Erst dann wird der Datensatz als &#8222;in Bearbeitung&#8220; markiert und der Datensatz wird beim Schlie&szlig;en des Formulars gespeichert.<\/p>\n<p>Wenn Sie in einer Situation, in der der Benutzer gerade zu einem neuen, leeren Datensatz gebl&auml;ttert hat, eine R&uuml;ckfrage beim Schlie&szlig;en des Formulars einbauen wollen, k&ouml;nnen Sie dies als Ereignisprozedur f&uuml;r das Ereignis <b>Beim Entladen <\/b>erledigen.<\/p>\n<p>In diesem Ereignis k&ouml;nnen Sie durch Setzen des Parameters <b>Cancel <\/b>auf den Wert <b>True <\/b>verhindern, dass das Formular geschlossen wird. Die Prozedur sieht so wie in Listing 5 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span>Me.NewRecord<span style=\"color:blue;\"> Then<\/span>\r\n         If <span style=\"color:blue;\">MsgBox<\/span>(\"Neu angelegten Datensatz verwerfen\", vbYesNo, \"Neuer Datensatz\") _\r\n                 = vbNo Then\r\n             Cancel = <span style=\"color:blue;\">True<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: R&uuml;ckfrage beim Schlie&szlig;en des Formulars mit einem neuen Datensatz<\/span><\/b><\/p>\n<p>Nach der Pr&uuml;fung, ob es sich um einen neuen Datensatz handelt (<b>Me.NewRecord<\/b>), fragt die Prozedur, ob der frisch angelegte Datensatz verworfen werden soll (s. Bild 9). Falls der Benutzer auf <b>Ja <\/b>klickt, wird das Formular geschlossen. Anderenfalls bleibt das Formular ge&ouml;ffnet und gibt dem Benutzer die Gelegenheit, doch noch etwas aus dem neuen Datensatz zu machen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_009.png\" alt=\"R&uuml;ckfrage, ob der Datensatz gespeichert werden soll\" width=\"424,6255\" height=\"356,1084\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: R&uuml;ckfrage, ob der Datensatz gespeichert werden soll<\/span><\/b><\/p>\n<p>Falls der Benutzer nicht versteht, dass er zumindest eine &auml;nderung an diesem Datensatz durchf&uuml;hren muss, k&ouml;nnten Sie zus&auml;tzlich noch die folgende Zeile innerhalb der inneren <b>If&#8230;Then<\/b>-Bedingung unterbringen. Die erste Zeile setzt den Fokus auf eines der Steuerelemente im Formular, was Voraussetzung f&uuml;r das Versetzen in den Bearbeitungszustand mit <b>Me.Dirty = True <\/b>ist:<\/p>\n<pre>Me!txtArtikelname.SetFocus\r\nMe.Dirty = <span style=\"color:blue;\">True<\/span><\/pre>\n<h2>Standardwert-Felder per Tag markieren<\/h2>\n<p>Bisher m&uuml;ssen Sie noch f&uuml;r jedes Steuerelement, dessen Inhalt als Standardwert gespeichert werden soll, den Inhalt mit einer Zeile wie der folgenden per Code erfassen:<\/p>\n<pre>StandardwertSpeichern Me.Name, \"txtArtikelname\", _\r\n     Nz(Me!txtArtikelname)<\/pre>\n<p>Das wollen wir so &auml;ndern, dass Sie die Steuerelemente, die beim Speichern der Standardwerte ber&uuml;cksichtigt werden sollten, einfach mit einem bestimmten Wert in der Eigenschaft <b>Marke <\/b>(VBA: <b>Tag<\/b>) markieren. Dann brauchen Sie nur noch den folgenden Einzeiler zum Ereignis <b>Form_AfterUpdate <\/b>des betroffenen Formular hinzuzuf&uuml;gen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     StandardwerteSpeichernMarke Me\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Den Aufruf der Prozedur <b>StandardwertSpeichern<\/b> lagern wir f&uuml;r die markierten Steuerelemente dann wie in der Prozedur aus Listing 6 aus. Die Prozedur erwartet nur einen Objektverweis auf das zu untersuchende Formular. Es durchl&auml;uft in einer <b>For Each<\/b>-Schleife alle Steuerelemente des Formulars und untersucht sie dahingehend, ob die Eigenschaft <b>Tag <\/b>den Wert <b>DefaultValue <\/b>enth&auml;lt. Falls ja, ruft sie f&uuml;r dieses Steuerelement die Prozedur <b>StandardwertSpeichern<\/b> auf und &uuml;bergibt den Formularnamen, den Steuerelementnamen sowie den aktuellen Wert.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>StandardwerteSpeichernMarke(frm<span style=\"color:blue;\"> As <\/span>Form)\r\n     <span style=\"color:blue;\">Dim <\/span>ctl<span style=\"color:blue;\"> As <\/span>Control\r\n     For Each ctl In frm.Controls\r\n         <span style=\"color:blue;\">If <\/span>ctl.Tag = \"DefaultValue\"<span style=\"color:blue;\"> Then<\/span>\r\n             StandardwertSpeichern frm.Name, ctl.Name, ctl.Value\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> ctl\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Diese Prozedur durchl&auml;uft alle markierten Steuerelemente und speichert die Standardwerte.<\/span><\/b><\/p>\n<p>Die Eigenschaft <b>Marke <\/b>stellen Sie &uuml;ber die Entwurfsansicht des Formulars ein, indem Sie auf das betroffene Steuerelement klicken und im Eigenschaftsfenster in den Bereich <b>Andere <\/b>zur Eigenschaft <b>Marke <\/b>wechseln (s. Bild 10). Auf diese Weise landen nur die Werte der Steuerelemente, die Sie daf&uuml;r vorgesehen haben, als Standardwerte in der Tabelle <b>tblStandardwerte<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_1052_010.png\" alt=\"Einstellen der Eigenschaft Marke auf den Wert DefaultValue, damit das betroffene Steuerelement beim Speichern von Standardwerten ber&uuml;cksichtigt wird\" width=\"499,5594\" height=\"341,2755\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Einstellen der Eigenschaft Marke auf den Wert DefaultValue, damit das betroffene Steuerelement beim Speichern von Standardwerten ber&uuml;cksichtigt wird<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Die hier vorgestellten Techniken erlauben es, komplette Formularinhalte als Standardwerte zu speichern und diese beim Anlegen neuer Datens&auml;tze als Vorlage zu verwenden. Es gibt noch eine Menge weiterer M&ouml;glichkeiten in diesem Zusammenhang. So k&ouml;nnte man einen Datensatz gezielt als Vorlage f&uuml;r einen neuen Datensatz verwenden, ohne zuvor einen Datensatz bearbeiten zu m&uuml;ssen, damit dessen Werte als Standardwerte in einem neuen Datensatz landen. Wie dies gelingt, zeigen wir im Beitrag <b>Datensatz-Vorlage per Mausklick <\/b>(<b>www.access-im-unternehmen.de\/1060<\/b>) in der n&auml;chsten Ausgabe.<\/p>\n<p>Aber auch die vorliegende L&ouml;sung k&ouml;nnen Sie noch anpassen &#8211; beispielsweise, indem Sie eine Funktion hinzuf&uuml;gen, mit welcher der Benutzer selbst angeben kann, f&uuml;r welche Steuerelemente die aktuellen Werte in die Tabelle <b>tblStandardwerte <\/b>geschrieben werden sollen. Hier m&uuml;sste man sich eine pfiffige M&ouml;glichkeit ausdenken, mit welcher der Benutzer die Steuerelemente daf&uuml;r markieren kann, ohne dass die Benutzeroberfl&auml;che allzu stark dadurch beeintr&auml;chtigt wird. Ein Kontextmen&uuml;-Eintrag k&auml;me hier beispielsweise in Frage.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DynamischeStandardwerte.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/9E226E37-DC31-47D7-A7A4-667083E37101\/aiu_1052.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In vielen F&auml;llen k&ouml;nnen Sie dem Benutzer bei der Nutzung Ihrer Anwendung durch die Vorgabe von Standardwerten Arbeit abnehmen. Oft kristallisiert sich aber erst sp&auml;ter heraus, welche die gew&uuml;nschten Standardwerte sind oder diese unterscheiden sich je nach Benutzer. Dann w&auml;re es praktisch, wenn die Benutzer selbst die Standardwerte f&uuml;r das Anlegen neuer Datens&auml;tze vorgeben k&ouml;nnten. Vielleicht m&ouml;chten Sie sogar, dass der n&auml;chste neue Datensatz die Werte des vorherigen Datensatzes als Standardwerte &uuml;bernimmt Wie dies gelingt, zeigt der vorliegende 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":[662016,66052016,44000023],"tags":[],"class_list":["post-55001052","post","type-post","status-publish","format-standard","hentry","category-662016","category-66052016","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Dynamische Standardwerte - 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\/Dynamische_Standardwerte\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dynamische Standardwerte\" \/>\n<meta property=\"og:description\" content=\"In vielen F&auml;llen k&ouml;nnen Sie dem Benutzer bei der Nutzung Ihrer Anwendung durch die Vorgabe von Standardwerten Arbeit abnehmen. Oft kristallisiert sich aber erst sp&auml;ter heraus, welche die gew&uuml;nschten Standardwerte sind oder diese unterscheiden sich je nach Benutzer. Dann w&auml;re es praktisch, wenn die Benutzer selbst die Standardwerte f&uuml;r das Anlegen neuer Datens&auml;tze vorgeben k&ouml;nnten. Vielleicht m&ouml;chten Sie sogar, dass der n&auml;chste neue Datensatz die Werte des vorherigen Datensatzes als Standardwerte &uuml;bernimmt Wie dies gelingt, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T15:24:37+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/32b0eacdd655400fb637490492fa4e5a\" \/>\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\\\/Dynamische_Standardwerte\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Dynamische Standardwerte\",\"datePublished\":\"2020-05-22T15:24:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/\"},\"wordCount\":2923,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/32b0eacdd655400fb637490492fa4e5a\",\"articleSection\":[\"2016\",\"5\\\/2016\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/\",\"name\":\"Dynamische Standardwerte - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/32b0eacdd655400fb637490492fa4e5a\",\"datePublished\":\"2020-05-22T15:24:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/32b0eacdd655400fb637490492fa4e5a\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/32b0eacdd655400fb637490492fa4e5a\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Standardwerte\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dynamische Standardwerte\"}]},{\"@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":"Dynamische Standardwerte - 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\/Dynamische_Standardwerte\/","og_locale":"de_DE","og_type":"article","og_title":"Dynamische Standardwerte","og_description":"In vielen F&auml;llen k&ouml;nnen Sie dem Benutzer bei der Nutzung Ihrer Anwendung durch die Vorgabe von Standardwerten Arbeit abnehmen. Oft kristallisiert sich aber erst sp&auml;ter heraus, welche die gew&uuml;nschten Standardwerte sind oder diese unterscheiden sich je nach Benutzer. Dann w&auml;re es praktisch, wenn die Benutzer selbst die Standardwerte f&uuml;r das Anlegen neuer Datens&auml;tze vorgeben k&ouml;nnten. Vielleicht m&ouml;chten Sie sogar, dass der n&auml;chste neue Datensatz die Werte des vorherigen Datensatzes als Standardwerte &uuml;bernimmt Wie dies gelingt, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T15:24:37+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/32b0eacdd655400fb637490492fa4e5a","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\/Dynamische_Standardwerte\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Dynamische Standardwerte","datePublished":"2020-05-22T15:24:37+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/"},"wordCount":2923,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/32b0eacdd655400fb637490492fa4e5a","articleSection":["2016","5\/2016","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/","url":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/","name":"Dynamische Standardwerte - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/32b0eacdd655400fb637490492fa4e5a","datePublished":"2020-05-22T15:24:37+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/32b0eacdd655400fb637490492fa4e5a","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/32b0eacdd655400fb637490492fa4e5a"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Standardwerte\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Dynamische Standardwerte"}]},{"@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\/55001052","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=55001052"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001052\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001052"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001052"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001052"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}