2009-05-26 3 views
0

У меня два набора записей, которые имеют один и тот же первичный ключ: комбинация из двух столбцов, называемых «item_no» и «Order_id» ..... Оба набора записей имеют этот первичный ключ (комбинация) и остальные разные столбцы ...выравнивание соответствующих строк в recordSet

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

например рассмотреть rset1 и rset2 ... с указанными выше столбцами в качестве комбинации первичных ключей и row5 в rset1 имеет значения для «item_no» и «order_id» как , а строка 8 в rset2 имеет значения для a Бове в (что то же самое) ....

1) Теперь я хочу принести row5 (в rset1) в положение 8 Sucht, что обе записи же на позиции в

набора записей

2), если нет общих записей, найденных в обоих rsets ... тогда я оставлю это blnk в позиции tht (в rset1) для соответствующей строки (в rset2) [значение tht для записи в rset2 ther не соответствует записи в rset1 ]

Это всегда убеждаться ТНТ нет: записей в rset2> THT в rset1 ...

Можете ли вы помочь, как пойти с выравниванием записей в наборе записей в VB6.0, поскольку я буду привязывать эти наборы записей к Excel для отображения бок о бок ??

Любой встроенный метод (для выравнивания или любой) в VB6.0 ??

+0

Являются ли результаты из одного и того же продукта SQL? (Какой?) Возможно ли создать ПОЛНУЮ ВЗАИМУЮ РАБОТУ между двумя результирующими наборами с использованием SQL? – onedaywhen

+0

или UNION LEFT OUTER JOIN и ПРАВИЛЬНОЙ ВСТУПИТЕЛЬНОЙ ВСТУПЛЕНИЯ? – barrowc

ответ

1

В VB6 нет встроенного метода (это не то, что я знаю), но сделать это достаточно легко.

Что вам нужно сделать, это создать два ложных списка записей, после того как вы их получите, вы можете выплюнуть их, как вам угодно (в файл csv, чтобы преуспеть, доступ к ms). CAVEAT: записи должны быть отсортированы по первичному ключу для работы.

Этот код проходит через оба набора записей в порядке, создавая упорядоченные списки с пробелами или ссылками на запись (хотя он очень похож на код VB, считайте это псевдокодом, логика правильная, он не будет компилироваться)

Dim rs1 As Recordset 
Dim rs2 As Recordset 

Dim rs1List As Collection 
Dim rs2List As Collection 

REM code here to initialise the collections to new Collection and fill the record sets 

Do While Not rs1.EOF And Not rs2.EOF 
    If rs1("PKey") = rs2("PKey") Then 
     rs1List.Add rs1.Bookmark 
     rs2List.Add rs2.Bookmark 
     rs1.Movenext 
     rs2.Movenext 
    ElseIf rs1("PKey") < rs2("PKey") Then 
     rs1List.Add rs1.Bookmark 
     rs2List.Add Nothing 
     rs1.Movenext 
    ElseIf rs1("PKey") > rs2("PKey") Then 
     rs1List.Add Nothing 
     rs2List.Add rs2.Bookmark 
     rs2.Movenext 
    End If 
Loop 
Do While Not rs2.EOF 
    rs1List.Add Nothing 
    rs2List.Add rs2.Bookmark 
    rs2.Movenext 
Loop 
Do While Not rs1.EOF 
    rs1List.Add rs1.Bookmark 
    rs2List.Add Nothing 
    rs1.Movenext 
Loop 

Предполагает первичный ключ поля PKey, и что .Bookmark является метод, который вы можете использовать, чтобы перейти непосредственно к этой записи (положение порядкового может сделать, если имеется).

Надеется, что это помогает

Редактировать

Просто изменились некоторые биты в последней две петле, они были не совсем правы.

+1

+1 Похож на классический алгоритм слияния для меня :) http://en.wikipedia.org/wiki/Merge_algorithm – MarkJ

+0

Это было бы так, я использовал его в колледже на протяжении нескольких лет и полностью забыл его имя (на самом деле, я забыл, что у него даже было имя). –

+0

Тривиальная точка: «Do While Not EOF» часто читается как «Do Not EOF».« – Bob

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