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
vba:access:functions:group_concat [03.07.2017 12:42:19]
yaslaw
vba:access:functions:group_concat [18.05.2020 11:38:18] (current)
yaslaw
Line 1: Line 1:
 <​const>​ <​const>​
-    version=2.0.2 +    version=2.1.0 
-    vdate=31.01.2017 +    vdate=03.07.2017 
-    fname=udf_groupconcat.bas+    fname=udf_dconcat.bas
     ns=%NAMESPACE%     ns=%NAMESPACE%
     fpath=/​vba/​access/​functions     fpath=/​vba/​access/​functions
Line 10: Line 10:
 ==Version %%version%% - %%vdate%%== ==Version %%version%% - %%vdate%%==
  
-{{..%%fname%%|Download %%fname%% (V-%%version%%)}}+{{%%fname%%|Download %%fname%% (V-%%version%%)}}
  
  
Line 25: Line 25:
 Hier werden nur die Funktionsheader gezeigt. Den vollständigen [[#​code|Code]] ist am Schluss der Seite. Hier werden nur die Funktionsheader gezeigt. Den vollständigen [[#​code|Code]] ist am Schluss der Seite.
  
-==== groupConcat() ==== +==== DConcat() ==== 
-<​code>​Text = groupConcat(Feld, Quelle [,Kriterium [,Delimiter [,​Sortierung [,​Eindeutigkeit]]]])</​code>​ +<​code>​Text = DConcat(Feld, Quelle [,Kriterium [,Delimiter [,​Sortierung [,​Eindeutigkeit]]]])</​code>​ 
-<code vb>​Public Function ​groupConcat( _+<code vb>​Public Function ​DConcat( _
     ByVal iExpr As String, _     ByVal iExpr As String, _
     ByVal iDomain As String, _     ByVal iDomain As String, _
     Optional ByVal iCriteria As Variant = Null, _     Optional ByVal iCriteria As Variant = Null, _
     Optional ByVal iDelimiter As String = ", ", _     Optional ByVal iDelimiter As String = ", ", _
-    Optional ByVal iOrderBy As Varian ​= Null, _ +    Optional ByVal iOrderBy As Variant ​= Null, _ 
-    Optional ByVal iDistinct As Boolean = False _+    Optional ByVal iDistinct As Boolean = True _
 ) As String</​code>​ ) As String</​code>​
   ***iExpr** ​ Feld das zusammnegeführt werden soll   ***iExpr** ​ Feld das zusammnegeführt werden soll
Line 45: Line 45:
 Sollte ein Fehler auftreten, wird #ERR und der Fehlertext zurückgegeben. Sollte ein Fehler auftreten, wird #ERR und der Fehlertext zurückgegeben.
  
-==== DConcat() ==== +==== groupConcat() ==== 
-DConcat ​ist ein Alias zu groupConcatDen habe ich erstelltum die Funktion ​den Access-Funktionen DCount, DLookup etc. enzupasen. Einziger Unterschied nebst dem Funktionsnamen:​ iDistinct ist Default auf True+GroupConcat ​ist ein Alias zu DConcatDie Funktion ist als veraltet markiert und ist nur noch Vorhandenfalls jemand ​die Funktion ​mit diesem Namen in seinem Proejkt führt. Einziger Unterschied nebst dem Funktionsnamen:​ iDistinct ist Default auf False
-<​code>​Text = DConcat(Feld, Quelle [,Kriterium [,Delimiter [,​Sortierung [,​Eindeutigkeit]]]])</​code>​ +<​code>​Text = groupConcat(Feld, Quelle [,Kriterium [,Delimiter [,​Sortierung [,​Eindeutigkeit]]]])</​code>​ 
-<code vb>​Public Function ​DConcat( _+<code vb>​Public Function ​groupConcat( _
     ByVal iExpr As String, _     ByVal iExpr As String, _
     ByVal iDomain As String, _     ByVal iDomain As String, _
     Optional ByVal iCriteria As Variant = Null, _     Optional ByVal iCriteria As Variant = Null, _
     Optional ByVal iDelimiter As String = ", ", _     Optional ByVal iDelimiter As String = ", ", _
-    Optional ByVal iOrderBy As Variant ​= Null, _ +    Optional ByVal iOrderBy As Varian ​= Null, _ 
-    Optional ByVal iDistinct As Boolean = True _+    Optional ByVal iDistinct As Boolean = False _
 ) As String</​code>​ ) As String</​code>​
  
Line 61: 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 87: 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.1499078539.txt.gz · Last modified: 03.07.2017 12:42:19 by yaslaw