2009-09-09 8 views
2

두 레코드 집합을 비교하려고합니다. 첫 번째 rs1에는 임의의 레코드가 있습니다. 두 번째 rs2에는 해당 레코드의 표준 값이 있습니다. 처음에는 각 레코드를 가져 와서 두 번째 레코드 세트의 표준 값 집합과 일치하는지 확인하려고합니다. 비교할 각 레코드 세트에는 네 개의 필드가 있으며 모두 네 개가 일치해야합니다.Ms 액세스 두 레코드 집합 비교

저는 루프에서 도움이 필요합니다. 일치하지 않는 레코드를 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 

난 내 직감이 당신이 말한다

+0

그럼 어떤 문제/문제가 있습니까 ?? –

답변

2

레코드 집합이 이미 정렬되어 있습니까? 나는 당신이 일치하지 않는 다음 rs2으로 이동했기 때문에 그런 경우라고 추측합니다. 개인적으로 나는 100 % 확실한 정렬을 지정할 것입니다.

또한 약간의 엣지 케이스가있는 작은 테스트 데이터 세트를 사용하여이 테스트를 수행하여 예상 한 결과를 얻도록하십시오.

위의 코드를 사용하면 코드가 제대로 작동하는 것처럼 보이지만 읽기 쉽도록 몇 가지 작은 권장 사항이 있습니다.

먼저 중첩 된 With rs1With rs2을 버리는 것이 좋습니다. 각 레코드 집합을 명시 적으로 참조하면 각 레코드에 어떤 일이 일어나는지 명확하게 볼 수 있습니다. 예 :

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

표준과 일치하는 필드의 2 표준 값과 일치하는 필드의 3에 따라 분리 할 수있는 방법에 대한 아이디어 차선책으로 뭔가를하는 것; 그러나 if 문 If rs2.EOF Thena에 대한 비교를 추가 한 다음 0, 1, 2 및 3에 대해 다른 Excel 파일로 리디렉션하지 마십시오.

Bruit Force 및 Ignorance는 분명히 분리되어 있습니다.