下午,
我正在处理一组记录,这些记录列出了附加到默认项目代码的信用卡交易。第一步是导入填充tblMaster的记录。 30天后的第二步是将下一组记录附加到tblMaster。如果记录已移至项目代码,则它不会在此记录集中。如果记录未被移动到项目代码,它将保留在默认项目代码列表中,这意味着您最终得到两个记录,并且它们之间唯一不同的是报告日期等于日期报告已运行,新记录将附加到tblMaster。
我想排队以确保我们拥有相同记录的字段是empName(员工姓名) 量 项目日期 refNum(交易参考编号) 报告日期
我遇到的问题是如果empName,amount,item date,refNum都相同的逻辑,则保留两个报告日期中的较晚者。我想通过将名为matchRec的布尔框标记为true来摆脱早期的报告日期。这将过滤掉我的记录集中的记录,但我仍然可以将其用于历史目的。
到目前为止,我已经想到了代码:
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim criteria As String
Set db = CurrentDb
Set rs1 = db.OpenRecordset("Select * From tblMaster Where matchRec = False Order By ID")
Set rs2 = db.OpenRecordset("Select * From tblMaster Where matchRec= False Order By ID")
Debug.Print
While Not rs1.EOF
criteria = _
"empName = '" & rs1!empName.Value & "' And " & _
"Quantity = " & Str(-rs1!Quantity.Value) & " And " & _
"reportDate = '" & rs1!reportDate.Value & "' And " & _
"matchRec = False"
rs2.FindFirst criteria
If rs2![reportDate] = rs1![reportDate] Then
rs1!matchRec.Value = True
rs1.Update
rs2.Edit
rs2!matchRec.Value = True
rs2.Update
End If
rs1.MoveNext
Wend
rs2.Close
rs1.Close
Set rs2 = Nothing
Set rs1 = Nothing
Set db = Nothing
End Sub
答案 0 :(得分:0)
我认为你需要的只是一个这样的查询。我怀疑你的[RefNum]是独一无二的,所以你可能不需要再加入,但我可能会弄错。如果[refNum]单独没有唯一标识行,则根据需要将剩余列添加到连接
UPDATE tblMaster a
Set matchRec = True
WHERE EXISTS (
SELECT 1
FROM tblMaster b
WHERE a.refNum = b.refNum
and b.ReportDate > a.ReportDate
)