Ms Access 比较两个记录集
Posted
技术标签:
【中文标题】Ms Access 比较两个记录集【英文标题】:Ms Access Comparing two recordsets 【发布时间】:2009-09-09 10:59:00 【问题描述】:我正在尝试比较两个记录集。第一个 rs1 有随机记录。第二个 rs2 具有这些记录的标准值。最初,我希望获取每条记录,看看它们是否与第二个记录集中的标准值集匹配。每个记录集中有四个字段要比较,并且四个字段都必须匹配。
我只是需要一些帮助。我正在尝试将不匹配的记录写入 excel 文件。 这是我到目前为止所拥有的
While Not rs1.EOF
With rs1
.MoveFirst
With rs2
.MoveFirst
While Not rs2.EOF
counter = counter + 1
a = 0
If rs1!Kk = rs2!Kk Then a = a + 1
If rs1!CC = rs2!CC Then a = a + 1
If rs1!HN = rs2!HN Then a = a + 1
If rs3!TN = rs2!TN Then a = a + 1
If a > 3 Then GoTo correct
.MoveNext
If rs2.EOF Then
If rs!Table_Name <> "table1" Then
i = i + 1
j = 1
counter = counter + 1
objSht.Cells(i, j).Value = "casenum" & rs1.Fields(1)
j = j + 1
stat_counter = stat_counter + 1
End If
If i = 65500 Then
Set wbexcel = objexcel.ActiveWorkbook
''//Set objSht = wbexcel.Worksheets("Sheet2")
Set objSht = wbexcel.Worksheets.Add
i = 2
End If
End If
correct:
rs1.MoveNext
Wend
End With
End With
还有关于我如何根据与标准匹配的 2 个字段和与标准值匹配的 3 个字段进行隔离的任何想法
【问题讨论】:
那么你有什么问题/问题?? 【参考方案1】:记录集是否已经排序?我猜是这种情况,因为您在不匹配时移至下一个rs2
。就我个人而言,我会指定一种 100% 确定的排序方式。
此外,我会使用带有一些边缘情况的小型测试数据集对此进行彻底测试,以确保您得到预期的结果。
考虑到上述内容,您的代码看起来可以工作,但我有一些小建议可以使其更易于阅读。
首先我建议放弃嵌套的With rs1
和With rs2
。只需明确引用每个记录集,您就可以清楚地看到每个 rs 发生了什么。例如:
If a > 3 Then GoTo correct
.MoveNext
变成
If a > 3 Then GoTo correct
rs2.MoveNext
接下来你的 if 语句与 a = a + 1
可以做一些整理。例如:
If rs1!Kk = rs2!Kk and rs1!CC = rs2!CC and rs1!HN = rs2!HN and rs3!TN = rs2!TN then
''// Do Nothing or maybe increase a count or whatever :)
else
WriteToExcel(objSht , rs1.fields)
end if
您需要编写一个名为 WriteToExcel() 的函数,但这将使下一步更容易。我想你想根据比赛写不同的表格吗?
If rs1!Kk = rs2!Kk and rs1!CC = rs2!CC and rs1!HN = rs2!HN and rs3!TN = rs2!TN then
''// Do Nothing
else if rs1!Kk = rs2!Kk and rs1!CC = rs2!CC and rs1!HN = rs2!HN then
WriteToExcel(objSht2 , rs1.fields)
else
WriteToExcel(objSht , rs1.fields)
end if
在需要任意两个匹配的情况下,您可能还想查看开关,而不是上面的特定匹配...哦,variable j
似乎有点多余。
【讨论】:
【参考方案2】:我的直觉告诉你,你做的事情并不理想;但是,在 if 语句 If rs2.EOF Then
中,为什么不添加与 a
的比较,然后针对 0、1、2 和 3 重定向到不同的 Excel 文件
蛮力和无知,但绝对是分开的。
【讨论】:
以上是关于Ms Access 比较两个记录集的主要内容,如果未能解决你的问题,请参考以下文章