[AccessD] Concatenating data into lists

David & Joanne Gould dajomigo at tpg.com.au
Thu Dec 8 18:53:57 CST 2005


Thank you to all those who offered suggestions. The solution I used was to 
change to DAO. Below I have included a copy of the final module:

'************ Code Start **********
'This code was originally written by Dev Ashish
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Dev Ashish
'
Function fConcatChild(strChildTable As String, _
                     strIDName As String, _
                     strFldConcat As String, _
                     strIDType As String, _
                     varIDvalue As Variant) _
                     As String
'Returns a field from the Many table of a 1:M relationship
'in a semi-colon separated format.
'
'Usage Examples:
'   ?fConcatChild("Order Details", "OrderID", "Quantity", _
                 "Long", 10255)
'Where  Order Details = Many side table
'       OrderID       = Primary Key of One side table
'       Quantity      = Field name to concatenate
'       Long          = DataType of Primary Key of One Side Table
'       10255         = Value on which return concatenated Quantity
'
'Dim db As Database
'Dim rs As Recordset
Dim varConcat As Variant
Dim strCriteria As String, strSQL As String

Dim db As DAO.Database
Dim rs As DAO.Recordset


     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 = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

     'Are we sure that 'sub' records exist
     With rs
         If .RecordCount <> 0 Then
             'start concatenating records
             Do While Not rs.EOF
                 varConcat = varConcat & rs(strFldConcat) & ";"
                 .MoveNext
             Loop
         End If
     End With

     'That's it... you should have a concatenated string now
     'Just Trim the trailing ;
     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 **********



More information about the AccessD mailing list