我想通过查询基于MDB中的“控制开始”,“控制停止”,“应用程序”和“记录类型”字段来更新BegAtt和EndAtt值。 以下是我的MDB数据库的记录集,我要根据其中具有Record Type = Email的父记录来更新BegAtt和EndAtt值:
Application Record Type Control Start Control Stop BegAtt EndAtt
Outlook Mail Document Email 3rd-Party_00000040 3rd-Party_00000040
Adobe Acrobat Document Email-Attachment 3rd-Party_00000041 3rd-Party_00000044
Adobe Acrobat Document Email-Attachment 3rd-Party_00000045 3rd-Party_00000045
Adobe Acrobat Document Email-Attachment 3rd-Party_00000046 3rd-Party_00000049
Adobe Acrobat Document Email-Attachment 3rd-Party_00000050 3rd-Party_00000181
Adobe Acrobat Document Email-Attachment 3rd-Party_00000182 3rd-Party_00000223
Adobe Acrobat Document Email-Attachment 3rd-Party_00000224 3rd-Party_00000243
Adobe Acrobat Document Email-Attachment 3rd-Party_00000244 3rd-Party_00000250
Adobe Acrobat Document Email-Attachment 3rd-Party_00000251 3rd-Party_00000460
Outlook Mail Document Email 3rd-Party_00000461 3rd-Party_00000461
Adobe Acrobat Document Email-Attachment 3rd-Party_00000462 3rd-Party_00000611
BegAtt值应该是主记录的第一个值(记录类型=电子邮件),EndAtt值应该是族的最后一个值(记录类型=电子邮件附件)。以下是理想的结果:
Application Record Type Control Start Control Stop BegAtt EndAtt
Outlook Mail Document Email 3rd-Party_00000040 3rd-Party_00000040 3rd-Party_00000040 3rd-Party_00000460
Adobe Acrobat Document Email-Attachment 3rd-Party_00000041 3rd-Party_00000044 3rd-Party_00000040 3rd-Party_00000460
Adobe Acrobat Document Email-Attachment 3rd-Party_00000045 3rd-Party_00000045 3rd-Party_00000040 3rd-Party_00000460
Adobe Acrobat Document Email-Attachment 3rd-Party_00000046 3rd-Party_00000049 3rd-Party_00000040 3rd-Party_00000460
Adobe Acrobat Document Email-Attachment 3rd-Party_00000050 3rd-Party_00000181 3rd-Party_00000040 3rd-Party_00000460
Adobe Acrobat Document Email-Attachment 3rd-Party_00000182 3rd-Party_00000223 3rd-Party_00000040 3rd-Party_00000460
Adobe Acrobat Document Email-Attachment 3rd-Party_00000224 3rd-Party_00000243 3rd-Party_00000040 3rd-Party_00000460
Adobe Acrobat Document Email-Attachment 3rd-Party_00000244 3rd-Party_00000250 3rd-Party_00000040 3rd-Party_00000460
Adobe Acrobat Document Email-Attachment 3rd-Party_00000251 3rd-Party_00000460 3rd-Party_00000040 3rd-Party_00000460
Outlook Mail Document Email 3rd-Party_00000461 3rd-Party_00000461 3rd-Party_00000461 3rd-Party_00000611
Adobe Acrobat Document Email-Attachment 3rd-Party_00000462 3rd-Party_00000611 3rd-Party_00000461 3rd-Party_00000611
我尝试了下面的代码,但结果不正确。
SELECT [3rd-Party001_Main].[Record Type], Min([3rd-Party001_Main].[Control Start]) AS [MinOfControl Start], Max([3rd-Party001_Main].[Control Stop]) AS [MaxOfControl Stop]
FROM [3rd-Party001_Main]
GROUP BY [3rd-Party001_Main].[Record Type];
答案 0 :(得分:0)
由于没有“家庭”标识符,仅查询对象将无法完成您想要的操作。需要VBA代码遍历记录集检查,以便在值更改时确定“家庭”组的开始,设置StartAtt字段的值并运行UPDATE操作SQL来设置EndAtt字段。根据数据样本,请考虑:
Sub SetRange()
Dim rs As DAO.Recordset, strStart As String, strEnd As String, strApp As String
Set rs = CurrentDb.OpenRecordset("SELECT * FROM [3rd-Party001_Main] WHERE BegAtt Is Null ORDER BY ControlStart;")
Do
If rs!Application Like "Outlook*" Then
strStart = rs!ControlStart
End If
strEnd = rs!ControlStop
rs.Edit
rs!StartAtt = strStart
rs.Update
rs.MoveNext
If Not rs.EOF Then strApp = rs!Application
If (Not rs.EOF And strApp Like "Outlook*") Or rs.EOF Then
CurrentDb.Execute "UPDATE [3rd-Party001_Main] SET EndAtt = '" & strEnd & "' WHERE StartAtt='" & strStart & "'"
End If
Loop Until rs.EOF
End Sub
建议在命名约定中不要使用空格或标点/特殊字符。