2009-09-09 2 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 

Кроме того, любые идеи о том, как я могу отделить на основе 2 полей, соответствующих со стандартными и 3 полей, соответствующих со стандартными значениями

+0

Итак, какие у вас проблемы/проблемы? –

ответ

2

Являются ли наборы записей уже отсортированными? Я предполагаю, что это так, так как вы переходите к следующему rs2 по не совпадению. Лично я бы уточнил, чтобы сделать 100% уверенным.

Также я проверил бы это довольно тщательно с помощью небольшого набора тестовых данных с несколькими краями, чтобы убедиться, что вы получаете то, что ожидаете.

С учетом вышеизложенного ваш код выглядит так, как будто он работает, но у меня есть несколько небольших рекомендаций, которые упрощают чтение.

Сначала я рекомендовал бы отложить вложенные With rs1 и With rs2. Просто обращайтесь к каждому набору записей явно, чтобы вы могли четко видеть, что происходит с каждым rs. например:

If a > 3 Then GoTo correct 
       .MoveNext 

становится

If a > 3 Then GoTo correct 
       rs2.MoveNext 

Next вашего, если заявления с 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, а затем перенаправить в другой файл Excel для 0, 1, 2 и 3

Bruit Force and Notorance, но определенно изолирован.

Смежные вопросы