{"id":55000644,"date":"2009-06-01T00:00:00","date_gmt":"2020-05-22T22:23:01","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=644"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Schnelle_Domaenenfunktionen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/","title":{"rendered":"Schnelle Dom&auml;nenfunktionen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/4a3ed3bad02041c0b7aedcf77e0a1d53\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Die Dom&auml;nenfunktionen von Access sind nicht gerade als Performance-Wunder bekannt. In manchen Konstellationen sind sie zwar ausreichend schnell, in der Regel lohnt sich jedoch der Einsatz von Ersatzfunktionen &#8211; mit dem Vorteil, dass man diese auch noch den eigenen Bed&uuml;rfnissen anpassen kann. Dieser Artikel stellt Alternativen zu Funktionen wie DLookup, DMax und Co. vor.<\/b><\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">DLookup<\/p>\n<p>Die <b>DLookup<\/b>-Funktion ist ein einfach zu bedienendes Werkzeug zum Ermitteln einzelner Werte aus Tabellen oder Abfragen. Sie erwartet schlicht und einfach den Namen des Feldes, der den Wert liefern soll, die Bezeichnung der Tabelle oder Abfrage und eine Bedingung, deren Syntax dem Teil hinter dem <b>WHERE<\/b>-Schl&uuml;sselwort einer Abfrage entspricht. Ein einfacher Aufruf sieht beispielsweise so aus:<\/p>\n<pre>DLookup(&quot;Nachname&quot;, &quot;tblKontakte&quot;, &micro;\r\n&quot;KontaktID = 1&quot;)<\/pre>\n<p>Dieser Aufruf gibt den Wert des Feldes <b>Nachname <\/b>des Datensatzes der Tabelle <b>tblKontakte <\/b>zur&uuml;ck, dessen Feld <b>KontaktID <\/b>den Wert <b>1 <\/b>aufweist.<\/p>\n<p>Wenn Sie diesen Ausdruck beispielsweise hinter einer <b>Debug.Print<\/b>-Anweisung in das Direktfenster eingeben und mit der Eingabetaste ausf&uuml;hren, erscheint postwendend der gew&uuml;nschte Wert. Dies ist zum Beispiel ein Einsatzzweck, f&uuml;r den die <b>DLookup<\/b>-Funktion ausreichend schnell ist beziehungsweise wo die gegen&uuml;ber anderen Varianten schlechtere Performance nicht auff&auml;llt &#8211; wenn sie &uuml;berhaupt schlechter ist, denn gerade bei einfachen Aufrufen ist <b>DLookup <\/b>oft sogar die schnellste M&ouml;glichkeit.<\/p>\n<p>Es hapert eher an Stellen, wo <b>DLookup <\/b>oft aufgerufen werden soll, also etwa innerhalb einer Schleife oder als Bestandteil einer Abfrage, oder wo gro&szlig;e Tabellen im Spiel sind. Dies liegt daran, dass <b>DLookup <\/b>im Hintergrund gr&uuml;ndlich arbeitet: Die Funktion &ouml;ffnet eine Instanz der aktuellen Datenbank, erstellt ein Snapshot-Recordset, filtert dieses auf Basis der &uuml;bergebenen Parameter und liefert schlie&szlig;lich den Wert zur&uuml;ck. &Uuml;berdies stehen die Dom&auml;nenfunktionen im Verdacht, die erzeugten Objekte anschlie&szlig;end nicht sauber zu entsorgen.<\/p>\n<p><b>FLookup<\/b><\/p>\n<p>All dies erledigen wir mit einer Ersatzfunktion namens <b>FLookup<\/b>. Es gibt im Web eine Menge solcher Ersatzfunktionen, die mitunter auch andere Namen wie beispielsweise <b>ELookup <\/b>tragen. Einige ersetzen die Dom&auml;nenfunktionen schlichtweg, andere erweitern deren Funktion &#8211; darauf kommen wir sp&auml;ter zur&uuml;ck.<\/p>\n<p>Die <b>FLookup<\/b>-Funktion aus Listing 1 bildet die Funktionsweise der <b>DLookup<\/b>-Funktion ab. Sie erwartet die gleichen Parameter und setzt diese zu einem geeigneten SQL-Ausdruck zusammen. Um diesen auszuf&uuml;hren, erzeugt die Funktion ein <b>Database<\/b>&#8211; und ein <b>Recordset<\/b>-Objekt auf Basis der SQL-Anweisung. Genau wie <b>DLookup <\/b>liefert auch diese Funktion den Wert <b>Null <\/b>zur&uuml;ck, wenn kein passender Datensatz gefunden werden kann.<\/p>\n<p class=\"kastentabelleheader\">Listing 1: FLookup, Version 1<\/p>\n<pre>Function FLookup(ByVal sFieldName As String, _\r\n    ByVal sSource As String, _\r\n    Optional ByVal sCriteria As String = vbNullString) _\r\n    As Variant\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim strSQL As String\r\n    Set db = CurrentDb\r\n    strSQL = &quot;SELECT &quot; &amp; sFieldName &amp; &quot; FROM &quot; &amp; sSource\r\n    If Len(sCriteria) &gt; 0 Then\r\n        strSQL = strSQL &amp; &quot; WHERE &quot; &amp; sCriteria\r\n    End If\r\n    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)\r\n    If rst.EOF Then\r\n        FLookup = Null\r\n    Else\r\n        FLookup = rst.Fields(0).Value\r\n    End If\r\n    rst.Close\r\n    Set rst = Nothing\r\n    Set db = Nothing\r\nEnd Function<\/pre>\n<p>Wenn Sie sich die Performance dieser Funktion einmal genau ansehen, stellen Sie schnell fest, dass <b>DLookup <\/b>nicht unbedingt langsamer als <b>FLookup <\/b>ist. Kein Wunder: <b>FLookup <\/b>erledigt ja auch genau die gleichen Schritte wie <b>DLookup<\/b> und es r&auml;umt sogar noch die verwendeten Objektvariablen auf.<\/p>\n<p>Wie also k&ouml;nnen Sie auch noch die Performance dieser Routine verbessern Nun: Wenn Sie nur einen einzigen Aufruf von <b>FLookup <\/b>t&auml;tigen, sind die M&ouml;glichkeiten stark eingeschr&auml;nkt.<\/p>\n<p>Einzelne Aufrufe machen aber den Braten nicht fett, daher konzentriert sich die folgende Optimierung auf den mehrfachen Aufruf der Funktion <b>FLookup<\/b>.<\/p>\n<p>Welche der enthaltenen Schritte k&ouml;nnte man auslagern Die Parameter f&uuml;r den SQL-Ausdruck wechseln beim mehrfachen Aufruf &#8211; zumindest aber sollte dies f&uuml;r die <b>WHERE<\/b>-Bedingung der Fall sein. Es finden aber in der Regel alle Aufrufe im Kontext mit der aktuellen Datenbank statt &#8211; und die wird innerhalb der Funktion durch die Objektvariable <b>db <\/b>repr&auml;sentiert. Diese brauchen Sie also nur einmal vor dem ersten Aufruf zu f&uuml;llen und k&ouml;nnten dann im weiteren Verlauf darauf zur&uuml;ckgreifen.<\/p>\n<p><!--30percent--><\/p>\n<p>Es liegt nahe, das <b>Database<\/b>-Objekt in einer &ouml;ffentlichen Variablen zu speichern und diese etwa beim Start der Datenbankanwendung zu f&uuml;llen. Wenn diese Variable aber durch einen Fehler oder aus anderen Gr&uuml;nden geleert wird, l&ouml;st die Verwendung der Variablen in <b>FLookup <\/b>einen Fehler aus.<\/p>\n<p>Also muss eine andere Methode her, wobei der Verweis auf das Database-Objekt zwar auch in einer Variablen gespeichert, aber nicht direkt von dort ausgelesen wird. Die Deklaration der Variablen f&uuml;gen Sie einem Standardmodul hinzu:<\/p>\n<pre>Private m_Database As DAO.Database<\/pre>\n<p>Der Zugriff erfolgt &uuml;ber eine benutzerdefinierte Funktion namens <b>dbs<\/b>. Diese pr&uuml;ft, ob <b>m_Database <\/b>gef&uuml;llt ist. Falls nicht, holt sie dies nach und in beiden F&auml;llen wird der Verweis auf das <b>Database<\/b>-Objekt als Funktionswert zur&uuml;ckgeliefert:<\/p>\n<pre>Public Function dbs() As DAO.Database\r\n    If m_Database Is Nothing Then\r\n        Set m_Database = CurrentDb\r\n    End If\r\n    Set dbs = m_Database\r\nEnd Function<\/pre>\n<p>Danach wird <b>FLookup <\/b>erstens ein wenig leichtgewichtiger und zweitens viel schneller (s. Listing 2). Die Variable <b>db <\/b>f&auml;llt weg, stattdessen verwenden Sie die oben beschriebene Funktion <b>dbs<\/b>. Diese liefert jeweils den Verweis auf die aktuelle Datenbank zur&uuml;ck. Und dies spart schon m&auml;chtig Zeit, wenn Sie <b>FLookup <\/b>oft hintereinander aufrufen.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">FLookup erweitern<\/p>\n<p>Es gibt verschiedene Ans&auml;tze, die <b>DLookup<\/b>-Ersatzfunktion zu erweitern. Einer ist das Angeben einer Sortierung. <b>DLookup <\/b>liefert das entsprechend der Sortierung der Datenherkunft naheliegendste Ergebnis zur&uuml;ck. Wenn Sie also beispielsweise die ID der Person einer Tabelle ausgeben m&ouml;chten, deren Datens&auml;tze nach dem Alphabet sortiert sind, m&uuml;ssen Sie vorher eine entsprechende, gespeicherte Abfrage als Datenherkunft anlegen.<\/p>\n<p>Eine solche Funktion &#8211; wir nennen sie <b>OLookup <\/b>(f&uuml;r Order-Lookup) &#8211; sieht wie in Listing 3 aus. Sie besitzt einen weiteren Parameter namens <b>sOrder<\/b>, der einen Ausdruck wie in der <b>ORDER BY<\/b>-Klausel eines SQL-Ausdrucks erwartet &#8211; also beispielsweise <b>Vorname<\/b>, <b>Vorname DESC <\/b>oder <b>Vorname ASC<\/b>, wobei das Schl&uuml;sselwort <b>ASC <\/b>f&uuml;r die aufsteigende Reihenfolge automatisch verwendet wird.<\/p>\n<p class=\"kastentabelleheader\">Listing 5: Die Funktion FCount z&auml;hlt schnell die betroffenen Datens&auml;tze.<\/p>\n<pre>Function FCount(ByVal sFieldName As String, _\r\n    ByVal sSource As String, _\r\n    Optional ByVal sCriteria As String = vbNullString) _\r\n    As Variant\r\n    ...\r\n    strSQL = &quot;SELECT Count(&quot; &amp; sFieldName &amp; &quot;) AS C FROM &quot; _\r\n    &amp; sSource\r\n    If Len(sCriteria) &gt; 0 Then\r\n        strSQL = strSQL &amp; &quot; WHERE &quot; &amp; sCriteria\r\n    End If\r\n    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)\r\n    If rst.EOF Then\r\n        FCount = 0\r\n    Else\r\n        FCount = rst.Fields(0).Value\r\n    End If\r\n    ...\r\nEnd Function<\/pre>\n<p><b>Erweiterung f&uuml;r den Einsatz in Add-Ins<\/b><\/p>\n<p>Wer schon einmal ein Add-In f&uuml;r Access programmiert hat, das nicht nur auf die Daten der Host-Datenbank, sondern auch auf Daten in der Add-In-Datenbank zugreifen musste, kennt das Dilemma: <b>DLookup<\/b> greift immer auf die Daten der Host-Datenbank zu. Wenn man aber Informationen aus den Tabellen der Add-In-Datenbank selbst abfragen m&ouml;chte, kommt man mit <b>DLookup <\/b>nicht weiter.<\/p>\n<p>Auch hier verwendet man eine spezielle Variante der <b>FLookup<\/b>-Funktion: Diese hei&szlig;t <b>CLookup<\/b>, weil sie sich ihre Daten aus der &uuml;ber die Funktion <b>CodeDB <\/b>referenzierten Datenbank holt. Den f&uuml;r diesen Fall abgewandelten Code zeigt Listing 4.<\/p>\n<p><b>DCount und FCount<\/b><\/p>\n<p>Nat&uuml;rlich kommt in vielen Access-Datenbanken nicht nur die <b>FLookup<\/b>-Funktion zum Einsatz &#8211; auch die &uuml;brigen Dom&auml;nenfunktionen k&ouml;nnen Sie durch entsprechende benutzerdefinierte Funktionen ersetzen.<\/p>\n<p>Die Funktion <b>FCount<\/b> beispielsweise ersetzt die Funktion <b>DCount<\/b>. Der prinzipielle Aufbau &auml;hnelt dem der verschiedenen Varianten der <b>DLookup<\/b>-Funktion, allerdings wird die <b>Count<\/b>-Funktion in den SQL-Ausdruck eingebaut. Au&szlig;erdem soll die Funktion nicht den Wert <b>Null<\/b>, sondern <b>0 <\/b>zur&uuml;ckliefern, wenn die Datenherkunft keine Datens&auml;tze enth&auml;lt (s. Listing 5).<\/p>\n<p><b>Weitere Dom&auml;nenfunktionen<\/b><\/p>\n<p>Die &uuml;brigen Dom&auml;nenfunktionen k&ouml;nnen Sie nach dem gleichen Prinzip wie die vorherigen nachbauen &#8211; in der Beispieldatenbank finden Sie im Modul <b>mdlDomaenenfunktionen<\/b> zus&auml;tzlich zu den bereits beschriebenen noch die Funktionen <b>FMax <\/b>und <b>FMin<\/b>.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dom&auml;nenfunktionen lassen sich komplett durch benutzerdefinierte Funktionen ersetzen. In den meisten F&auml;llen erreicht man dadurch eine Performanceverbesserung, auf jeden Fall aber haben Sie so ein wenig mehr Einfluss auf das, was Access beim Ermitteln der gew&uuml;nschten Daten erledigt.<\/p>\n<p>Wenn Sie eine Anwendung verwenden, die mit den eingebauten Dom&auml;nenfunktionen durchsetzt ist, und Sie nicht alle Aufrufe durch den entsprechenden Aufruf der benutzerdefinierten Funktion ersetzen m&ouml;chten, k&ouml;nnen Sie sich das Leben ganz leicht machen: Dazu brauchen Sie nur den Namen der benutzerdefinierten Funktion wie etwa <b>FLookup <\/b>durch den Namen der eingebauten Funktion, hier <b>DLookup<\/b>, zu ersetzen. VBA sucht immer erst in den Modulen nach den aufgerufenen Funktionen, sodass diese die eingebauten Funktionen quasi &uuml;berschreiben. Probieren Sie es einmal aus, indem Sie eine Funktion wie <b>FLookup <\/b>in <b>DLookup <\/b>umbenennen (R&uuml;ckgabewerte nicht vergessen) und diese dann aufrufen.<\/p>\n<p class=\"kastentabelleheader\">Listing 2: FLookup mit verbesserter Performance<\/p>\n<p class=\"kastentabelleheader\">Listing 3: OLookup: DLookup mit Sortierung<\/p>\n<pre>Function OLookup(ByVal sFieldName As String, _\r\n    ByVal sSource As String, _\r\n    Optional ByVal sCriteria As String = vbNullString, _\r\n    Optional ByVal sOrder As String = vbNullString) _\r\n    As Variant\r\n    ...\r\n    strSQL = &quot;SELECT &quot; &amp; sFieldName &amp; &quot; FROM &quot; &amp; sSource\r\n    If Len(sCriteria) &gt; 0 Then\r\n        strSQL = strSQL &amp; &quot; WHERE &quot; &amp; sCriteria\r\n    End If\r\n    If Len(sOrder) &gt; 0 Then\r\n        strSQL = strSQL &amp; &quot; ORDER BY &quot; &amp; sOrder\r\n    End If\r\n    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)\r\n    If rst.EOF Then\r\n        OLookup = Null\r\n    Else\r\n        OLookup = rst.Fields(0).Value\r\n    End If\r\n    ...\r\nEnd Function\r\nFunction FLookup(ByVal sFieldName As String, _\r\n    ByVal sSource As String, _\r\n    Optional ByVal sCriteria As String = vbNullString) _\r\n    As Variant\r\n    Dim rst As DAO.Recordset\r\n    Dim strSQL As String\r\n    strSQL = &quot;SELECT &quot; &amp; sFieldName &amp; &quot; FROM &quot; &amp; sSource\r\n    If Len(sCriteria) &gt; 0 Then\r\n        strSQL = strSQL &amp; &quot; WHERE &quot; &amp; sCriteria\r\n    End If\r\n    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)\r\n    If rst.EOF Then\r\n        FLookup = Null\r\n    Else\r\n        FLookup = rst.Fields(0).Value\r\n    End If\r\n    rst.Close\r\n    Set rst = Nothing\r\nEnd Function<\/pre>\n<p class=\"kastentabelleheader\">Listing 4: CLookup: DLookup f&uuml;r Add-In-Datenbanken<\/p>\n<pre>Function CLookup(ByVal sFieldName As String, _\r\n    ByVal sSource As String, _\r\n    Optional ByVal sCriteria As String = vbNullString) _\r\n    As Variant\r\n    Dim db As DAO.Database\r\n    ...\r\n    Set db = CodeDb\r\n    strSQL = &quot;SELECT &quot; &amp; sFieldName &amp; &quot; FROM &quot; &amp; sSource\r\n    If Len(sCriteria) &gt; 0 Then\r\n        strSQL = strSQL &amp; &quot; WHERE &quot; &amp; sCriteria\r\n    End If\r\n    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)\r\n    If rst.EOF Then\r\n        CLookup = Null\r\n    Else\r\n        CLookup = rst.Fields(0).Value\r\n    End If\r\n    ...\r\nEnd Function<\/pre>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>SchnelleDomaenenfunktionen.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{107C764E-ED2E-4A0A-8566-7F4C4AB1516C}\/aiu_644.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Dom&auml;nenfunktionen von Access sind nicht gerade als Performance-Wunder bekannt. In manchen Konstellationen sind sie zwar ausreichend schnell, in der Regel lohnt sich jedoch der Einsatz  von Ersatzfunktionen &#8211; mit dem Vorteil, dass man diese auch noch an die eigenen Bed&uuml;rfnisse anpassen kann. Dieser Artikel stellt Alternativen zu Funktionen wie DLookup, DMax und Co. vor.<\/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":[662009,66032009,44000025],"tags":[],"class_list":["post-55000644","post","type-post","status-publish","format-standard","hentry","category-662009","category-66032009","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>Schnelle Dom&auml;nenfunktionen - 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\/Schnelle_Domaenenfunktionen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Schnelle Dom&auml;nenfunktionen\" \/>\n<meta property=\"og:description\" content=\"Die Dom&auml;nenfunktionen von Access sind nicht gerade als Performance-Wunder bekannt. In manchen Konstellationen sind sie zwar ausreichend schnell, in der Regel lohnt sich jedoch der Einsatz von Ersatzfunktionen - mit dem Vorteil, dass man diese auch noch an die eigenen Bed&uuml;rfnisse anpassen kann. Dieser Artikel stellt Alternativen zu Funktionen wie DLookup, DMax und Co. vor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:23:01+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/4a3ed3bad02041c0b7aedcf77e0a1d53\" \/>\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=\"9\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Schnelle Dom&auml;nenfunktionen\",\"datePublished\":\"2020-05-22T22:23:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/\"},\"wordCount\":1346,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/4a3ed3bad02041c0b7aedcf77e0a1d53\",\"articleSection\":[\"2009\",\"3\\\/2009\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/\",\"name\":\"Schnelle Dom&auml;nenfunktionen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/4a3ed3bad02041c0b7aedcf77e0a1d53\",\"datePublished\":\"2020-05-22T22:23:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/4a3ed3bad02041c0b7aedcf77e0a1d53\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/4a3ed3bad02041c0b7aedcf77e0a1d53\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnelle_Domaenenfunktionen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Schnelle Dom&auml;nenfunktionen\"}]},{\"@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":"Schnelle Dom&auml;nenfunktionen - 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\/Schnelle_Domaenenfunktionen\/","og_locale":"de_DE","og_type":"article","og_title":"Schnelle Dom&auml;nenfunktionen","og_description":"Die Dom&auml;nenfunktionen von Access sind nicht gerade als Performance-Wunder bekannt. In manchen Konstellationen sind sie zwar ausreichend schnell, in der Regel lohnt sich jedoch der Einsatz von Ersatzfunktionen - mit dem Vorteil, dass man diese auch noch an die eigenen Bed&uuml;rfnisse anpassen kann. Dieser Artikel stellt Alternativen zu Funktionen wie DLookup, DMax und Co. vor.","og_url":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:23:01+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/4a3ed3bad02041c0b7aedcf77e0a1d53","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"9\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Schnelle Dom&auml;nenfunktionen","datePublished":"2020-05-22T22:23:01+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/"},"wordCount":1346,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/4a3ed3bad02041c0b7aedcf77e0a1d53","articleSection":["2009","3\/2009","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/","url":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/","name":"Schnelle Dom&auml;nenfunktionen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/4a3ed3bad02041c0b7aedcf77e0a1d53","datePublished":"2020-05-22T22:23:01+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/4a3ed3bad02041c0b7aedcf77e0a1d53","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/4a3ed3bad02041c0b7aedcf77e0a1d53"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Schnelle_Domaenenfunktionen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Schnelle Dom&auml;nenfunktionen"}]},{"@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\/55000644","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=55000644"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000644\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}