访问:在报告中分组

时间:2013-05-14 09:09:37

标签: ms-access access-vba

我的Access数据库中有一个包含多个字段的报告,例如,如下所示:

姓名约翰 第18号 放在某处

姓名约翰 第19号 放在某处

姓名约翰 第20号 放在某处

姓名Bogo
30号 放在某处

约翰可以拥有多个号码。如您所见,“John”被列出多次,每个都有不同的Number。我想得到一个名为“John”的详细行,如下所示:

姓名约翰 18号; 19; 20个
放在某处

姓名Bogo
30号 放在某处

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

解决方案是在访问模块中使用VBA代码将重复值“串在一起”(在您的情况下为“数字”)。代码的一般形式是:

Option Compare Database
Option Explicit

Public Function ListChildNames(ParentID As Long) As String
Dim cdb As DAO.Database, rst As DAO.Recordset, rtn As String
Const separator = "; "
Set cdb = CurrentDb
Set rst = cdb.OpenRecordset( _
        "SELECT [ChildName] FROM [ChildTable] " & _
        "WHERE ID=" & ParentID, _
    dbOpenSnapshot)
rtn = ""
Do While Not rst.EOF
    rtn = rtn & rst![ChildName] & separator
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set cdb = Nothing
If Len(rtn) > 0 Then
    rtn = Left(rtn, Len(rtn) - Len(separator))  '' trim trailing separator
End If
ListChildNames = rtn
End Function

(您必须调整表名和列名以匹配表结构。)

然后,在报告的记录来源中,而不是使用...

SELECT [Name], [Number] ... FROM ...

......你会使用像...这样的东西。

SELECT [Name], ListChildNames([Name]) AS Numbers ... FROM ...

...在一行中检索[Name]和[Number]值的(连接列表)。