我的 Access 数据库中有一个包含多个字段的报告,例如,它如下所示:
姓名 约翰
18 号
地点某处
姓名约翰
19 号
地点某处
姓名约翰
20 号
地点某处
名称 Bogo
Number 30
地点某处
约翰可以有多个号码。如您所见,“John”被多次列出,每个都有不同的编号。我只想获得一个名为“John”的详细信息行,如下所示:
姓名约翰
18 号;19; 20
放置某处
名称 Bogo
Number 30
地点某处
我怎样才能做到这一点?
解决方案是在访问模块中使用 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] 值。