|
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.
Function fConcatChild(strChildTable As String, _
strIDName As String, _
strFldConcat As String, _
strIDType As String, _
varIDvalue As Variant) _
As String
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":
strSQL = strSQL & "[" & strIDName & "] = " & varIDvalue
Case Else
GoTo Err_fConcatChild
End Select
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
With rs
If .RecordCount <> 0 Then
Do While Not rs.EOF
varConcat = varConcat & rs(strFldConcat) & ";"
.MoveNext
Loop
End If
End With
fConcatChild = Left(varConcat, Len(varConcat) - 1)
Exit_fConcatChild:
Set rs = Nothing: Set db = Nothing
Exit Function
Err_fConcatChild:
Resume Exit_fConcatChild
End Function
|