Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: Access Tabellen vergleichen
AUTOR BEITRAG
†ЯøjãnэЯ *www.mh-auto.de*

RANG Deckschrubber

#1 - 18.10 09:47

hi..

da ich nicht 100%ig fit bin in access, eröffne ich halt nun mal den 5. thread :)

Frage:

Ich habe zwei Access Tabellen. Tabelle A hat hat 19168 Datensätze, Tabelle B 6858.

Nun möchte ich eine neue Tabelle erstellen, die die gleichen Datensätze (A<->B) enthält.

Ich habe das ganze mit einem kleinem VBA-Programm probiert. Damit hätte ich aber ca. 131 Millionen Abfragen und ob der Rechner überhaupt mal fertig wird, ist die Frage :)

- Ist der Code an sich richtig? Oder wird etwas anderes ausgeführt?
- Kann man das ganze etwas anders angehen, dass es schneller geht?

Thx 4 help



code:

Private Sub Befehl3_Click()

    Dim B As ADODB.Recordset
    Set B = New ADODB.Recordset
    
    B.Open "B", Application.CurrentProject.Connection, adOpenDynamic, adLockOptimistic
    
    Dim A As ADODB.Recordset
    Set A = New ADODB.Recordset
    
    A.Open "Bearingmarket", Application.CurrentProject.Connection, adOpenDynamic, adLockOptimistic
    
    Dim TextFC As String
    Dim TextBM As String
    

        A.MoveFirst
    
        Do While A.EOF = False
                 
            For I = 6858 To 0 Step -1
                For J = 19168 To 0 Step -1
                  If (A![Compressed Designation] = B!Comp_Dsg) Then
                    Matched!Code = B!Code
                    Matched!P_Dsg = B!P_Dsg
                    Matched!Comp_Dsg = B!Comp_Dsg
                    Matched!Year = B!Year
                    Matched!Qty = B!Qty
                    Matched!SV_single = B!SV_single
                    Matched!Vol_single = B!Vol_single
                             
                     End If
                    Next 'End J
                Next 'End I
        
        
            B.MoveNext
            
        Loop




End Sub
h¥pertex

RANG Deckschrubber

#2 - 18.10 11:24

du kannst ne schleifenabbruch bedingung machen... wenn du nämlich immer nur einmal jeden eintrag brauchst (ich weiss ja nicht ob da manche sachen mehr als einmal vorkommen)

wenn du also in der neuen tabelle doppelte einträge eh nicht brauchst, dann kannst du nen abbruch einfügen, dass wenn einer gefunden wird, die schleife nicht bis 19168 durchlaufen wird.

in deinem beispiel also irgendwie so

code:

            For I = 6858 To 0 Step -1
                For J = 19168 To 0 Step -1
                  If (A![Compressed Designation] = B!Comp_Dsg) Then
                    Matched!Code = B!Code
                    Matched!P_Dsg = B!P_Dsg
                    Matched!Comp_Dsg = B!Comp_Dsg
                    Matched!Year = B!Year
                    Matched!Qty = B!Qty
                    Matched!SV_single = B!SV_single
                    Matched!Vol_single = B!Vol_single
                    'Hier die abbruchbedingung: wenn etwas gefunden wurde, soll die schleife abbrechen:
                    J = 0
                    'bewirkt also, dass die schleife nach dem ersten match endet, und mit den nächsten datensatz aus b weitermacht
                     End If
                    Next 'End J
                Next 'End I




hoffe das hilft dir weiter
†ЯøjãnэЯ *www.mh-auto.de*

RANG Deckschrubber

#3 - 18.10 11:27

danke für den tipp.

jedoch kanns sein, dass die selbe bezeichnung nochmals vorkomment, jedoch nur unter einem jahr!

d.h. ich muss alles durchlaufen

kann man irgendwie pauschalisieren wie lange die abfrage dauern wird?
insg. ca 130 mio. abfragen (p4, 2.8 ghz, 1gm ram)

denke aber eher nicht bzw schwer zu sagen oder?
h¥pertex

RANG Deckschrubber

#4 - 18.10 11:36

probiers einfach aus... wenns ne einmalige sache ist, dann kann er ja auch mal ein paar stunden rechnen...
kannst es ja zuerst mit beschnittenen daten testen

was mir grad noch aufgefallen ist:

tabelle a:

test
test1
test

tabelle b:

test
test1
test

wir bei deiner variante in die neue tabelle schreiben:

test
test
test1
test
test

weil du das erste test aus b mit beiden aus a vergleichst, und auch matchst
und dann wenn du beim 2. test aus b bist, wieder mit beiden aus a matchst.
Morath

RANG Deckschrubber

#5 - 19.10 14:33

muss es unbedingt ein Skript sein? Oder tuts ne ganz altmodische SQL-Abfrage auch? ;-)

So würde z.B.

SELECT A.* FROM A,B
WHERE A.attr1 = B.attr1 AND A.attr2 = B.attr2...

alle Datensätze ausgeben, die in beiden Tabellen exakt gleich sind.
†ЯøjãnэЯ *www.mh-auto.de*

RANG Deckschrubber

#6 - 20.10 10:23

sql tuts natürlich auch :) danke
Morath

RANG Deckschrubber

#7 - 22.10 08:08

*bläst den Rauch vom Colt und geht langsam davon, den starren Körper des auf dem Boden liegenden VBA-Skripts schnell vergessend*

:D