Carte du site
 Remerciements
 Netiquette
 Bugs
 Tables
 Requêtes
 Formulaires
 États (rapports)
 Modules
 APIs
 Chaînes
 Date/Time
 Général
 Ressources
 Téléchargeables

 Termes d'usage

Modules: Concaténer les valeurs d'un champ dans une table.

Author(s)
Dev Ashish

Concaténer les valeurs d'un champ dans une table.

(Q)    Il me faut concaténer les valeurs uniques d'un champ particulier dans un format "Valeur1; Valeur2; Valeur3" etc. pour tous les enregistrements d' une table. Comment faire?

(A)    Utiliser la fonction  fConcatFld function,  sur la base de données Northwind, à partir de la requête suivante, nous retournera une liste de tous les CustomerIDs que nous regroupons par ContactTitle.

SELECT ContactTitle, fConcatFld("Customers","ContactTitle","CustomerID","string",[ContactTitle]) AS CustomersFROM CustomersGROUP BY ContactTitle;

'************ Code Start **********
Function fConcatFld(stTable As String, _
                    stForFld As String, _
                    stFldToConcat As String, _
                    stForFldType As String, _
                    vForFldVal As Variant) _
                    As String
'Retourne la valeur (unique) d'un champ par rapport
'à un autre champ dans la table,
'valeurs séparées par un point-virgule.
'
'Usage:
'   ?fConcatFld(("Customers","ContactTitle","CustomerID", _
'                "string","Owner")
'Où  Customers     = La table à utiliser
'       ContactTitle  = Le champ contre lequel on se compare
'       CustomerID    = Le champ fournissant les valeurs à concaténer
'       string        = Le DataType du champ contre lequel on se compare
'       Owner         = La valeur à laquelle on compare le champ à  comparer (ContactTitle)
'
Dim lodb As Database, lors As Recordset
Dim lovConcat As Variant, loCriteria As String
Dim loSQL As String
Const cQ = """"

    On Error GoTo Err_fConcatFld
    
    lovConcat = Null
    Set lodb = CurrentDb
    
    loSQL = "SELECT [" & stFldToConcat & "] FROM ["
    loSQL = loSQL & stTable & "] WHERE "
    
    Select Case stForFldType
        Case "String":
            loSQL = loSQL & "[" & stForFld & "] =" & cQ & vForFldVal & cQ
        Case "Long", "Integer", "Double":    'AutoNumber is Type Long
            loSQL = loSQL & "[" & stForFld & "] = " & vForFldVal
        Case Else
            GoTo Err_fConcatFld
    End Select
    
    Set lors = lodb.OpenRecordset(loSQL, dbOpenSnapshot)
    
    'Existe-t-il des enregistrements
    With lors
        If .RecordCount <> 0 Then
            'commencer la concaténation
            Do While Not .EOF
                lovConcat = lovConcat & lors(stFldToConcat) & "; "
                .MoveNext
            Loop
        Else
            GoTo Exit_fConcatFld
        End If
    End With
        
    'C'est tout... on possède la chaîne
    'ne reste qu'à enlever le dernier ;
    fConcatFld = Left(lovConcat, Len(lovConcat) - 2)


Exit_fConcatFld:
    Set lors = Nothing: Set lodb = Nothing
    Exit Function

Err_fConcatFld:
    MsgBox "Error#: " & Err.Number & vbCrLf & Err.Description
    Resume Exit_fConcatFld
End Function
'************ Code End **********

© 1998-2001, Dev Ashish, All rights reserved. Optimized for Microsoft Internet Explorer