2009-05-26 13 views
0

Ich habe zwei Recordsets, die den gleichen Primärschlüssel haben: Kombination von zwei Spalten namens "item_no" und "Order_id" ..... Beide Recordsets haben diesen Primärschlüssel (Kombination) und Rest anderen verschiedene Spalten ...Ausrichten der entsprechenden Zeilen in einem RecordSet

Nun, ich möchte die (jene) Reihen in zwei Cord-Sets, so dass die Position der Datensätze (mit gleichen Primärschlüssel-Werte) bestellen gleich sein sollte ...

Eg betrachten rset1 und rset2 ... mit den obigen Spalten als Primärschlüssel-Kombination und row5 in rset1 hat Werte für 'item_no' und 'order_id' als und Zeile 8 in rset2 hat Werte für die a Bove als (die gleiche ist) ....

1) Nun will ich row5 (in rset1 bringen) 8 sucht zu positionieren, dass die beiden Datensätze an Position derselben sind in den Datensatzgruppen

2) wenn keine gemeinsamen Datensätze in beiden Rsets gefunden werden, dann lasse ich es an der Position (in rset1) für die entsprechende Zeile (in rset2) [was bedeutet, dass für einen Datensatz in Rset2 ist keine korrespondierende Datensatz existiert in Rset1 ]

Es ist immer sicher tht gemacht no: der Datensätze in rset2> tht in rset1 ...

Können Sie mit der Ausrichtung von Datensätzen in Recordset in VB6.0 helfen, wie ich diese Recordsets an Excel für die Anzeige nebeneinander binden möchte?

Any in gebaute Methode (um Ausrichtung oder anythin zu tun) in VB6.0 ??

+0

Sind die Resultsets aus demselben SQL-Produkt? (Welche?) Ist es möglich, einen FULL OUTER JOIN zwischen den beiden Resultsets mit SQL zu erstellen? – onedaywhen

+0

oder die UNION eines LINKEN OUTER JOIN und eines RECHTEN ÄUSSEREN JOIN? – barrowc

Antwort

1

Es gibt keine eingebaute Methode in VB6, um dies zu tun (nicht, dass ich davon weiß), aber es ist einfach genug, sich selbst zu tun.

Was Sie tun müssen, ist zwei falsche Liste von Datensätzen zu erstellen, sobald Sie sie haben, können Sie sie ausspucken, wie immer Sie wollen (in eine CSV-Datei, Excel, MS-Zugriff). CAVEAT: Die recordSets müssen nach dem Primärschlüssel sortiert sein, damit sie funktionieren.

Dieser Code durchläuft beide Recordsets der Reihe nach und erstellt geordnete Listen mit Leerzeichen oder Links zu einem Datensatz

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 

nimmt der Primärschlüsselfeld PKey ist, und dass .Bookmark ist eine Methode, die Sie direkt zu diesem Datensatz gehen können (Ordnungsposition könnte, wenn verfügbar machen).

this helps

bearbeiten

einfach ein paar Bits in den letzten zwei Schleifen geändert, sie ist nicht ganz richtig waren.

+1

+1 Sieht aus wie der klassische Merge-Algorithmus zu mir :) http://en.wikipedia.org/wiki/Merge_algorithm – MarkJ

+0

Das wäre es, ich habe es in der Schule eine Punktzahl von Jahren verwendet, und hatte seinen Namen komplett vergessen (tatsächlich hatte ich vergessen, dass es sogar einen Namen hatte). –

+0

Trivialpunkt: "Do While Not EOF" ist oft besser lesbar als "Do Until EOF." – Bob

Verwandte Themen