- Startseite
- Neuigkeiten
- Über mich
- Referenzen
- Beispiele
- Artikel
- Vorträge
- Tools
- Access-Tipps
- Excel-Tipps
- Spielereien
- Kontakt
- Impressum
- Datenschutz
Meine Projekte:


Meine DConcat-Funktion
Als ordentliche Datenbankentwickler normalisiere ich meine Datenbanken, um Daten konsistent zu halten und Redundanzen zu vermeiden. Und regelmäßig benötige ich dann doch wieder denormalisierte Daten, um diese zu Informationszwecken anzuzeigen oder in Listen auszugeben.

Um mir dafür nicht jedes Mal eine spezielle Funktion schreiben zu müssen, habe ich mir eine allgemeine Funktion geschrieben, die ich immer wieder verwenden kann. Da es sich auch um eine Domänenfunktion handelt, habe ich sie – in Anlehnung an die schon enthaltenen Access-Funktionen (wie z. B. DLookup oder DSum) – DConcat genannt.
Da die neue Funktion ein bisschen mehr können muss, hat Sie auch ein paar mehr Parameter, die aber optional sind.
Syntax
DConcat( Ausdruck, Domäne [,Kriterien ] [, Reihenfolge ] [, Trennzeichen ] )
Die Syntax der DConcat-Funktion weist die folgenden Argumente auf:
Ausdruck (Expression)
Erforderlich. Ein Ausdruck, der das Feld angibt, dessen Wert zurückgegeben werden soll.
Domäne (Domain)
Erforderlich. Ein Zeichenfolgenausdruck, der die Gruppe von Datensätzen angibt, die die Domäne bilden. Es kann sich um einen Tabellennamen oder um einen Abfragenamen für eine Abfrage handeln, die keinen Parameter erfordert.
Kriterien (Criteria)
Optional. Ein Zeichenfolgenausdruck zur Beschränkung des Datenbereichs, für den die DConcat-Funktion ausgeführt wird. Kriterien entspricht z. B. häufig der WHERE-Klausel in einem SQL-Ausdruck, ohne das Wort »WHERE«.
Reihenfolge (Order)
Optional. Ein Ausdruck, der das Feld angibt, nach dem sortiert die Werte zurückgegeben werden sollen.
Trennzeichen (Seperator)
Optional. Eine Zeichenfolge, mit der die einzelnen zurückgegebenen Werte getrennt werden sollen. Standardwert ist ein Semikolon.
Hinweise
Die DConcat-Funktion gibt immer eindeutige Datensätze zurück. Wird als Reihenfolge nicht das Ausgabefeld, sondern ein anderes Feld gewählt, wird dieses dabei mitberücksichtigt. Die ausgegebene Werteliste kann dadurch Werte mehrfach enthalten.
Beim Reihenfolge-Feld kann für eine absteigende Reihenfolge zusätzlich der Parameter »DESC« mitgegeben werden. Soll nach mehreren Feldern sortiert werden, sind diese durch ein Komma separiert anzugeben.
Als Trennzeichen können auch Steuerzeichenfolgen (z. B. vbCrLf oder Chr(10)) verwendet werden, um die Listenwerte formatiert anzuzeigen.
Beispiele
fConcat("pkwModell", "tblPKW")
gibt eine Werteliste alle Modelle in der Tabelle PKW aus.
fConcat("pkwModell", "tblPKW", "pkwMarke = 'Opel'", "pkwModell", vbCrLf
listet alle Opel untereinander auf.
fConcat("pkwModell", "tblPKW", "pkwMarke = 'VW'", "pkwModell DESC", ", ")
gibt alle VW-Modelle absteigend sortiert, komma-separiert aus.
fConcat("pkwModell", "tblPKW", "pkwMarke = 'BMW'")
liefert NULL, wenn es keine BMW in der Tabelle gibt.
fConcat("pkwModell", "tblPKW", , "pkwBaujahr", " - ")
gibt alle Modelle nach Baujahr sortiert mit Bindestrich getrennt aus. Bei Modellen mit mehreren Baujahren auch Dubletten.
Code-Schnipsel
So sieht die Funktion (etwas vereinfacht) aus:
Public Function fConcat(Expression As String, Domain As String, _ Optional Criteria, Optional Order, _ Optional Seperator) As Variant ... strSQL = "SELECT DISTINCT " & Expression ' ggf. Sortierfeld hinzufügen (wg. DISTINCT) If Not IsMissing(Order) Then strSQL = strSQL & ", " _ & Replace(Order, "DESC", "") strSQL = strSQL & " FROM " & Domain If Not IsMissing(Criteria) Then strSQL = strSQL & " WHERE " & Criteria If Not IsMissing(Order) Then strSQL = strSQL & " ORDER BY " & Order Set rst = CurrentDb.OpenRecordset(strSQL) If IsMissing(Seperator) Then Seperator = ";" Do While Not (rst.BOF Or rst.EOF) fConcat = fConcat & Seperator + rst(Expression) rst.MoveNext Loop ' Wenn mind. ein Wert enthalten ist ... If Len(fConcat) > 1 Then ' ... dann erstes Trennzeichen weglassen fConcat = Mid(fConcat, Len(Seperator) + 1) Else ' ... sonst auf NULL setzen fConcat = Null End If ... End Function
Die vollständige Funktion, Beispieldaten und Beispielaufrufe gibt es in der Datei DConcat.accdb im folgenden Download.
Download
Meine DConcat-Funktion für Access 2007 (und neuer)
(Datei: DConcat.zip, ca. 30 KB)