{"id":55000025,"date":"2001-08-01T00:00:00","date_gmt":"2020-05-06T15:17:00","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=25"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Verborgene_Feldeigenschaften_entdecken","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/","title":{"rendered":"Verborgene Feldeigenschaften entdecken"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/9bb748d36e9d476286e1a8036d7116c5\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Autor: Manfred Hoffbauer, D&uuml;sseldorf<\/p>\n<p><\/b><\/p>\n<p><b>Wer den Einstieg in die Programmierung mit VBA und das Objektmodell von Access erst mal geschafft hat, profitiert gleich mehrfach davon: Die grunds&auml;tzliche Vorgehensweise zur Programmierung von Tabellen, Abfragen, Formularen und Berichten ist fast immer die gleiche. Doch auch hier steckt der Teufel im Detail: Bei den verborgenen Feldeigenschaften gibt es die eine oder andere Ausnahme, die es zu kennen gilt.<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Die Beispiele in diesem Beitrag basieren auf der Verwendung der Data Access Objects (DAO). Um die Beispiele auch mit Microsoft Access 2000 nachvollziehen zu k&ouml;nnen, m&uuml;ssen Sie diesen Verweis aktivieren. &ouml;ffnen Sie dazu irgendein Modul in der Entwurfsansicht, und w&auml;hlen Sie den Befehl Extras ( Verweise. Kreuzen Sie dann den Eintrag Microsoft DAO 3.6 Object Library in der Liste an, und klicken Sie auf OK (siehe Bild 1). Wenn Sie die Beispieldatenbank zu diesem Beitrag &ouml;ffnen, ist der Verweis automatisch markiert. <\/p>\n<p><b><\/b><\/p>\n<p><IMG height=\"358\" src=\"..\/fileadmin\/_temp_\/{03CD8C72-47A4-466D-A121-3D0194CC8512}\/pic001.png\" width=\"467\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p>Eine Tabelle hat bei Microsoft Access zwei Ansichten: <\/p>\n<p>In der Datenansicht k&ouml;nnen Sie Datens&auml;tze hinzuf&uuml;gen, l&ouml;schen und bearbeiten. In der Entwurfsansicht definieren Sie die Felder, Datentypen und weitere Feldeigenschaften der Tabelle.<\/p>\n<p>Beide Ansichten stehen Ihnen auch in der Programmiersprache von Access zur Verf&uuml;gung. Mit Recordsets greift ein Programm auf die Daten einer Tabelle zu, w&auml;hrend die TableDef-Objekte die Entwurfseigenschaft einer Tabelle zug&auml;nglich machen.<\/p>\n<p>Die TableDef-Objekte enthalten sozusagen alle Eigenschaften, die Sie in der Entwurfsansicht einer Tabelle zuweisen k&ouml;nnen. Um beispielsweise die Eigenschaft G&uuml;ltigkeitsregel zu ver&auml;ndern, gehen Sie wie folgt vor:<\/p>\n<p><IMG height=\"378\" src=\"..\/fileadmin\/_temp_\/{03CD8C72-47A4-466D-A121-3D0194CC8512}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><IMG height=\"158\" src=\"..\/fileadmin\/_temp_\/{03CD8C72-47A4-466D-A121-3D0194CC8512}\/pic003.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<li>&ouml;ffnen Sie die Tabelle tblAufgaben aus der Beispieldatenbank dieses Beitrags in der Entwurfsansicht.<\/li>\n<li>W&auml;hlen Sie den Befehl Ansicht ( Eigenschaften, um das Eigenschaftsfenster der Tabelle zu &ouml;ffnen (siehe Bild 2).<\/li>\n<li>Geben Sie f&uuml;r die Eigenschaft G&uuml;ltigkeitsregel den folgenden Wert ein: [Wiedervorlage]&gt;Datum()<\/li>\n<li>Speichern Sie die Tabelle.<\/li>\n<p>Access pr&uuml;ft nun beim Speichern eines Datensatzes automatisch, ob das Wiedervorlagedatum gr&ouml;&szlig;er als das aktuelle Tagesdatum ist. Falls dies einmal nicht zutreffen sollte, kann der Datensatz nicht gespeichert werden.<\/p>\n<p>Die gleiche Eigenschaft k&ouml;nnen Sie auch mit VBA abfragen. Durch das Bet&auml;tigen der Tastenkombination Strg + G &ouml;ffnen Sie den Direktbereich von Access (siehe Bild 3). Geben Sie nun die folgende Anweisung ein.<\/p>\n<pre> currentdb.TableDefs(\"tblAufgaben\").ValidationRule<\/pre>\n<p>Mit dem Bet&auml;tigen der Ein-gabetaste f&uuml;hrt Access den Befehl aus und zeigt das folgende Ergebnis an:<\/p>\n<pre>[Wiedervorlage]&gt;Date()<\/pre>\n<p>Die eingegebene Zeile besteht aus dem Aufruf des -Befehls und einem Ausdruck. Der -Befehl veranlasst Access, den Wert des darauf folgenden Ausdrucks im Direktbereich (fr&uuml;her: Debug-Fenster) anzuzeigen.<\/p>\n<p>Der Ausdruck besteht aus der Aneinanderreihung von zwei Objekten und einer Eigenschaft. Das erste Objekt CurrentDB stellt die aktuelle Datenbank dar. Das Objekt TableDefs(&#8222;tblAufgaben&#8220;) ist quasi die Entwurfsansicht der Tabelle tblAufgaben. Die Eigenschaft ValidationRule enth&auml;lt die G&uuml;ltigkeitsregel.<\/p>\n<p>Mit der gleichen Technik k&ouml;nnen Sie die G&uuml;ltigkeitsregel &auml;ndern:<\/p>\n<pre>currentdb.TableDefs(\"tblAufgaben\").ValidationRule = \"[Wiedervorlage]&gt;=Date()\"<\/pre>\n<h3>Hinweis<\/h3>\n<p>Beachten Sie bitte, dass die per VBA durchgef&uuml;hrten &auml;nderungen am Tabellenentwurf erst nach dem Schlie&szlig;en und erneuten &ouml;ffnen der Tabelle sichtbar werden. ( <\/p>\n<p>Der gr&ouml;&szlig;te Teil des Tabellenentwurfs ist f&uuml;r die Definition der Datenfelder und ihrer Eigenschaften bedingt. Hier legen Sie zun&auml;chst den Feldnamen, den Datentyp und eine Beschreibung fest. Im unteren Teil des Entwurfsfensters befindet sich au&szlig;erdem ein Bereich, der die Eigenschaften des jeweils aktuellen Datenfeldes anzeigt. Hierzu z&auml;hlen die G&uuml;ltigkeitsregel, die Feldgr&ouml;&szlig;e und das Format.<\/p>\n<p><IMG height=\"321\" src=\"..\/fileadmin\/_temp_\/{03CD8C72-47A4-466D-A121-3D0194CC8512}\/pic004.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p>Um ohne Programmierung die G&uuml;ltigkeitsregel eines Feldes zu ver&auml;ndern, gehen Sie wie folgt vor:<\/p>\n<li>Klicken Sie im Tabellenentwurf auf das Feld Erledigt (siehe Bild 4).<\/li>\n<li>Geben Sie den folgenden Ausdruck in die Eigenschaft G&uuml;ltigkeitsregel ein: &gt;=Datum().<\/li>\n<p>Nach dem Speichern der Tabelle akzeptiert Access nur noch solche Werte f&uuml;r das Feld Erledigt, die gr&ouml;&szlig;er als das Tagesdatum oder gleich dem Tagesdatum sind. Um die gleiche Eigenschaft per VBA abzufragen, geben Sie folgende Anweisung in den Direktbereich ein:<\/p>\n<pre> currentdb.TableDefs(\"tblAufgaben\").fields(\"Erledigt\").ValidationRule<\/pre>\n<p><IMG height=\"321\" src=\"..\/fileadmin\/_temp_\/{03CD8C72-47A4-466D-A121-3D0194CC8512}\/pic005.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p>Mit dem Bet&auml;tigen der Eingabetaste f&uuml;hrt Access die Anweisung aus und zeigt als Ergebnis den Ausdruck &gt;=Date() an.<\/p>\n<p>Auch diese Anweisung fragt zun&auml;chst mit dem CurrentDB-Objekt die aktuelle Datenbank und mit TableDefs(&#8222;tblAufgaben&#8220;)  die Tabelle tblAufgaben ab. Darauf folgt &#8211; wiederum durch einen Punkt aneinandergereiht &#8211; der Zugriff auf die Fields-Auflistung des TableDef-Objekts. Durch die Angabe des Feldnamens Erledigt wird wiederum ein bestimmtes Objekt der Fields-Auflistung spezifiziert. Mit ValidationRule geben Sie schlie&szlig;lich die abzufragende Eigenschaft an.<\/p>\n<p>Durch die Angabe eines anderen Tabellen- oder Feldnamens k&ouml;nnen Sie jederzeit auch die ValidationRule-Eigenschaft anderer Objekte abfragen. Sie m&uuml;ssen allerdings darauf achten, dass Sie nur die Feldnamen verwenden, die in der jeweiligen Tabelle auch vorkommen. Andernfalls meldet Access einen Fehler bei der Ausf&uuml;hrung des Befehls.<\/p>\n<h2>Weitere Eigenschaften<\/h2>\n<p>Mit der Eingabe des Punktes in den Direktbereich &ouml;ffnet Access eine Liste der Eigenschaften und Methoden des jeweiligen Objektes. Wenn Sie also den Punkt hinter TableDefs(&#8222;tblAufgaben&#8220;)  eingegeben haben, &ouml;ffnet Access automatisch eine Liste der Eigenschaften und Methoden f&uuml;r TableDef-Objekte (siehe Bild 5).<\/p>\n<p><!--30percent--><\/p>\n<p>Bei der Eingabe des Punktes hinter Fields(&#8222;Erledigt&#8220;) &ouml;ffnet Access automatisch eine Liste der Eigenschaften und Methoden von Fields-Objekten. Hier finden Sie beispielsweise die Name-, die ValidationRule- und die ValidationText-Eigenschaft.<\/p>\n<p>Einige Eigenschaften aus dem Tabellenentwurf suchen Sie hier jedoch vergeblich. So fehlen beispielsweise die Feldbeschreibung, das Format und das Eingabeformat. Diese Eigenschaften k&ouml;nnen Sie nur &uuml;ber die Properties-Auflistung des Fields-Objektes abfragen.<\/p>\n<p>Einige Feldeigenschaften k&ouml;nnen Sie &uuml;ber das Fields-Objekt leider nicht direkt abfragen. So f&uuml;hrt die Anweisung<\/p>\n<pre> currentdb.TableDefs(\"tblAufgaben\").Fields(\"Erledigt\").Description<\/pre>\n<p>zu einer Fehlermeldung von Access. Die richtige Syntax zur Abfrage der Feldbeschreibung lautet wie folgt:<\/p>\n<pre> CurrentDB.TableDefs(\"tblAufgaben\").Fields(\"Erledigt\").Properties(\"Description\")<\/pre>\n<p><IMG height=\"126\" src=\"..\/fileadmin\/_temp_\/{03CD8C72-47A4-466D-A121-3D0194CC8512}\/pic006.png\" width=\"179\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  Diesen Fehler meldet Access beim Zugriff auf Properties, die noch nicht angelegt  wurden.<\/span><\/b><\/p>\n<p>Aber Vorsicht! Auch diese Anweisung kann zu einer Fehlermeldung f&uuml;hren (siehe Bild 6). Die obige Anweisung greift auf das Feld Erledigt der Tabelle tblAufgaben zu. Access kann das Description-Property nur dann finden, wenn Sie im Tabellenentwurf eine Beschreibung f&uuml;r das Feld eingegeben haben.<\/p>\n<h2>Abfrage der ValidationRule alsProperty<\/h2>\n<p>&uuml;ber die Properties-Auflistung k&ouml;nnen Sie prinzipiell alle Eigenschaften eines Datenfeldes abfragen. Dazu geh&ouml;ren auch die integrierten Eigenschaften wie beispielsweise die ValidationRule. Statt direkt auf die gleichnamige Eigenschaft des Fields-Objektes zuzugreifen, k&ouml;nnen Sie alternativ auch die Properties-Auflistung verwenden:<\/p>\n<pre> currentdb.TableDefs(\"tblAufgaben\").fields(\"Erledigt\").Properties(\"ValidationRule\")<\/pre>\n<p>Die Properties-Auflistung eines Feldes enth&auml;lt die fest integrierten und von den Benutzereingaben abh&auml;ngige Properties. Je nachdem, ob der Anwender eine Beschreibung eingegeben hat oder nicht, ist die Description-Property vorhanden. Die Abfrage aller Properties eines Datenfeldes erfolgt am besten in einer Schleife mit dem Aufbau wie in der Prozedur aus Quellcode 1.<\/p>\n<pre>Public Sub ReadPropertiesFromOneField()\r\n    Dim PropertyCounter As Integer\r\n    Dim tdf As DAO.TableDef\r\n    Dim fld As DAO.Field\r\n    Dim dbs As Database\r\n    '' Verweis auf aktuelle Datenbank\r\n    Set dbs = CurrentDb\r\n    '' tblAufgaben als tableDef-Objekt &ouml;ffnen\r\n    Set tdf = dbs.TableDefs(\"tblAufgaben\")\r\n    For PropertyCounter = 0 To tdf.Fields(\"Erledigt\").Properties.Count - 1\r\n        Debug.Print PropertyCounter, tdf.Fields(\"Erledigt\")._            Properties(PropertyCounter).Name\r\n    Next PropertyCounter<\/pre>\n<p>Die Schleife durchl&auml;uft alle Properties des Feldes Erledigt in der Tabelle tblAufgaben. Mit der Debug.Print-Anweisung werden der aktuelle Z&auml;hler und der Name der aktuellen Eigenschaft des Fensters im Direktbereich von Access (fr&uuml;her Debug-Fenster) ausgegeben.<\/p>\n<h2>Property-Werte anzeigen<\/h2>\n<p>Neben den Namen sind die Werte der Property-Eigenschaften besonders interessant. Nach den unter Access &uuml;blichen Regeln f&uuml;r die Verwendung von Eigenschaften m&uuml;ssten sich die Feldwerte mit folgender Anweisung ausgeben lassen:<\/p>\n<pre>Debug.Print tdf.Fields(\"Erledigt\").Properties(PropertyCounter).Value<\/pre>\n<p>Wenn Sie den Ausdruck jedoch ohne zus&auml;tzliche Ma&szlig;nahmen in der oben aufgef&uuml;hrten Debug.Print-Anweisung erg&auml;nzen, l&auml;uft Access bei einigen Eigenschaften auf einen Fehler. Die Ursache besteht darin, dass einige der Eigenschaften Datentypen haben, die Access nicht per Debug.Print anzeigen kann.<\/p>\n<p>Insbesondere der Wert der ersten Eigenschaft Value kann &uuml;ber das TableDef-Objekt nicht abgefragt werden. Der Wert des Datenfeldes ist in der Entwurfsansicht nicht verf&uuml;gbar. Aber auch das Property GUID hat einen Datentyp, den Debug.Print nicht anzeigen kann.<\/p>\n<p>Mit dem Gebrauch der On-Error-Anweisung k&ouml;nnen Sie die l&auml;stigen Fehlermeldungen umgehen. Mit den folgenden Anweisungen k&ouml;nnen Sie alle Werte anzeigen lassen, die Debug.Print handhaben kann:<\/p>\n<pre>    On Error Resume Next\r\n    Debug.Print , df.Fields(\"Erledigt\")        .Properties(PropertyCounter)        .Value\r\n    On Error GoTo 0<\/pre>\n<p>Eine Auflistung der h&auml;ufig vorkommenden Properties und ihrer Datentypen finden Sie in Tabelle 1.<\/p>\n<p>Wert<\/p>\n<p>Bezeichnung<\/p>\n<p>Datentyp<\/p>\n<p> 0<\/p>\n<p>Value<\/p>\n<p>dbText<\/p>\n<p> 1<\/p>\n<p>Attributes<\/p>\n<p>dbLong<\/p>\n<p> 2<\/p>\n<p>CollatingOrder<\/p>\n<p>dbInteger<\/p>\n<p> 3<\/p>\n<p>Type<\/p>\n<p>dbInteger<\/p>\n<p> 4<\/p>\n<p>Name<\/p>\n<p>dbMemo<\/p>\n<p> 5<\/p>\n<p>OrdinalPosition<\/p>\n<p>dbInteger<\/p>\n<p> 6<\/p>\n<p>Size<\/p>\n<p>dbLong<\/p>\n<p> 7<\/p>\n<p>SourceField<\/p>\n<p>dbMemo<\/p>\n<p> 8<\/p>\n<p>SourceTable <\/p>\n<p>dbMemo<\/p>\n<p> 9<\/p>\n<p>ValidateOnSet <\/p>\n<p>dbBoolean<\/p>\n<p> 10<\/p>\n<p> DataUpdatable <\/p>\n<p>dbBoolean<\/p>\n<p> 11<\/p>\n<p> ForeignName <\/p>\n<p>dbMemo<\/p>\n<p> 12<\/p>\n<p> DefaultValue<\/p>\n<p>dbMemo<\/p>\n<p> 13<\/p>\n<p> ValidationRule<\/p>\n<p>dbMemo<\/p>\n<p> 14<\/p>\n<p> ValidationText<\/p>\n<p>dbMemo<\/p>\n<p> 15<\/p>\n<p> Required<\/p>\n<p>dbBoolean<\/p>\n<p> 16<\/p>\n<p> AllowZeroLength<\/p>\n<p>dbBoolean<\/p>\n<p> 17<\/p>\n<p> FieldSize<\/p>\n<p>dbLong<\/p>\n<p> 18<\/p>\n<p> OriginalValue<\/p>\n<p>dbText<\/p>\n<p> 19<\/p>\n<p> VisibleValue<\/p>\n<p>dbText<\/p>\n<p> 20<\/p>\n<p> ColumnWidth<\/p>\n<p>dbInteger<\/p>\n<p> 21<\/p>\n<p> ColumnOrder<\/p>\n<p>dbInteger<\/p>\n<p> 22<\/p>\n<p> ColumnHidden<\/p>\n<p>dbBoolean<\/p>\n<p> 23<\/p>\n<p> DisplayControl<\/p>\n<p>dbInteger<\/p>\n<p> 24<\/p>\n<p> UnicodeCompression<\/p>\n<p>dbBoolean<\/p>\n<p> 25<\/p>\n<p> GUID<\/p>\n<p>dbBinary<\/p>\n<p><b>Tab. 1: Auflistung der &uuml;blichen Properties und ihrer Werte<\/b><\/p>\n<p>Um die Werte in Tabelle 1 zu erhalten, m&uuml;ssen Sie die Type-Eigenschaft jedes einzelnen Property-Elements auswerten. Die Funktion FieldType wandelt den als Integer-Wert &uuml;bergebenen Feldtypen in eine Zeichenkette um, die f&uuml;r den Anwender leichter zu interpretieren ist:<\/p>\n<pre>Function FieldType _(intType As Integer) As String\r\n  Select Case intType\r\n    Case dbBigInt\r\n      FieldType = \"dbBigInt\"\r\n    Case dbBinary\r\n      FieldType = \"dbBinary\"\r\n    Case dbBoolean\r\n      FieldType = \"dbBoolean\"\r\n    Case Else\r\n      FieldType = \"**\" & intType & \"**\"\r\n  End Select\r\nEnd Function<\/pre>\n<p>Die beschriebene Funktion enth&auml;lt nur einige der Feldtypen. In der Beispieldatenbank finden Sie die komplette Funktion mit allen Feldtypen. Im Folgenden finden Sie eine Liste der anderen Feldtypen, die nicht in der Funktion ber&uuml;cksichtigt sind:<\/p>\n<p>dbByte, dbChar, dbInteger, dbLong, dbCurrency, dbFloat, dbLongBinary, dbDecimal, dbSingle, dbDouble, dbDate, dbText, dbLongBinary, dbMemo, dbGUID, dbNumeric, dbTime, dbVarBinary.<\/p>\n<p>Mit der FieldType-Funktion verf&uuml;gen Sie &uuml;ber eine gute Basis zur Analyse der Properties eines Datenfeldes. Um nun alle Properties aller Datenfelder der Tabelle tblAufgaben auszulesen, verwenden Sie die Prozedur aus Quellcode 2.<\/p>\n<p>Die Anlage neuer Properties kann entweder &uuml;ber die Benutzeroberfl&auml;che oder VBA erfolgen. In der Benutzeroberfl&auml;che &ouml;ffnen Sie einfach das Tabellenentwurfsfenster, und geben Sie den Wert f&uuml;r eine Eigenschaft ein. Weiter oben haben Sie bereits verschiedene Eigenschaften ver&auml;ndert und die Werte f&uuml;r die Fields- oder die Properties-Auflistung ausgelesen.<\/p>\n<pre>Public Sub ReadPropertiesFromAllFields()\r\n    Dim PropertyCounter As Integer\r\n    Dim FieldCounter As Integer\r\n    Dim tdf As DAO.TableDef\r\n    Dim fld As DAO.Field\r\n    Dim dbs As Database\r\n    '' Verweis auf aktuelle Datenbank\r\n    Set dbs = CurrentDb\r\n    '' tblAufgaben als tableDef-Objekt &ouml;ffnen\r\n    Set tdf = dbs.TableDefs(\"tblAufgaben\")\r\n    '' Schleife f&uuml;r alle Felder\r\n    For FieldCounter = 0 To tdf.Fields.Count - 1\r\n        '' Field-Objekt zuweisen\r\n        Set fld = tdf.Fields(FieldCounter)\r\n        '' Schleife f&uuml;r alle Properties\r\n        For PropertyCounter = 0 To tdf.Fields(FieldCounter).Properties.Count - 1\r\n            Debug.Print tdf.Fields(FieldCounter).Name, PropertyCounter, _\r\n                tdf.Fields(FieldCounter).Properties(PropertyCounter).Name, _\r\n                FieldType(tdf.Fields(FieldCounter).Properties(PropertyCounter).Type)\r\n        Next PropertyCounter\r\n    Next FieldCounter\r\n    Set tdf = Nothing\r\n    Set dbs = Nothing<\/pre>\n<p>Die Anlage von Eigenschaften &uuml;ber VBA gliedert sich in zwei Schritte: Sie m&uuml;ssen zuerst &uuml;berpr&uuml;fen, ob die Eigenschaft bereits vorhanden ist. Falls ja, k&ouml;nnen Sie ihr einfach einen neuen Wert zuweisen.<\/p>\n<p>Falls die Eigenschaft noch nicht vorhanden ist, m&uuml;ssen Sie sie zun&auml;chst mit CreateProperty anlegen. Die Zuweisung eines Werts kann dann implizit mit der CreateProperty-Methode oder explizit durch eine eigene Wertzuweisung erfolgen. Die Prozedur aus Quellcode 3 zeigt den Ablauf im Detail.<\/p>\n<p>Die Prozedur ChangeDescription &uuml;berpr&uuml;ft f&uuml;r jedes Feld der Tabelle tblAufgaben, ob die Eigenschaft Description bereits angelegt wurde. Dazu wird in der Funktion IsInPropertyList der Name jedes Elements der Properties-Auflistung mit dem Text Description verglichen. Falls ein solches Element gefunden wird, gibt die Funktion den Wert True zur&uuml;ck. <\/p>\n<pre>Public Sub ChangeDescription()\r\n    Dim dbs As DAO.Database\r\n    Dim tdf As DAO.TableDef\r\n    Dim fld As DAO.Field\r\n    Dim prpNew As DAO.Property\r\n    Dim sDescriptionAdd As String\r\n    Dim sDescriptionOld As String\r\n    Set dbs = CurrentDb\r\n    Set tdf = dbs.TableDefs(\"tblAufgaben\")\r\n    '' Schleife f&uuml;r alle Felder\r\n    For Each fld In tdf.Fields\r\n        sDescriptionAdd = \"Feld: \" & fld.Name\r\n        If IsInPropertyList(fld, \"Description\") Then\r\n            '' Falls sie noch nicht vorhanden ist, neue Beschreibung erg&auml;nzen\r\n            sDescriptionOld = fld.Properties(\"Description\").Value\r\n            If InStr(1, sDescriptionOld, sDescriptionAdd) = 0 Then\r\n                fld.Properties(\"Description\").Value = sDescriptionAdd _                    & \" \" & sDescriptionOld\r\n            End If\r\n        Else\r\n            Set prpNew = fld.CreateProperty(\"Description\", dbText, \"Feld: \" _                & fld.Name)\r\n            fld.Properties.Append prpNew\r\n        End If\r\n    Next fld\r\nEnd Sub\r\nQuellcode 3<\/pre>\n<p>Falls die Prozedur ChangeDescription feststellt, dass die Eigenschaft Description vorhanden ist, kann sie ihr einfach einen neuen Wert zuweisen. Andernfalls muss die Eigenschaft zun&auml;chst mit der folgenden Anweisung angelegt werden:<\/p>\n<pre>Set prpNew = fld.CreateProperty (\"Description\", dbText, \"Feld: \" & fld.Name)<\/pre>\n<p>Die CreateProperty-Methode des Field-Objektes erzeugt eine neue Eigenschaft. Als Name wird hier Description, als Datentyp dbText und als Wert die angegebene Zeichenkette verwendet. Das Hinzuf&uuml;gen der Eigenschaft zum aktuellen Field-Objekt erledigt die folgende Anweisung:<\/p>\n<pre>fld.Properties.Append prpNew\r\nPublic Function IsInPropertyList(fld As DAO.Field, sPropertyName As String) As Boolean\r\n    Dim prpCounter As Integer\r\n    prpCounter = 0\r\n    IsInPropertyList = False\r\n    While prpCounter &lt; fld.Properties.Count And Not IsInPropertyList\r\n        If fld.Properties(prpCounter).Name = sPropertyName Then\r\n            IsInPropertyList = True\r\n        End If\r\n        prpCounter = prpCounter + 1\r\n    Wend\r\nEnd Function<\/pre>\n<p>Mit den hier vorgestellten Funktionen und Prozeduren k&ouml;nnen Sie einen Blick hinter die Kulissen einer Tabelle werfen und die Eigenschaften der einzelnen Felder der Tabelle anzeigen. <\/p>\n<p>Kombiniert mit wenigen Kenntnissen zum Thema Berichte k&ouml;nnen Sie leicht eine Funktion programmieren, mit der Sie alle Eigenschaften der Felder einer Tabelle ordentlich aufgelistet in einem Bericht ausgeben k&ouml;nnen.<\/p>\n<p>Dazu sollten Sie allerdings die Prozeduren ein wenig &auml;ndern. Die beschriebenen Prozeduren dienen dazu, die Eigenschaften von festgelegten Feldern festgelegter Tabellen auszulesen.<\/p>\n<p>Sie k&ouml;nnen die Prozeduren leicht flexibler machen, indem Sie die festen Werte durch Parameter ersetzen, die Sie der Prozedur beim Aufruf &uuml;bergeben.<\/p>\n<p>Bei der Prozedur ReadPropertiesFromAllFields (Quellcode 2) ersetzen Sie beispielsweise den Tabellennamen &#8222;tblAufgaben&#8220; durch den Parameter Tabellenname und &auml;ndern den Aufruf der Prozedur folgenderma&szlig;en:<\/p>\n<pre>Public Sub RedPropertiesFormAllFields _(Tabellenname as String)<\/pre>\n<p>Mit dem Aufruf<\/p>\n<pre>ReadPropertiesFromAllFields(\"tblAufgaben\")<\/pre>\n<p>zeigen Sie nun zwar ebenfalls alle Eigenschaften aller Felder der Tabelle tblAufgaben an. Allerdings k&ouml;nnen Sie auch jede beliebige anderen Tabelle angeben.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer den Einstieg in die Programmierung mit VBA und das Objektmodell von Access erst mal geschafft hat, profitiert gleich mehrfach davon: Die grunds&auml;tzliche Vorgehensweise zur Programmierung von Tabellen, Abfragen, Formularen und Berichten ist fast immer die gleiche. Doch auch hier steckt der Teufel imDetail: Bei den verborgenen Feldeigenschaften gibt es die eine oder andere Ausnahme, die es zu kennen gilt.<\/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":[662001,66042001,44000025],"tags":[],"class_list":["post-55000025","post","type-post","status-publish","format-standard","hentry","category-662001","category-66042001","category-VBA_und_Programmiertechniken"],"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>Verborgene Feldeigenschaften entdecken - 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\/Verborgene_Feldeigenschaften_entdecken\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Verborgene Feldeigenschaften entdecken\" \/>\n<meta property=\"og:description\" content=\"Wer den Einstieg in die Programmierung mit VBA und das Objektmodell von Access erst mal geschafft hat, profitiert gleich mehrfach davon: Die grunds&auml;tzliche Vorgehensweise zur Programmierung von Tabellen, Abfragen, Formularen und Berichten ist fast immer die gleiche. Doch auch hier steckt der Teufel imDetail: Bei den verborgenen Feldeigenschaften gibt es die eine oder andere Ausnahme, die es zu kennen gilt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/9bb748d36e9d476286e1a8036d7116c5\" \/>\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=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Verborgene Feldeigenschaften entdecken\",\"datePublished\":\"2020-05-06T15:17:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/\"},\"wordCount\":1966,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/9bb748d36e9d476286e1a8036d7116c5\",\"articleSection\":[\"2001\",\"4\\\/2001\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/\",\"name\":\"Verborgene Feldeigenschaften entdecken - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/9bb748d36e9d476286e1a8036d7116c5\",\"datePublished\":\"2020-05-06T15:17:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/9bb748d36e9d476286e1a8036d7116c5\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/9bb748d36e9d476286e1a8036d7116c5\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verborgene_Feldeigenschaften_entdecken\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verborgene Feldeigenschaften entdecken\"}]},{\"@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":"Verborgene Feldeigenschaften entdecken - 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\/Verborgene_Feldeigenschaften_entdecken\/","og_locale":"de_DE","og_type":"article","og_title":"Verborgene Feldeigenschaften entdecken","og_description":"Wer den Einstieg in die Programmierung mit VBA und das Objektmodell von Access erst mal geschafft hat, profitiert gleich mehrfach davon: Die grunds&auml;tzliche Vorgehensweise zur Programmierung von Tabellen, Abfragen, Formularen und Berichten ist fast immer die gleiche. Doch auch hier steckt der Teufel imDetail: Bei den verborgenen Feldeigenschaften gibt es die eine oder andere Ausnahme, die es zu kennen gilt.","og_url":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:00+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/9bb748d36e9d476286e1a8036d7116c5","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Verborgene Feldeigenschaften entdecken","datePublished":"2020-05-06T15:17:00+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/"},"wordCount":1966,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/9bb748d36e9d476286e1a8036d7116c5","articleSection":["2001","4\/2001","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/","url":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/","name":"Verborgene Feldeigenschaften entdecken - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/9bb748d36e9d476286e1a8036d7116c5","datePublished":"2020-05-06T15:17:00+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/9bb748d36e9d476286e1a8036d7116c5","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/9bb748d36e9d476286e1a8036d7116c5"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Verborgene_Feldeigenschaften_entdecken\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Verborgene Feldeigenschaften entdecken"}]},{"@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\/55000025","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=55000025"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000025\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}