Last Update: 2024 - 05 - 21 |
Access/VBA - Daten einer Spalte als kommagetrennte Zeichenfolge ausgebenVerö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: Und Du möchtest die Namen in einer einzigen Zeile anzeigen, so wie hier: 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. 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. 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. 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.
Ich werde Deine Email-Addresse niemals weitergeben. Du kannst den Newsletter jederzeit abbestellen. © 1999 - 2024 by Philipp Stiefel - Datenschutzerklärung |