2009-09-09 68 views
2

我想比较两个记录集。第一个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

那么你有什么问题/问题? – 2009-09-09 22:02:50

回答

2

记录集是否已经排序?我猜是这样,因为你在未匹配的情况下移动到下一个rs2。就我个人而言,我会指定一种可以100%确定的排序。

此外,我会用少量边缘情况下的小测试数据集来测试这个相当彻底,以确保您得到您所期望的。

考虑到上述内容,您的代码看起来像是可以工作,但我有一些小建议可以让它更易于阅读。

首先我建议开沟嵌套With rs1With rs2。只需明确指出每个记录集,以便清楚地看到每个rs发生了什么。例如:

If a > 3 Then GoTo correct 
       .MoveNext 

成为

If a > 3 Then GoTo correct 
       rs2.MoveNext 

接下来你如果与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似乎有点多余。

0

我的直觉说你是什么想法做不到最佳的事情;然而,在if语句If rs2.EOF Then,为什么不添加一个比较a,然后重定向到0,1,2和3的另一个Excel文件

Bruit力量和无知,但绝对隔离。