---Soumis par Dev Ashish---
Retourne une liste concaténée de valeur d'enregistrements apparentés.
(Q) Comment extraire toutes les valeurs d'une table liée à une autre table dans une relation 1:M ?
(A) La fonction suivante, fConcatChild, peut être
utilisée dans une requête
SELECT Orders.*, fConcatChild("Order
Details","OrderID","Quantity","Long",[OrderID]) AS
SubFormValuesFROM Orders;
Cet exemple est basé sur les tables Orders et Orders Details de la base
de données Northwind, tables dans une relation un-à-plusieurs. Ici, fConcatChild
simplement concatène la valeur du champ Quantity des enregistrements ayant le
champ OrderID, de datatype Long, égal à la valeur actuelle du champ [OrderID],
pour la table Order Details.
'************ Code Start ********** Function fConcatChild(strChildTable As String, _ strIDName As String, _ strFldConcat As String, _ strIDType As String, _ varIDvalue As Variant) _ As String 'Retourne les valeurs d'un champ du coté M d'une relation 1:M 'dans un format par séparateur de point- virgule ' 'Usage ' ?fConcatChild("Order Details", "OrderID", "Quantity", _ "Long", 10255) 'où Order Details = Table du coté multiple ' OrderID = Champ à comparer ' Quantity = Champ à concaténer ' Long = DataType du champ à comparer ' 10255 = Valeur pour la comparaison ' Dim db As Database Dim rs As Recordset Dim varConcat As Variant Dim strCriteria As String, strSQL As String On Error GoTo Err_fConcatChild varConcat = Null Set db = CurrentDb strSQL = "Select [" & strFldConcat & "] From [" & strChildTable & "]" strSQL = strSQL & " Where " Select Case strIDType Case "String": strSQL = strSQL & "[" & strIDName & "] = '" & varIDvalue & "'" Case "Long", "Integer", "Double": 'AutoNumber is Type Long strSQL = strSQL & "[" & strIDName & "] = " & varIDvalue Case Else GoTo Err_fConcatChild End Select Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot) 'Existe-t-il au moins un enregistrement? With rs If .RecordCount <> 0 Then 'si oui, commencer la concaténation Do While Not rs.EOF varConcat = varConcat & rs(strFldConcat) & ";" .MoveNext Loop End If End With 'Voilà... on possède la dite chaîne 'enlever le dernier ; fConcatChild = Left(varConcat, Len(varConcat) - 1) Exit_fConcatChild: Set rs = Nothing: Set db = Nothing Exit Function Err_fConcatChild: Resume Exit_fConcatChild End Function '************ Code End **********