2013-05-14 133 views
1

我在包含多个字段我的Access数据库,例如报告分组,它看起来像如下:访问:在报告

名称约翰
18号
某处

名称约翰
19号
某处

名称约翰
20号
某处

名称BOGO
数30
某处

约翰可以有多个号码。正如你所看到的,“约翰”被多次列出,每个都有不同的数字。我想只得到一个名为“John”的细节行,如下所示:

姓名约翰
编号18; 19; 20
某处

名称BOGO
数30
地方

地方我怎样才能做到这一点?

回答

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 ... 

...检索[名称]和单行中的(连接列表)[Number]值。

+0

谢谢。你的方法有效。 – Chris 2013-05-14 12:42:19