Domänenfunktionen

Roland Grothe, Hanau; André Minhorst, Duisburg

Zusammenfassung

Erstellen Sie ein Add-In zum Messen und Vergleichen der Performance von Funktionen.

Techniken

Domänenfunktionen

Voraussetzungen

Access 97 und höher

Beispieldateien

Domaenenfunktionen97.mdb (Access 97)Domaenenfunktionen00.mdb (Access 2000 und höher)

Dieser Beitrag stellt Ihnen eine Gruppe von Funktionen vor, die einen recht einfachen Zugriff auf Daten in beliebigen Tabellen oder Abfragen einer Access-Datenbank ermöglichen. Mit diesen so genannten Domänenfunktionen ist es möglich, Tabellendaten in Form von Funktionsergebnissen zum Beispiel als Feldinhalte oder als Kriterien in Abfragen zur Verfügung zu stellen. Anhand einiger Praxisbeispiele erfahren Sie, in welchen Fällen der Einsatz von Domänenfunktionen sinnvoll ist und wann es besser ist, auf andere Alternativen zur Datenermittlung zurückzugreifen.

Domänenfunktionen lassen sich am einfachsten als “in eine Funktion gepackte SQL-Abfragen” definieren. Mit Domänenfunktionen lassen sich fast alle Abfragen ersetzen, die allerdings eine Bedingung zwingend erfüllen müssen: Sie dürfen lediglich einen einzigen Wert zurückliefern. Die Bezeichnung dieses Funktionstyps erklärt sich aus dem Begriff Domäne (engl.: Domain), eine in Datenbank-Kreisen übliche Bezeichnung für eine Datensatzgruppe. Die insgesamt zwölf von Access zur Verfügung gestellten Domänenfunktionen ermöglichen den schnellen und unkomplizierten Zugriff auf Informationen aus einer Tabelle oder einer gespeicherten Abfrage.

Sie lassen sich sehr flexibel einsetzen und stellen oft die einzige Möglichkeit dar, das Ergebnis einer Funktionsabfrage in einem Formular- oder Berichtsfeld darzustellen, ohne aufwändigen VBA-Code schreiben zu müssen. Sie sind auch immer dann hilfreich, wenn ein solches Ergebnis zu weiteren Berechnungen benötigt wird, da Sie direkt in dem jeweiligen Ausdruck anstelle eines konkreten Wertes verwendet werden.

Tab. 1 zeigt alle Domänenfunktionen in Deutsch und Englisch inklusive Beschreibung. Sie können in der deutschen Version von Access fast überall sowohl die deutschen als auch die englischen Funktionsbezeichnungen verwenden. Access wandelt diese automatisch in die deutsche Bezeichnung um. Dies gilt allerdings nicht für VBA-Code. Dort verwendete Funktionen müssen mit der englischen Bezeichnung eingegeben werden. In VBA werden die Funktionsparameter statt mit dem Semikolon mit einem Komma voneinander getrennt.

Funktion (engl. Bez.)

Beschreibung

DomAnzahl (DCount)

Anzahl der Datensätze aus der Tabellen- bzw. Abfrage-Domäne, bei denen der Inhalt des in Ausdruck definierten Feldes bzw. das Ergebnis dieses Ausdrucks nicht Null ist. Berücksichtigt werden nur Datensätze, die dem in Kriterium festgelegten Kriterium entsprechen (die Syntaxbeschreibung gilt für alle Domänenfunktionen).

DomSumme (DSum)

Summe der Feldinhalte

DomErsterWert (DFirst)

Feldinhalt des ersten Datensatzes

DomLetzterWert (DLast)

Feldinhalt des letzten Datensatzes

DomMittelwert (DAvg)

Durchschnittswert des Feldinhaltes. Nullwerte werden ignoriert

DomVarianz (DVar)

Varianz eines Feldes, bezogen auf eine Stichprobe

DomVarianzG (DVarP)

Varianz eines Feldes, bezogen auf die Gesamtmenge

DomStdAbw (DStDev)

Standardabweichung eines Feldes, bezogen auf eine Stichprobe

DomStdAbwG (DStDevP)

Standardabweichung eines Feldes, bezogen auf die Gesamtmenge

DomMin (DMin)

minimaler Wert eines Feldes

DomMax (DMax)

maximaler Wert eines Feldes

DomWert (DLookup)

Feldinhalt des ersten Datensatzes

Tab. 1: Domänenfunktionen von Access

Der Aufruf einer Domänenfunktion erfolgt immer in dieser Form:

Funktion(Ausdruck;Domäne[;Kriterium])

Alle drei Parameter werden in Form einer Zeichenkette übergeben, wobei die ersten beiden zwingend notwendig sind. Der Parameter Kriterium ist optional und kann weggelassen werden, wenn er nicht benötigt wird. Im Prinzip finden Sie in den Parametern die Hauptkomponenten einer SQL-Abfrage wieder, wobei lediglich die entsprechenden Schlüsselwörter weggelassen werden. Fügen Sie diese (in Gedanken) wieder hinzu, erhalten Sie den SQL-Befehl:

SELECT Ausdruck FROM Domäne WHERE Kriterium

Tatsächlich baut Access aus den Parametern einen der jeweiligen Domänenfunktion angepassten SQL-Befehl zusammen. Daher müssen Sie bei der Verwendung von Domänenfunktionen alle Bedingungen und Einschränkungen beachten, die auch für “normale” SQL-Befehle gelten.

Dies gilt vor allem für die vom SQL-Interpreter vorgeschriebenen amerikanischen Formatierungen, auf die der Beitrag später noch eingehen wird. Für die folgenden Beschreibungen der einzelnen Parameter verwenden Sie als Beispiel die Domänenfunktion DomWert(), die einen einzelnen Wert aus einer Tabelle oder Abfrage ermittelt und die Funktion DomAnzahl(), welche die Anzahl der Datensätze zurückgibt, die einen Eintrag in einem bestimmten Feld enthalten.

Der Parameter “Ausdruck”

Bei diesem Parameter handelt es sich normalerweise um den Namen des Feldes, das die benötigte Information enthält. Der Feldname wird als Zeichenkette übergeben, daher müssen Sie ihn in Anführungszeichen setzen. Um etwa das Bestelldatum des ersten Datensatzes der Tabelle Bestellungen zu ermitteln, verwenden Sie folgenden Ausdruck:

DomWert("[Bestelldatum]";"[Bestellungen]")

Unter VBA würde dieser Ausdruck so aussehen (in einer Zeile):

Dlookup("[Bestelldatum]","[Bestellungen]")

Sie können das Ergebnis dieses Ausdrucks im Direktfenster durch Voranstellen der Anweisung Debug.Print oder dessen Abkürzung, dem Fragezeichen (), ausgeben lassen (siehe Bild 1).

Bild 1: Testen einer Domänenfunktion im Direktfenster

Statt eines einzelnen Feldnamens kann aber auch ein komplexerer Ausdruck übergeben werden, der Informationen aus mehreren Feldern zusammenfasst oder Berechnungen durchführt. In diesem Fall setzen Sie den gesamten Ausdruck in doppelte Anführungszeichen. Der folgende Ausdruck ermittelt beispielsweise die Zeit zwischen der Bestellung und der Lieferung des ersten Datensatzes der Tabelle Bestellungen:

DomWert("[Lieferdatum] - [Bestelldatum]"; "[Bestellungen]")

Die VBA-Variante lautet:

Dlookup("[Lieferdatum] - [Bestelldatum]", "[Bestellungen]")

Befinden sich innerhalb des Ausdrucks doppelte Anführungszeichen, ersetzen Sie diese durch einfache Anführungszeichen, die vom SQL-Interpreter als Begrenzungszeichen anerkannt werden.

Der folgende Ausdruck ermittelt die Firmenbezeichnung aus dem ersten Datensatz der Tabelle Kunden und stellt den Ansprechpartner anschließend in Klammern dar:

DomWert("[Firma] & '' ('' & [Kontaktperson] & '')''";"[Kunden]")

beziehungsweise

Dlookup("[Firma] & '' ('' & [Kontaktperson] & '')''","[Kunden]")

Anstelle eines einfachen Anführungszeichens können Sie auch zwei doppelte Anführungszeichen verwenden, allerdings wird ein solcher Ausdruck sehr schnell unübersichtlich:

DomWert("[Firma] & "" ("" & [Kontaktperson] & "")""";"[Kunden]")

Die Zeichenkette kann der Domänenfunktion auch als Bezeichner, als Ergebnis einer Funktion oder (in VBA) als Variable übergeben werden.

In diesem Fall lassen Sie die Anführungszeichen weg. Es muss jedoch sichergestellt sein, dass die übergebene Zeichenkette die bereits angesprochenen formalen Bedingungen erfüllt, ansonsten erhalten Sie den Ausdruck #Fehler als Ergebnis.

Der Parameter “Domäne”

Wie auch der Parameter Ausdruck ist der Parameter Domäne nicht optional und daher unbedingt einzugeben. Als gültige Werte wird der Name jeder Tabelle oder gespeicherten Abfrage der aktuellen Datenbank in Form einer Zeichenkette akzeptiert. Auch für diesen Parameter gelten die gleichen Regeln bezüglich der Anführungszeichen und eckigen Klammern wie beim Parameter Ausdruck. Wird als Domäne der Name einer Abfrage verwendet, kann es sich hierbei nur um eine gespeicherte Abfrage handeln. Es ist nicht möglich, diesen Parameter wie im Ausdruck

DomWert("[Bestelldatum]";"SELECT * FROM [Bestellungen]")

direkt in Form eines SQL-Befehls zu übergeben.

Aus Gründen der Ausführungsgeschwindigkeit sollten Sie versuchen, die benötigte Information möglichst direkt aus der Tabelle zu beziehen. Im optimalen Fall verfügt die Tabelle über einen Index auf das gesuchte Feld.

Der Parameter “Kriterium”

Alle bisherigen Beispiele lieferten die gesuchte Information entweder aus einem Feld des ersten Datensatzes (DomWert()) oder berücksichtigten bei der Berechnung alle Datensätze (DomAnzahl()) der im Parameter Domäne genannten Tabelle oder Abfrage.

Dies liegt daran, dass Sie den Parameter Kriterium bei diesen Beispielen einfach weggelassen haben. Mit diesem Parameter ist es möglich, auf einen anderen als den ersten Datensatz zuzugreifen oder lediglich eine begrenzte Auswahl von Datensätzen zu berücksichtigen.

Die Syntax des Parameters Kriterium entspricht exakt der WHERE-Klausel einer SQL-Abfrage, bei der das Schlüsselwort WHERE fehlt. Wie die anderen Parameter wird auch dieser als Zeichenkette übergeben und ist in doppelte Anführungszeichen zu setzen. Um beispielsweise das Bestelldatum der Bestellung Nr. 10268 zu ermitteln, verwenden Sie den Ausdruck

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar