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: Retourne une liste concaténée de valeur d'enregistrements apparentés

Author(s)
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 **********

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