|
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;
Function fConcatFld(stTable As String, _
stForFld As String, _
stFldToConcat As String, _
stForFldType As String, _
vForFldVal As Variant) _
As String
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":
loSQL = loSQL & "[" & stForFld & "] = " & vForFldVal
Case Else
GoTo Err_fConcatFld
End Select
Set lors = lodb.OpenRecordset(loSQL, dbOpenSnapshot)
With lors
If .RecordCount <> 0 Then
Do While Not .EOF
lovConcat = lovConcat & lors(stFldToConcat) & "; "
.MoveNext
Loop
Else
GoTo Exit_fConcatFld
End If
End With
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
|