Language: Deutsch English















Last Update: 2017 - 03 - 20





Access/VBA - Daten einer Spalte als kommagetrennte Zeichenfolge ausgeben

Veröffentlicht: 21. Mai 2015

In Newsgroups und online Foren zu Microsoft Access lese ich häufig die Frage, wie man die Daten die in einer Spalte einer Tabelle gespeichert sind, oder in einer Abfrage ausgegeben werden, als eine Liste komma-getrennter Werte ausgeben kann. Es sollen also die Zeilen einer bestimmten Spalte in eine Zeichenfolge transformiert werden, die alle Werte durch Kommas (oder etwas ähnliches) getrennt enthält. – Anstelle diese Frage immer wieder aufs Neue zu beantworten, will ich lieber hier eine richtig gute Antwort dazu schreiben, auf die ich hinweisen kann, wenn die Frage irgendwo wieder einmal aufkommt. Also los geht’s…

Gehen wir davon aus, Du hast eine Tabelle, die Namen (im Beispiel die Namen von Schauspielern) enthält. So wie diese:

sample screenshot of table

Und Du möchtest die Namen in einer einzigen Zeile anzeigen, so wie hier:

sample screenshot of result

Du kannst dieses Problem mit ein wenig Access- und VBA-Kenntnissen recht einfach lösen. Du öffnest ein Recordset mit einer Abfrage auf die entsprechende Spalte deiner Tabelle. Während Du in einer Schleife alle Datensätze durchläufst, verkettest Du dann die Werte des Feldes aus den einzelnen Datensätzen mit dem Trennzeichen und den bisherigen Werten in einer lokalen Variablen. Zum Schluss scheidest Du das letzte überflüssige Trennzeichen ab und gibst diesen Wert als Rückgabewert der Funktion zurück.

Dieses Vorgehen wird in VBA-Programmcode etwa so aussehen wie das hier:

Public Function QueryFieldAsSeparatedString(ByVal fieldName As String, _ ByVal tableOrQueryName As String, _ Optional ByVal criteria As String = "", _ Optional ByVal sortBy As String = "", _ Optional ByVal delimiter As String = ", " _ ) As String ' Paramter description ' fieldName = Ist der Name der Spalte, die wir in der Zeichenfolge ausgeben wollen ' tableOrQueryName = Ist der Name der Tabelle oder Abfragem die die Spalte enthält ' criteria = Die Filterkriterien um die Daten optional einzuschränken ' sortBy = Eine optionale sortierung der Daten ' delimiter = Das Trennzeichen zwischen den einzelnen Werten. ' Der Standardwert ist ein Komma gefolgt von einem Leerzeichen, ' aber Du kannst hier eine beliebige Zeichenfolge angeben. Dim db As DAO.Database Dim rs As DAO.Recordset Dim sql As String Dim whereCondition As String Dim sortExpression As String Dim retVal As String Set db = CurrentDb ' Wenn Filterkriterien übergeben wurden, bauen wir eine WHERE-Klausel für das SQL If Len(criteria) > 0 Then whereCondition = " WHERE " & criteria End If ' Wenn ein Sortierungsausdruck übergeben wurde, bauen wir eine ORDER BY-Klausel für das SQL If Len(sortBy) > 0 Then sortExpression = " ORDER BY " & sortBy End If ' Wir setzen den gesamten SQL-String zusammen sql = "SELECT " & fieldName & " FROM " & tableOrQueryName & whereCondition & sortExpression ' Wir öffnen das Recordset Set rs = db.OpenRecordset(sql, dbOpenForwardOnly, dbReadOnly) Do Until rs.EOF ' Jetzt laufen wir durch das Recordset und verketten den Wert mit den Werten aus den ' vorigen Datensätzen und dem Trennzeichen wenn der aktuelle Wert nicht NULL ist If Not IsNull(rs.Fields(0).Value) Then retVal = retVal & Nz(rs.Fields(0).Value, "") & delimiter End If rs.MoveNext Loop ' Wir schneiden das letzte Trennzeichen ab retVal = Left(retVal, Len(retVal) - Len(delimiter)) ' Wir setzen den Rückgabewert der Funktion QueryFieldAsSeparatedString = retVal ' Schließen und Zerstören der Objektvariablen rs.Close Set rs = Nothing Set db = Nothing End Function

Du kannst diese Funktion aus dem Direktfenster der VBA-Entwicklungsumgebung aufrufen. Das Ergebnis wird dann direkt darunter ausgegeben.

demo ouput of result in the Immediate Pane

Die Funktion unterstützt es auch, die Daten zu filtern und zu sortieren. Im folgenden Screenshot werden, alphabetisch sortiert, nur Schauspieler ausgegeben, die ein Rating von 4 oder mehr haben. Außerdem verwenden wir hier einen Bindestrich anstelle des Kommas als Trennzeichen.

demo ouput of result in the Immediate Pane with all paramters supplied

Wenn Du diesen Funktionsaufruf jetzt in die Controlsource- (SteuerelementInhalt)-Eigenschaft einer Textbox schreibst, wie hier, dann erhältst Du in dem Formular die Ausgabe, die ganz oben im zweiten Screenshot dieses Artikels zu sehen war.

screenshot property sheet, usage of the function in the ControlSource of a textbox

Wenn Du DAO benutzt, um auf deine Access Daten zuzugreifen, dann ist dem jetzt auch nichts mehr hinzuzufügen. Wenn Du allerdings mit ADO deine Daten aus einem SQL-Server-Backend abrufst, könnte man dabei noch ein paar andere Faktoren bedenken. – Dazu komme ich allerdings in ein paar Tagen in einem anderen Artikel.

Share this article: Share on Facebook Tweet Share on LinkedIn Share on XING

Abonniere meinen Newsletter

*

Ich werde Deine Email-Addresse niemals weitergeben. Du kannst den Newsletter jederzeit abbestellen.



© 1999 - 2016 by Philipp Stiefel