我想比较两个记录集。第一个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个字段进行隔离的任何想法
答案 0 :(得分:2)
记录集是否已经排序?我猜这是因为你在非匹配时移动到下一个rs2
。就个人而言,我会指定一种100%确定的排序。
另外,我会使用一个带有一些边缘情况的小型测试数据集对此进行彻底的测试,以确保您得到您期望的结果。
考虑到上述情况,您的代码看起来很有效,但我有一些小建议,以便于阅读。
首先我建议放弃嵌套的With rs1
和With rs2
。只需明确引用每个记录集,这样您就可以清楚地看到每个记录集发生了什么。例如:
If a > 3 Then GoTo correct
.MoveNext
变为
If a > 3 Then GoTo correct
rs2.MoveNext
接下来,使用a = a + 1
的if语句可以进行一些整理。例如:
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
似乎有点多余。
答案 1 :(得分:0)
我的直觉说你正在做一些次优的事情;但是,在if语句If rs2.EOF Then
中,为什么不向a
添加比较,然后重定向到不同的Excel文件0,1,2和3
Bruit Force和Ignorance,但绝对是隔离的。