{"id":55001110,"date":"2017-12-01T00:00:00","date_gmt":"2021-03-18T12:37:18","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1110"},"modified":"2024-02-19T08:23:03","modified_gmt":"2024-02-19T08:23:03","slug":"null_leere_zeichenkette_nothing_und_co","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/","title":{"rendered":"Null, leere Zeichenkette, Nothing und Co."},"content":{"rendered":"<\/p>\n<p><b>In Datenbanken wie Microsoft Access gibt es einen entscheidenden Unterschied zwischen einem leeren Feld und einem Feld mit einer leeren Zeichenkette. Und es gibt noch mehr interessante Dinge rund um dieses Thema, zum Beispiel die Funktion IsNull, die Funktion Nz und weitere VBA-Elemente, die sich mit \u00e4hnlichen Dingen befassen &#8211; wie etwa Nothing, Empty oder Missing. Dieser Beitrag erl\u00e4utert diese VBA-Elemente und zeigt die wichtigsten Unterschiede und Einsatzzwecke auf.<\/b><\/p>\n<p>Wer hat sich beim Einstieg in die Access-Welt nicht mindestens einmal in die Nesseln gesetzt, als er versucht hat, ein leeres Textfeld mit dem Wert &#8222;&#8220; (f\u00fcr eine leere Zeichenkette) zu vergleichen<\/p>\n<p>Schauen wir uns ein einfaches Szenario an: Das Formular aus Bild 1 ist an eine Tabelle mit einem Prim\u00e4rschl\u00fcsselfeld und den beiden Textfeldern <b>Vorname <\/b>und <b>Nachname <\/b>gebunden. Wenn der Benutzer auf die Schaltfl\u00e4che <b>Speichern <\/b>klickt, sollen die Felder validiert werden. Verl\u00e4uft die Validierung erfolgreich, wird der Datensatz gespeichert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1110_001.png\" alt=\"Ein einfaches Formular mit einem Textfeld\" width=\"424,7115\" height=\"177,0341\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 1: Ein einfaches Formular mit einem Textfeld<\/span><\/b><\/p>\n<p>Dazu legen wir zun\u00e4chst die Prozedur f\u00fcr die Schaltfl\u00e4che <b>cmdSpeichern <\/b>an, welche schlicht eventuell vorhandene \u00c4nderungen am Datensatz speichert:<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>cmdSpeichern_Click()\n     On Error Resume <span style=\"color: blue;\">Next<\/span>\n     RunCommand acCmdSaveRecord\n     Select Case Err.Number\n         <span style=\"color: blue;\">Case <\/span>0, 2501\n         <span style=\"color: blue;\">Case Else<\/span>\n             <span style=\"color: blue;\">MsgBox<\/span> \"Fehler \" &amp; Err.Number &amp; \" \" _\n                 &amp; Err.Description\n     <span style=\"color: blue;\">End Select<\/span>\n     <span style=\"color: blue;\">On Error GoTo<\/span> 0\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Die Fehlerbehandlung haben wir hinzuf\u00fcgt, weil der Versuch, den Datensatz zu speichern, beim Abbrechen mit der nachfolgend vorgestellten Prozedur einen Fehler ausl\u00f6sen w\u00fcrde. Die folgende Ereignisprozedur wird durch das Ereignis <b>Vor Aktualisierung <\/b>ausgel\u00f6st. Es pr\u00fcft, ob das Feld <b>Nachname <\/b>eine leere Zeichenkette enth\u00e4lt. Ist das nicht der Fall, soll eine entsprechende Meldung erscheinen, das Textfeld den Fokus erhalten und die Aktualisierung durch Setzen des Parameters <b>Cancel <\/b>auf den Wert <b>True <\/b>abgebrochen werden:<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>Form_BeforeUpdate(Cancel<span style=\"color: blue;\"> As Integer<\/span>)\n     <span style=\"color: blue;\">If <\/span>Me!Nachname = \"\"<span style=\"color: blue;\"> Then<\/span>\n         <span style=\"color: blue;\">MsgBox<\/span> \"Der Nachname ist eine leere Zeichenkette.\", \u00b5 \n                                                   vbOKOnly\n         Me!Nachname.SetFocus\n         Cancel = <span style=\"color: blue;\">True<\/span>\n     <span style=\"color: blue;\">End If<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Wenn wir dies ausprobieren, geschieht &#8211; nichts! Obwohl doch das Textfeld leer ist! Warum Weil das Textfeld tats\u00e4chlich leer ist und der Inhalt genau nicht einer leeren Zeichenkette entspricht.<\/p>\n<h2>Die Access IsNull()-Funktion<\/h2>\n<p>Diesen Sachverhalt pr\u00fcfen wir nicht mit <b>=&#8220;&#8220;<\/b>, und auch nicht mit <b>= Null<\/b>. Und auch das <b>Is<\/b>-Schl\u00fcsselwort kommt hier nicht zum Einsatz, <b>Is Null <\/b>hilft also auch nicht. Hier gibt es vielmehr zwei M\u00f6glichkeiten. Die erste ist, zus\u00e4tzlich zum Vergleich mit der leeren Zeichenkette auch noch die Funktion <b>IsNull <\/b>einzusetzen:<\/p>\n<pre>...\n<span style=\"color: blue;\">If <\/span>IsNull(Me!Nachname)<span style=\"color: blue;\"> Then<\/span>\n     <span style=\"color: blue;\">MsgBox<\/span> \"Der Nachname ist Null.\", vbOKOnly\n     Me!Nachname.SetFocus\n     Cancel = <span style=\"color: blue;\">True<\/span>\n<span style=\"color: blue;\">End If<\/span>\n...<\/pre>\n<p>Wenn wir den Datensatz nun speichern wollen, erscheint die gew\u00fcnschte Meldung (s. Bild 2). Die Bedingung <b>Me!Nachname = &#8222;&#8220; <\/b>wird \u00fcbrigens mit den Standardeinstellungen nicht eintreten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1110_002.png\" alt=\"Es wurde ein Textfeld mit dem Inhalt Null erkannt.\" width=\"424,7115\" height=\"181,2414\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 2: Es wurde ein Textfeld mit dem Inhalt Null erkannt.<\/span><\/b><\/p>\n<p>Dies erreichen Sie erst, wenn zwei bestimmte Eigenschaften des Feldes im Tabellenentwurf spezielle Werte aufweisen. Die Eigenschaft <b>Eingabe erforderlich <\/b>muss dabei den Wert <b>Ja <\/b>aufweisen, die Eigenschaft <b>Leere Zeichenfolge <\/b>ebenfalls den Wert <b>Ja <\/b>(s. Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1110_003.png\" alt=\"Einstellung f\u00fcr leere Zeichenketten\" width=\"424,7115\" height=\"420,5881\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 3: Einstellung f\u00fcr leere Zeichenketten<\/span><\/b><\/p>\n<p>Erst dann k\u00f6nnen Sie tats\u00e4chlich eine leere Zeichenfolge in das Feld <b>Nachname<\/b> eingeben &#8211; siehe Bild 4. Um auf Nummer Sicher zu gehen, was die zugrunde liegende Tabelle angeht, k\u00f6nnen Sie auch einfach eine Kombination der beiden Bedingungen nutzen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1110_004.png\" alt=\"Eingabe einer leeren Zeichenkette\" width=\"499,6607\" height=\"206,7258\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 4: Eingabe einer leeren Zeichenkette<\/span><\/b><\/p>\n<pre><span style=\"color: blue;\">If <\/span>Me!Nachname = \"\" Or IsNull(Me!Nachname)<span style=\"color: blue;\"> Then<\/span>\n     <span style=\"color: blue;\">MsgBox<\/span> \"Der Nachname ist Null oder eine leere  Zeichenkette.\", vbOKOnly\n     Me!Nachname.SetFocus\n     Cancel = <span style=\"color: blue;\">True<\/span>\n<span style=\"color: blue;\">End If<\/span><\/pre>\n<h2>Die Nz()-Funktion<\/h2>\n<p>Und es geht noch eine Nummer eleganter: Die Funktion <b>Nz()<\/b> erwartet den zu pr\u00fcfenden Ausdruck, also beispielsweise ein Textfeld wie in unserem Beispiel. Wenn der Inhalt des Textfeldes <b>Null <\/b>ist, liefert die Funktion den Wert zur\u00fcck, der standardm\u00e4\u00dfig f\u00fcr diesen Datentyp verwendet wird. Bei Textfeldern ist das eine leere Zeichenkette.<\/p>\n<p>Sie k\u00f6nnen allerdings auch explizit angeben, welcher Wert zur\u00fcckgegeben werden soll, wenn der gepr\u00fcfte Ausdruck den Wert <b>Null <\/b>liefert. In diesem Fall geben Sie als zweiten Parameter etwa die leere Zeichenkette an und pr\u00fcfen dann nur noch, ob die Funktion eine leere Zeichenkette zur\u00fcckgeliefert hat:<\/p>\n<pre><span style=\"color: blue;\">If <\/span>Nz(Me!Nachname, \"\") = \"\"<span style=\"color: blue;\"> Then<\/span>\n     <span style=\"color: blue;\">MsgBox<\/span> \"Der Nachname ist Null oder eine leere  Zeichenkette.\", vbOKOnly\n     Me!Nachname.SetFocus\n     Cancel = <span style=\"color: blue;\">True<\/span>\n<span style=\"color: blue;\">End If<\/span><\/pre>\n<p>Bei einem Feld, das entweder den Wert <b>Null <\/b>oder den Wert <b>0 <\/b>aufweisen darf, wird es interessanter. Dazu f\u00fcgen wir der Tabelle ein Fremdschl\u00fcsselfeld namens <b>AnredeID <\/b>hinzu, mit der der Benutzer einen der Datens\u00e4tze der Tabelle <b>tblAnreden <\/b>ausw\u00e4hlen k\u00f6nnen soll. F\u00fcr das Kombinationsfeld, mit dem wir dies erledigen wollen, hinterlegen wir die folgende Datensatzherkunft:<\/p>\n<pre>SELECT 0, \"&lt;Ausw\u00e4hlen&gt;\" \nFROM tblAnreden \nUNION \nSELECT [tblAnreden].[AnredeID], [tblAnreden].[Anrede] \nFROM tblAnreden;<\/pre>\n<p>Dies liefert, wenn wir als Standardwert den Wert <b>0 <\/b>einstellen, die Auswahl aus Bild 5 f\u00fcr einen neuen Datensatz. Wenn wir die beiden Textfelder ausf\u00fcllen und das Kombinationsfeld so beibehalten, gibt es Fehler <b>3201 <\/b>(<b>Der Datensatz kann nicht hinzugef\u00fcgt oder ge\u00e4ndert werden, da ein Datensatz in der Tabelle &#8220;&#8220;tblAnreden&#8220;&#8220; mit diesem Datensatz in Beziehung stehen muss.<\/b>). Diesen wollen wir nat\u00fcrlich verhindern, und zwar mit einer passenden Validierung. Damit der Fehler nicht ausgel\u00f6st wird, nehmen wir diesen zun\u00e4chst in die Ereignisprozedur der Schaltfl\u00e4che <b>cmdSpeichern <\/b>hinzu:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1110_005.png\" alt=\"Ein Kombinationsfeld, das nicht den Wert 0 oder Null liefern soll\" width=\"499,6607\" height=\"217,7025\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 5: Ein Kombinationsfeld, das nicht den Wert 0 oder Null liefern soll<\/span><\/b><\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>cmdSpeichern_Click()\n     ...\n     Select Case Err.Number\n         <span style=\"color: blue;\">Case <\/span>2501, 3201\n     ...\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Danach legen wir die folgende <b>If&#8230;Then<\/b>-Bedingung in der Methode <b>Form_BeforeUpdate <\/b>an:<\/p>\n<pre>    <span style=\"color: blue;\">If <\/span>IsNull(Me.AnredeID)<span style=\"color: blue;\"> Then<\/span>\n         <span style=\"color: blue;\">MsgBox<\/span> \"W\u00e4hlen Sie eine Anrede aus.\", vbOKOnly\n         Me!AnredeID.SetFocus\n         Cancel = <span style=\"color: blue;\">True<\/span>\n     <span style=\"color: blue;\">End If<\/span><\/pre>\n<p>Wenn wir nun allerdings einen neuen Datensatz anlegen, die beiden Textfelder ausf\u00fcllen, den Standardwert des Kombinationsfeldes beibehalten und auf die Schaltfl\u00e4che <b>cmdSpeichern <\/b>klicken, geschieht nichts! Der Datensatz wird nicht gespeichert, aber es erscheint auch keine Fehlermeldung. Der Grund ist einfach: Sobald Sie den Datensatz in den Bearbeitungsmodus versetzen, was geschieht, wenn Sie eines der Felder \u00e4ndern, wird der urspr\u00fcngliche Wert, also <b>Null<\/b>, durch den als Standardwert festgelegten Wert ersetzt, also <b>0<\/b>. Den Wert <b>0 <\/b>fangen wir nicht ab, also wird der Datensatz einfach kommentarlos nicht gespeichert. Also pr\u00fcfen wir einfach auf den Wert <b>0<\/b> statt auf <b>Null<\/b> (und klappen das Kombinationsfeld auch noch auf, wenn es den Wert <b>0 <\/b>enth\u00e4lt):<\/p>\n<pre><span style=\"color: blue;\">If <\/span>Nz(Me!AnredeID, 0) = 0<span style=\"color: blue;\"> Then<\/span>\n     <span style=\"color: blue;\">MsgBox<\/span> \"W\u00e4hlen Sie eine Anrede aus.\", vbOKOnly\n     Me!AnredeID.SetFocus\n     Me!AnredeID.Dropdown\n     Cancel = <span style=\"color: blue;\">True<\/span>\n<span style=\"color: blue;\">End If<\/span><\/pre>\n<p>Nun kann es allerdings sein, dass der Benutzer einfach das Kombinationsfeld leert. Dies w\u00fcrde bedeuten, dass der Wert <b>Null <\/b>im entsprechenden Feld der Datenbank gespeichert wird, denn wir pr\u00fcfen in der Validierung nicht auf dieses Feld und in der mit referenzieller Integrit\u00e4t festgelegten Beziehung ist der Wert <b>Null<\/b> auch erlaubt. Wir m\u00f6chten aber weder den Wert <b>0 <\/b>noch <b>Null <\/b>im Feld <b>AnredeID <\/b>haben. Also pr\u00fcfen wir auf beide:<\/p>\n<pre><span style=\"color: blue;\">If <\/span>Nz(Me!AnredeID, 0) = 0<span style=\"color: blue;\"> Then<\/span><\/pre>\n<p>Wenn <b>AnredeID <\/b>den Wert <b>Null <\/b>hat, wird es durch die Funktion <b>Nz <\/b>in <b>0 <\/b>konvertiert, anderenfalls hat es gegebenenfalls durch den Standardwert bereits den Wert <b>0<\/b>. In beiden F\u00e4llen erscheint eine entsprechende Meldung.<\/p>\n<p>Da es sich bei dem Feld <b>AnredeID <\/b>um ein Zahlenfeld handelt, k\u00f6nnen Sie sogar den zweiten Parameter der <b>Nz<\/b>-Funktion weglassen &#8211; diese liefert dann ohnehin den Wert <b>0 <\/b>als Standardwert f\u00fcr Zahlenwerte, die <b>Null <\/b>sind:<\/p>\n<pre><span style=\"color: blue;\">If <\/span>Nz(Me!AnredeID) = 0<span style=\"color: blue;\"> Then<\/span>\n...<\/pre>\n<h2>Null in Variant-Variablen<\/h2>\n<p>Der Wert <b>Null <\/b>kann nicht nur in Datenbankfeldern vorkommen, sondern nat\u00fcrlich auch in VBA-Variablen. Allerdings gibt es nur einen einzigen Variablendatentyp, der den Wert Null aufnehmen kann, und das ist der Datentyp <b>Variant<\/b>. Das folgende Beispiel zeigt den Unterschied etwa zwischen dem Datentyp <b>Variant <\/b>und dem Datentyp <b>String<\/b>:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>VariantNull()\n     <span style=\"color: blue;\">Dim <\/span>strTest<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Dim <\/span>var<span style=\"color: blue;\"> As Variant<\/span>\n     strTest = \"\"\n     strTest = 123\n     strTest = Null\n     var = \"\"\n     var = 123\n     var = Null\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>So nimmt die <b>String<\/b>-Variable nat\u00fcrlich die Zeichenkette auf und auch die Zahl, wobei diese in eine Zeichenkette umgewandelt wird. Aber die Zuweisung des Wertes <b>Null <\/b>liefert einen Fehler (s. Bild 6). Bei der <b>Variant<\/b>-Variablen <b>var <\/b>hingegen erfolgen alle Zuweisungen ohne Fehler. Die Zahl wird als Zahl gespeichert und der Wert <b>Null <\/b>als <b>Null<\/b>. Dies macht den Datentyp <b>Variant <\/b>nat\u00fcrlich pr\u00e4destiniert f\u00fcr F\u00e4lle, in denen der \u00fcbergebene Wert gleich <b>Null <\/b>werden kann.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1110_006.png\" alt=\"Fehler beim Zuweisen des Wertes Null zu einer String-Variablen\" width=\"424,7115\" height=\"241,078\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 6: Fehler beim Zuweisen des Wertes Null zu einer String-Variablen<\/span><\/b><\/p>\n<h2>Leere Variant-Variablen<\/h2>\n<p>Wo wir schon beim Datentyp <b>Variant <\/b>sind, k\u00f6nnen wir uns auch gleich noch seine Besonderheiten ansehen. Wenn wir eine <b>String<\/b>-Variable deklarieren, wird diese automatisch mit dem Wert <b>&#8222;&#8220; <\/b>initialisiert. Die folgende Prozedur gibt die Inhalte der Variablen aus:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>Initialisieren()\n     <span style=\"color: blue;\">Dim <\/span>strTest<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Dim <\/span>intTest<span style=\"color: blue;\"> As Integer<\/span>\n     <span style=\"color: blue;\">Debug.Print<\/span> strTest\n     <span style=\"color: blue;\">Debug.Print<\/span> intTest\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis lautet:<\/p>\n<pre>      (leere Zeichenkette)\n0<\/pre>\n<p>Dass es sich um eine leere Zeichenkette handelt, weisen wir einfacher so nach:<\/p>\n<pre><span style=\"color: blue;\">Debug.Print<\/span> strTest = \"\"<\/pre>\n<p>Was aber geschieht, wenn wir eine <b>Variant<\/b>-Variable initialisieren und diese abfragen, ohne sie vorher zu f\u00fcllen<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>VariantInitialisieren()\n     <span style=\"color: blue;\">Dim <\/span>var<span style=\"color: blue;\"> As Variant<\/span>\n     <span style=\"color: blue;\">Debug.Print<\/span> var\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Dies gibt scheinbar eine leere Zeichenkette im Direktfenster aus. Also auch hier die Gegenprobe:<\/p>\n<pre><span style=\"color: blue;\">Debug.Print<\/span> var = \"\"\n   Wahr<\/pre>\n<p>Jetzt probieren wir mal etwas Verr\u00fccktes:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>VariantInitialisieren()\n     <span style=\"color: blue;\">Dim <\/span>var<span style=\"color: blue;\"> As Variant<\/span>\n     <span style=\"color: blue;\">Debug.Print<\/span> var = \"\"\n     <span style=\"color: blue;\">Debug.Print<\/span> var = 0\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Dies liefert:<\/p>\n<pre>Wahr\nWahr<\/pre>\n<p>Aber wie kann eine Variable gleichzeitig den Wert einer leeren Zeichenkette (<b>&#8222;&#8220;<\/b>) und <b>0 <\/b>aufweisen Dahinter steckt etwas mehr: Eine <b>Variant<\/b>-Variable wird n\u00e4mlich nicht etwa gleichzeitig mit den Werten <b>&#8222;&#8220; <\/b>und <b>0 <\/b>initialisiert und gibt sich je nach Anforderung als das eine oder andere aus.<\/p>\n<p>Nein: Eine <b>Variant<\/b>-Variable wird mit dem Wert <b>Empty <\/b>initialisiert, und <b>Empty <\/b>liefert mal die leere Zeichenkette und mal den Wert <b>0<\/b>!<\/p>\n<p>Deswegen k\u00f6nnen Sie auch testen, ob eine Variant-Variable noch leer ist, indem Sie diese einfach mit <b>Empty <\/b>vergleichen:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>VariantEmpty()\n     <span style=\"color: blue;\">Dim <\/span>var<span style=\"color: blue;\"> As Variant<\/span>\n     <span style=\"color: blue;\">Debug.Print<\/span> var = Empty\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<h2>Ist Empty gleich Nothing<\/h2>\n<p>Wenn Sie bereits einmal mit Objekten programmiert haben, wissen Sie, dass diese, wenn sie nicht initialisiert wurden, den Wert <b>Nothing <\/b>enthalten. Das kann beispielsweise passieren, wenn Sie mit der Microsoft XML-Bibliothek arbeiten und mit der <b>SelectSingleNode<\/b>-Funktion eines der Elemente referenzieren wollen (Verweis auf die Bibliothek <b>Microsoft XML, x.0 <\/b>erforderlich):<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>XMLNothing()\n     <span style=\"color: blue;\">Dim <\/span>objXML<span style=\"color: blue;\"> As <\/span>MSXML2.DOMDocument60\n     <span style=\"color: blue;\">Dim <\/span>objNode<span style=\"color: blue;\"> As <\/span>MSXML2.IXMLDOMNode\n     <span style=\"color: blue;\">Set<\/span> objXML = <span style=\"color: blue;\">New<\/span> MSXML2.DOMDocument60\n     objXML.loadXML (\"&lt;test&gt;&lt;unterelement \/&gt;&lt;\/test&gt;\")\n     <span style=\"color: blue;\">Set<\/span> objNode = objXML.selectSingleNode(\"test\")\n     <span style=\"color: blue;\">Debug.Print<\/span> objNode.XML\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Diese Prozedur gibt Folgendes im Direktfenster aus:<\/p>\n<pre>&lt;test&gt;&lt;unterelement\/&gt;&lt;\/test&gt;<\/pre>\n<p>\u00e4ndern Sie die vorletzte Zeile wie folgt:<\/p>\n<pre><span style=\"color: blue;\">Set<\/span> objNode = objXML.selectSingleNode(\"unterelement\")<\/pre>\n<p>Dies liefert den Fehler aus Bild 7. Das Element <b>unterelement <\/b>ist zwar vorhanden, aber es kann nicht in der ersten Ebene gefunden werden. Wie k\u00f6nnen wir diesen Fehler verhindern Nat\u00fcrlich, indem wir den korrekten XPath-Ausdruck eintragen (hier beispielsweise <b>test\/unterelement<\/b>).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1110_007.png\" alt=\"Die Objektvariable wurde nicht zugewiesen.\" width=\"424,7115\" height=\"241,078\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 7: Die Objektvariable wurde nicht zugewiesen.<\/span><\/b><\/p>\n<p>Aber manchmal sind erwartete Elemente ja auch einfach nicht vorhanden. Dann pr\u00fcfen wir einfach nach der Zuweisung, ob <b>objNode <\/b>ein Objekt enth\u00e4lt!<\/p>\n<p>Die folgende Variante gibt den Inhalt des Elements aus, wenn dieses gefunden wurde (<b>Not objNode Is Nothing<\/b>). Anderenfalls erscheint der Text <b>Nicht gefunden.<\/b>:<\/p>\n<pre><span style=\"color: blue;\">Set<\/span> objNode = objXML.selectSingleNode(\"unterelement\")\n<span style=\"color: blue;\">If <\/span><span style=\"color: blue;\">Not<\/span> objNode Is Nothing<span style=\"color: blue;\"> Then<\/span>\n     <span style=\"color: blue;\">Debug.Print<\/span> objNode.XML\n<span style=\"color: blue;\">Else<\/span>\n     <span style=\"color: blue;\">Debug.Print<\/span> \"Nicht gefunden.\"\n<span style=\"color: blue;\">End If<\/span><\/pre>\n<p>Mit der Eigenschaft <b>Nothing <\/b>und dem Vergleich \u00fcber den Vergleichsoperator <b>Is <\/b>k\u00f6nnen Sie also ermitteln, ob einer Objektvariablen ein Objekt zugewiesen wurde.<\/p>\n<h2>Variant und Nothing<\/h2>\n<p>K\u00f6nnen wir auch eine <b>Variant<\/b>-Variable mit <b>Nothing <\/b>vergleichen Ja, aber nur, wenn dieser auch mit <b>Set <\/b>ein Objekt zugewiesen wurde (oder auch eben nicht). Auf das Beispiel mit dem XML-Element bezogen w\u00fcrde dies bedeuten, dass wir statt des Datentyps <b>IXMLDOMNode <\/b>einfach <b>Variant <\/b>angeben:<\/p>\n<pre><span style=\"color: blue;\">Dim <\/span>varNode<span style=\"color: blue;\"> As Variant<\/span><\/pre>\n<p>Wichtig ist, dass wir versuchen, dieser Variablen ein Objekt mit der <b>Set<\/b>-Methode zuweisen. Damit k\u00f6nnen wir nun mit <b>objNode Is Nothing <\/b>pr\u00fcfen, ob <b>objNode <\/b>ein Objekt referenziert.<\/p>\n<p>Mit <b>Empty <\/b>k\u00f6nnen wir diese <b>Variant<\/b>-Variable nun nicht mehr vergleichen:<\/p>\n<pre><span style=\"color: blue;\">If <\/span><span style=\"color: blue;\">Not<\/span> varNode = Empty<span style=\"color: blue;\"> Then<\/span>\n     ...\n<span style=\"color: blue;\">End If<\/span><\/pre>\n<p>Dies liefert den Fehler aus Bild 8. Allerdings auch nur, nachdem wir bereits versucht haben, der Variablen mit Set ein Objekt zuzuweisen! Wenn wir diese Bedingung vor der <b>Set<\/b>-Anweisung unterbringen, liefert sie die erwartete Antwort. Eine <b>Variant<\/b>-Variable wird also erst durch die <b>Set<\/b>-Anweisung, ob erfolgreich oder nicht, zu einer Objekt-Variablen. Sie k\u00f6nnen den Datentyp allerdings auch wieder ver\u00e4ndern, indem Sie <b>varNode<\/b> beispielsweise einen String zuweisen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1110_008.png\" alt=\"Fehlermeldung beim Test einer Objekt-Variant-Variablen auf Empty\" width=\"424,7115\" height=\"241,078\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 8: Fehlermeldung beim Test einer Objekt-Variant-Variablen auf Empty<\/span><\/b><\/p>\n<pre>varNode = \"bla\"\n<span style=\"color: blue;\">If <\/span><span style=\"color: blue;\">Not<\/span> varNode = Empty<span style=\"color: blue;\"> Then<\/span>\n     <span style=\"color: blue;\">Debug.Print<\/span> \"varNode ist Empty\"\n<span style=\"color: blue;\">End If<\/span><\/pre>\n<h2>Optionale Parameter mit IsMissing pr\u00fcfen<\/h2>\n<p>Eine letzte Funktion, die wir uns in diesem Zusammenhang ansehen wollen, ist die Funktion <b>IsMissing<\/b>. Wenn Sie VBA-Prozeduren oder -Funktionen programmieren, k\u00f6nnen Sie am Ende einen oder mehrere optionale Parameter angeben. Das sieht dann etwas wie folgt aus:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>VariantIsMissing(<span style=\"color: blue;\">Optional<\/span> var<span style=\"color: blue;\"> As Variant<\/span>)\n     <span style=\"color: blue;\">If <\/span>IsMissing(var)<span style=\"color: blue;\"> Then<\/span>\n         <span style=\"color: blue;\">Debug.Print<\/span> \"var ist leer.\"\n     <span style=\"color: blue;\">Else<\/span>\n         <span style=\"color: blue;\">Debug.Print<\/span> \"var = \" &amp; var\n     <span style=\"color: blue;\">End If<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur pr\u00fcft, ob der optionale Parameter \u00fcbergeben wurde oder nicht. Falls nicht, erscheint der Text <b>var ist leer.<\/b>, sonst der entsprechende Inhalt. Mit der folgenden Prozedur testen wir dies f\u00fcr einen nicht \u00fcbergebenen Parameter:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>Test_VariantIsMissingOhne()\n     VariantIsMissing\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Und hier noch die Variante mit Parameter:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>Test_VariantIsMissingMit()\n     VariantIsMissing \"Optionaler Parameter\"\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Wichtig ist in diesem Zusammenhang, dass der Parameter den Datentyp <b>Variant <\/b>aufweisen muss, damit die <b>IsMissing<\/b>-Funktion korrekt arbeitet. Bei folgender Konfiguration wird beispielswese beide Male der zweite Teil der <b>If&#8230;Then<\/b>-Bedingung ausgef\u00fchrt:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>StringIsMissing(<span style=\"color: blue;\">Optional<\/span> strTest<span style=\"color: blue;\"> As String<\/span>)\n     <span style=\"color: blue;\">If <\/span>IsMissing(strTest)<span style=\"color: blue;\"> Then<\/span>\n         <span style=\"color: blue;\">Debug.Print<\/span> \"strTest ist leer.\"\n     <span style=\"color: blue;\">Else<\/span>\n         <span style=\"color: blue;\">Debug.Print<\/span> \"strTest = \" &amp; strTest\n     <span style=\"color: blue;\">End If<\/span>\n<span style=\"color: blue;\">End Sub<\/span>\n<span style=\"color: blue;\">Public Sub <\/span>Test_StringIsMissingOhne()\n     StringIsMissing\n<span style=\"color: blue;\">End Sub<\/span>\n<span style=\"color: blue;\">Public Sub <\/span>Test_StringIsMissingMit()\n     StringIsMissing \"Optionaler Parameter\"\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<h2>IsEmpty<\/h2>\n<p>Fehlt noch die <b>IsEmpty<\/b>-Funktion. Diese pr\u00fcft, ob eine Variable bereits initialisiert wurde. Im folgenden Beispiel liefert die Funktion nur f\u00fcr die <b>Variant<\/b>-Variable den Wert <b>True<\/b>. Der String wird ja mit <b>&#8222;&#8220; <\/b>initialisiert, das Objekt ist leer:<\/p>\n<pre><span style=\"color: blue;\">Public Sub <\/span>TestIsEmpty()\n     <span style=\"color: blue;\">Dim <\/span>strTest<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Dim <\/span>var<span style=\"color: blue;\"> As Variant<\/span>\n     <span style=\"color: blue;\">Dim <\/span>obj<span style=\"color: blue;\"> As <\/span>MSXML2.DOMDocument60\n     <span style=\"color: blue;\">Debug.Print<\/span> \"IsEmpty(strText): \" &amp; IsEmpty(strTest)\n     <span style=\"color: blue;\">Debug.Print<\/span> \"IsEmpty(var): \" &amp; IsEmpty(var)\n     <span style=\"color: blue;\">Debug.Print<\/span> \"IsEmpty(obj): \" &amp; IsEmpty(obj)\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Null.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/2802717D-E83B-4AAF-9C76-0F9D262C8F97\/aiu_1110.zip\">Download<\/a><\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Datenbanken wie Microsoft Access gibt es einen entscheidenden Unterschied zwischen einem leeren Feld und einem Feld mit einer leeren Zeichenkette. Und es gibt noch mehr interessante Dinge rund um dieses Thema, zum Beispiel die Funktion IsNull, die Funktion Nz und weitere VBA-Elemente, die sich mit &auml;hnlichen Dingen befassen &#8211; wie etwa  Nothing, Empty oder Missing. Dieser Beitrag erl&auml;utert diese VBA-Elemente und zeigt die wichtigsten Unterschiede und Einsatzzwecke auf.<\/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":[662017,66062017,44000025],"tags":[],"class_list":["post-55001110","post","type-post","status-publish","format-standard","hentry","category-662017","category-66062017","category-VBA_und_Programmiertechniken"],"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>Leere Felder mit Null, leeren Zeichenkette, Nothing und Co. unterscheiden<\/title>\n<meta name=\"description\" content=\"Unter Access kann ein vermeintlich leeres Feld oder Objekt verschiedene Werte enthalten - Null, Nothing, eine leere Zeichenkette oder andere.\" \/>\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\/null_leere_zeichenkette_nothing_und_co\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Null, leere Zeichenkette, Nothing und Co.\" \/>\n<meta property=\"og:description\" content=\"Unter Access kann ein vermeintlich leeres Feld oder Objekt verschiedene Werte enthalten - Null, Nothing, eine leere Zeichenkette oder andere.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-18T12:37:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-19T08:23:03+00:00\" \/>\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\\\/null_leere_zeichenkette_nothing_und_co\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/null_leere_zeichenkette_nothing_und_co\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Null, leere Zeichenkette, Nothing und Co.\",\"datePublished\":\"2021-03-18T12:37:18+00:00\",\"dateModified\":\"2024-02-19T08:23:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/null_leere_zeichenkette_nothing_und_co\\\/\"},\"wordCount\":1833,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"2017\",\"6\\\/2017\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/null_leere_zeichenkette_nothing_und_co\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/null_leere_zeichenkette_nothing_und_co\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/null_leere_zeichenkette_nothing_und_co\\\/\",\"name\":\"Leere Felder mit Null, leeren Zeichenkette, Nothing und Co. unterscheiden\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2021-03-18T12:37:18+00:00\",\"dateModified\":\"2024-02-19T08:23:03+00:00\",\"description\":\"Unter Access kann ein vermeintlich leeres Feld oder Objekt verschiedene Werte enthalten - Null, Nothing, eine leere Zeichenkette oder andere.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/null_leere_zeichenkette_nothing_und_co\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/null_leere_zeichenkette_nothing_und_co\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/null_leere_zeichenkette_nothing_und_co\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Null, leere Zeichenkette, Nothing und Co.\"}]},{\"@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":"Leere Felder mit Null, leeren Zeichenkette, Nothing und Co. unterscheiden","description":"Unter Access kann ein vermeintlich leeres Feld oder Objekt verschiedene Werte enthalten - Null, Nothing, eine leere Zeichenkette oder andere.","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\/null_leere_zeichenkette_nothing_und_co\/","og_locale":"de_DE","og_type":"article","og_title":"Null, leere Zeichenkette, Nothing und Co.","og_description":"Unter Access kann ein vermeintlich leeres Feld oder Objekt verschiedene Werte enthalten - Null, Nothing, eine leere Zeichenkette oder andere.","og_url":"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-03-18T12:37:18+00:00","article_modified_time":"2024-02-19T08:23:03+00:00","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\/null_leere_zeichenkette_nothing_und_co\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Null, leere Zeichenkette, Nothing und Co.","datePublished":"2021-03-18T12:37:18+00:00","dateModified":"2024-02-19T08:23:03+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/"},"wordCount":1833,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["2017","6\/2017","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/","url":"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/","name":"Leere Felder mit Null, leeren Zeichenkette, Nothing und Co. unterscheiden","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2021-03-18T12:37:18+00:00","dateModified":"2024-02-19T08:23:03+00:00","description":"Unter Access kann ein vermeintlich leeres Feld oder Objekt verschiedene Werte enthalten - Null, Nothing, eine leere Zeichenkette oder andere.","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/null_leere_zeichenkette_nothing_und_co\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Null, leere Zeichenkette, Nothing und Co."}]},{"@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\/55001110","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=55001110"}],"version-history":[{"count":4,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001110\/revisions"}],"predecessor-version":[{"id":88075299,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001110\/revisions\/88075299"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}