User Tools

Site Tools


vba:access:functions:group_concat

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
vba:access:functions:group_concat [23.12.2016 14:05:01]
yaslaw
vba:access:functions:group_concat [23.10.2019 08:16:54]
yaslaw [Beispele zu den Feldtypen]
Line 1: Line 1:
 <​const>​ <​const>​
-    version=2.0.1 +    version=2.1.0 
-    vdate=23.12.2016 +    vdate=03.07.2017 
-    fname=udf_groupconcat.bas+    fname=udf_dconcat.bas
     ns=%NAMESPACE%     ns=%NAMESPACE%
     fpath=/​vba/​access/​functions     fpath=/​vba/​access/​functions
 </​const>​ </​const>​
-====== [VBA][Access] ​groupConcat() / DConcat() ======+====== [VBA][Access] ​DConcat() / groupConcat() ======
 //Eine Aggregationsfumktion um Feldinhalte auf einer Spalte zu gruppieren. Entspricht etwa dem LISTAGG() aus Oracle oder GROUP_CONCAT() as %%MySQL%%.//​ //Eine Aggregationsfumktion um Feldinhalte auf einer Spalte zu gruppieren. Entspricht etwa dem LISTAGG() aus Oracle oder GROUP_CONCAT() as %%MySQL%%.//​
 ==Version %%version%% - %%vdate%%== ==Version %%version%% - %%vdate%%==
  
-{{..%%fname%%|Download %%fname%% (V-%%version%%)}}+{{%%fname%%|Download %%fname%% (V-%%version%%)}}
  
  
Line 23: Line 23:
  
 ===== Definition ===== ===== Definition =====
 +Hier werden nur die Funktionsheader gezeigt. Den vollständigen [[#​code|Code]] ist am Schluss der Seite.
 +
 +==== DConcat() ====
 +<​code>​Text = DConcat(Feld,​ Quelle [,Kriterium [,Delimiter [,​Sortierung [,​Eindeutigkeit]]]])</​code>​
 +<code vb>​Public Function DConcat( _
 +    ByVal iExpr As String, _
 +    ByVal iDomain As String, _
 +    Optional ByVal iCriteria As Variant = Null, _
 +    Optional ByVal iDelimiter As String = ", ", _
 +    Optional ByVal iOrderBy As Variant = Null, _
 +    Optional ByVal iDistinct As Boolean = True _
 +) As String</​code>​
 +
 ==== groupConcat() ==== ==== groupConcat() ====
 +GroupConcat ist ein Alias zu DConcat. Die Funktion ist als veraltet markiert und ist nur noch Vorhanden, falls jemand die Funktion mit diesem Namen in seinem Proejkt führt. Einziger Unterschied nebst dem Funktionsnamen:​ iDistinct ist Default auf False.
 <​code>​Text = groupConcat(Feld,​ Quelle [,Kriterium [,Delimiter [,​Sortierung [,​Eindeutigkeit]]]])</​code>​ <​code>​Text = groupConcat(Feld,​ Quelle [,Kriterium [,Delimiter [,​Sortierung [,​Eindeutigkeit]]]])</​code>​
 <code vb>​Public Function groupConcat( _ <code vb>​Public Function groupConcat( _
Line 42: Line 56:
 Der Rückgabelwert ist entweder eine Stringliste oder ein leerer String falls keine Details gefunden wurden. ​ Der Rückgabelwert ist entweder eine Stringliste oder ein leerer String falls keine Details gefunden wurden. ​
 Sollte ein Fehler auftreten, wird #ERR und der Fehlertext zurückgegeben. Sollte ein Fehler auftreten, wird #ERR und der Fehlertext zurückgegeben.
- 
-==== DConcat() ==== 
-DConcat ist ein Alias zu groupConcat. Den habe ich erstellt, um die Funktion den Access-Funktionen DCount, DLookup etc. enzupasen. Einziger Unterschied nebst dem Funktionsnamen:​ iDistinct ist Default auf True. 
-<​code>​Text = DConcat(Feld,​ Quelle [,Kriterium [,Delimiter [,​Sortierung [,​Eindeutigkeit]]]])</​code>​ 
-<code vb>​Public Function DConcat( _ 
-    ByVal iExpr As String, _ 
-    ByVal iDomain As String, _ 
-    Optional ByVal iCriteria As Variant = Null, _ 
-    Optional ByVal iDelimiter As String = ", ", _ 
-    Optional ByVal iOrderBy As Variant = Null, _ 
-    Optional ByVal iDistinct As Boolean = True _ 
-) As String</​code>​ 
  
 ===== Anwendungsbeispiele ===== ===== Anwendungsbeispiele =====
Line 59: Line 61:
 Eine einfache Abfrage auf eine Tabelle Eine einfache Abfrage auf eine Tabelle
 <code vb>'​Enfache Abfrage. Duplikate werden nicht unterdrückt <code vb>'​Enfache Abfrage. Duplikate werden nicht unterdrückt
-debug.print ​groupConcat("​set_name","​my_table","​ group_id=12"​)+debug.print ​DConcat("​set_name","​my_table",​ "​group_id=12"​)
 Montags-Report,​ TEST, TEST Montags-Report,​ TEST, TEST
  
 'oder mit DConcat(). Duplikate werden standartmässig unterdrückt 'oder mit DConcat(). Duplikate werden standartmässig unterdrückt
-debug.print DConcat("​set_name","​my_table","​ group_id=12"​)+debug.print DConcat("​set_name","​my_table",​ "​group_id=12"​)
 Montags-Report,​ TEST Montags-Report,​ TEST
  
 'Die Unterdrückung kann auch aufgehoben werden. Zudem der Delimiter und die Sortierung angepasst 'Die Unterdrückung kann auch aufgehoben werden. Zudem der Delimiter und die Sortierung angepasst
-debug.print DConcat("​set_name","​my_table","​ group_id=12",​ "​-",​ "​mein_datum",​ false)+debug.print DConcat("​set_name","​my_table",​ "​group_id=12",​ "​-",​ "​mein_datum",​ false)
 TEST-Montags-Report-TEST TEST-Montags-Report-TEST
 </​code>​ </​code>​
Line 76: Line 78:
 <code sql>​SELECT <code sql>​SELECT
     t.group_id,     t.group_id,
-    DCONCAT("​set_name","​my_table","​ group_id="​ & t.group_id, , "​mein_datum"​)+    DCONCAT("​set_name","​my_table","​group_id="​ & t.group_id, , "​mein_datum"​)
 FROM FROM
     my_table AS t     my_table AS t
Line 85: Line 87:
 Man kann die Funktion auch in einem berechneten Textfeld eines Report-Fusses (oder Kopf) verwenden. Man kann die Funktion auch in einem berechneten Textfeld eines Report-Fusses (oder Kopf) verwenden.
 Dabei kann man die Quelle und den Filter des Reports automatisch übernhemen Dabei kann man die Quelle und den Filter des Reports automatisch übernhemen
-<​code>​=groupConcat("​name";​[RecordSource];​IIf([FilterOn];​[Filter];""​))</​code>​+<​code>​=DConcat("​name";​[RecordSource];​IIf([FilterOn];​[Filter];""​))</​code>​
  
 Ebenfalls in einem Gruppenfuss. Der Filter muss um das Gruppierungsfeld erweitertwerden. In diesem Beispiel das Feld my_group_field. Ebenfalls in einem Gruppenfuss. Der Filter muss um das Gruppierungsfeld erweitertwerden. In diesem Beispiel das Feld my_group_field.
-<​code>​=groupConcat("​name";​[RecordSource];​IIf([FilterOn];​[Filter];"​TRUE"​) & " AND [my_group_field] = " &  [my_group_field])</​code>​+<​code>​=DConcat("​name";​[RecordSource];​IIf([FilterOn];​[Filter];"​TRUE"​) & " AND [my_group_field] = " &  [my_group_field])</​code>​
  
 ==== Beispele zu den Feldtypen ==== ==== Beispele zu den Feldtypen ====
 Die meisten Felder sind normale SQL-String. Sprich es gelten die folgenden Regelen: Die meisten Felder sind normale SQL-String. Sprich es gelten die folgenden Regelen:
   * Feldnamen dürfen nur Zahlen und Buchstaben enthalten. Ansonsten müssen sie in ''​[]''​ geschrieben werden   * Feldnamen dürfen nur Zahlen und Buchstaben enthalten. Ansonsten müssen sie in ''​[]''​ geschrieben werden
 +  * Zahlen werden als SQL-Zahlen geschrieben,​ also ohne Begrenzungszeichen
   * String müssen als SQL-String erfasst werden. Also mit ' oder " als Begrenzungszeichen.    * String müssen als SQL-String erfasst werden. Also mit ' oder " als Begrenzungszeichen.
   * Datum müssen im SQL-Format erfasst werden: ''#​MM/​DD/​YYYY#'',​ ''#​HH:​NN:​SS#''​ bzw. ''#​MM/​DD/​YYYY HH:​NN:​SS#''​   * Datum müssen im SQL-Format erfasst werden: ''#​MM/​DD/​YYYY#'',​ ''#​HH:​NN:​SS#''​ bzw. ''#​MM/​DD/​YYYY HH:​NN:​SS#''​
 +
 +Siehe dazu auch [[vba:​tutorials:​filterstrings|]].
  
 <code vb>'​Felder mit Leerzeichen und Sonderzeichen <code vb>'​Felder mit Leerzeichen und Sonderzeichen
-groupConcat("​[Mein Feld]","​[Meine Tabelle]","​[Filter Code]='​Zürich'",​ "​.",​ "[Mein Soriterfeld Nr.3]"​)+DConcat("​[Mein Feld]","​[Meine Tabelle]","​[Filter Code]='​Zürich'",​ "​.",​ "[Mein Soriterfeld Nr.3]"​)
  
 '​Filterwert als Datum '​Filterwert als Datum
-groupConcat("​MeinFeld","​MeineTabelle","​[Von Datum]>​=#​11/​01/​2015#"​) +DConcat("​MeinFeld","​MeineTabelle","​[Von Datum]>​=#​11/​01/​2015#"​) 
-groupConcat("​MeinFeld","​MeineTabelle","​[Von Datum]>​="​ & Format([meinDatumsFeld],​ "​\#​mm\/​dd\/​yyyy\#"​)+DConcat("​MeinFeld","​MeineTabelle","​[Von Datum]>​="​ & Format([meinDatumsFeld],​ "​\#​mm\/​dd\/​yyyy\#"​))
  
 '​Filterwert als String mit ' '​Filterwert als String mit '
-groupConcat("​MeinFeld","​MeineTabelle","​FilterCode>​='​abc'"​) +DConcat("​MeinFeld","​MeineTabelle","​FilterCode>​='​abc'"​) 
-groupConcat("​MeinFeld","​MeineTabelle","​FilterCode>​='"​ & [filerFeld] & "'"​)+DConcat("​MeinFeld","​MeineTabelle","​FilterCode>​='"​ & [filerFeld] & "'"​)
 'oder mit ""​ 'oder mit ""​
-groupConcat("​MeinFeld","​MeineTabelle","​FilterCode>​=""​abc"""​) +DConcat("​MeinFeld","​MeineTabelle","​FilterCode>​=""​abc"""​) 
-groupConcat("​MeinFeld","​MeineTabelle","​FilterCode>​="""​ & [filerFeld] & """"​)+DConcat("​MeinFeld","​MeineTabelle","​FilterCode>​="""​ & [filerFeld] & """"​)
  
 '​Filter ist ein Boolean '​Filter ist ein Boolean
-groupConcat("​MeinFeld","​MeineTabelle","​FilterCode=True"​) +DConcat("​MeinFeld","​MeineTabelle","​FilterCode=True"​) 
-groupConcat("​MeinFeld","​MeineTabelle","​FilterCode="​ & [meinBooleanFeld])+DConcat("​MeinFeld","​MeineTabelle","​FilterCode="​ & [meinBooleanFeld])
  
 '​Filter ist eine Zahl '​Filter ist eine Zahl
-groupConcat("​MeinFeld","​MeineTabelle","​FilterCode>​=123"​) +DConcat("​MeinFeld","​MeineTabelle","​FilterCode>​=123"​) 
-groupConcat("​MeinFeld","​MeineTabelle","​FilterCode>​="​ & [meinZahlenFeld])</​code>​+DConcat("​MeinFeld","​MeineTabelle","​FilterCode>​="​ & [meinZahlenFeld])</​code>​
  
 ===== Code ===== ===== Code =====
 Der Code ist zum Importieren gedacht. Wenn du ihn einfach in ein neues Modul kopierst, musst du den Header (Attribute-Zeilen) löschen. Der Code ist zum Importieren gedacht. Wenn du ihn einfach in ein neues Modul kopierst, musst du den Header (Attribute-Zeilen) löschen.
 <source '​%%fpath%%/​%%fname%%'​ vb> <source '​%%fpath%%/​%%fname%%'​ vb>
vba/access/functions/group_concat.txt · Last modified: 18.05.2020 11:38:18 by yaslaw