我目前正在使用连续表单来显示一组数据,这些数据会产生以下格式(每行为一条记录):
1/04/13 Person1
31/03/13 Person1
30/03/13 Person1
29/03/13 Person2
28/03/13 Person1
这些记录有100条,我想将其浓缩为以下内容:
30/03/13 - 1/04/13 Person1
29/03/13 Person2
28/03/13 Person1
数据来自查询,因此可以在SQL级别进行操作,甚至可以进入表单阶段。我也很习惯使用宏或VBA来操作表单。但是,我仍然无法找到合适的方法。
我意识到这是报告的典型行为,但由于我最终希望将其作为子窗体嵌入另一种形式,因此我无法使用报告(除非我遗漏,否则无法在表单中创建子报告东西)。
非常感谢任何帮助或建议。
答案 0 :(得分:1)
对问题的描述很好。尝试构建这样的源查询(假设字段名为MyDate
和MyPerson
,源表格为MyTable
):
Select Person, min(MyDate) as StartDate, max(MyDate) as EndDate
from MyTable
group by Person
这为您提供了3个可以放入表单的字段。
既然我们已经有了更完整的图片,那么任务就变得更复杂了,但你仍然可以选择假设人与人之间的“事件”不重叠(如果他们这样做,那么我就无法想到如何创建之后的eventIDs)。如果没有EventID,您必须创建一个:
首先,您需要将数据移动到新表格,以便您可以对其进行重新排序,并为您将在步骤2中添加的事件ID添加空白字段。
1A。将MyTable复制到新表中。添加一个名为EventID的额外字段
1B。要填充此表,请先Delete * from TmpTbl
1C。然后是:
Insert into TmpTbl.* from MyTable order by MyDate,MyPerson
此代码将查看您的临时表(我称之为TmpTbl)并添加事件ID。
Sub AddEventIDs()
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("TmpTbl")
Dim LastPerson As String
Dim EventID As Integer
docmd.setwarnings false
While rst.EOF = False
If LastPerson <> rst.Fields("MyPerson") Then EventID = EventID + 1
LastPerson = rst.Fields("MyPerson")
rst.Edit
rst.Fields("EventID") = EventID
rst.Update
rst.MoveNext
Wend
docmd.setwarnings true
End Sub
在表单的On Load事件中,添加2个查询和#1和#2中的子例程。
您的最终查询将是:
Select MyPerson, EventID, min(MyDate) as StartDate, max(MyDate) as EndDate
from MyTable
group by MyPerson,EventID