VB6, Ms-Access-Datenbank-Bearbeitung von großen Mengen an Akten

Brauche ich, um zu verarbeiten Hunderte oder Tausende von Datensätzen mit VB6 und MS Access-Datenbank. Ich Durchlaufen des Recordsets und Bearbeiten jedem Datensatz. Allerdings dauert es eine Menge Zeit, dies zu tun. Erstellen einer Datenbank mit der gleichen Menge der Datensätze mit der Addnew und Update-Methoden arbeitet viel schneller.

Ich werde sehr dankbar, wenn jemand mir zeigt, jede code-Beispiel oder nur eine Strategie.

Hier ist der code

Data1(1).RecordSource = "Select * from TABLE order by Field_A ASC"
Data1(1).Refresh
If Data1(1).Recordset.RecordCount > 0 Then
    Data1(1).Recordset.MoveFirst
    Do
        Data1(1).Recordset.Edit
        Data1(1).Recordset.Fields("FIELD") = Sort_Value
        Data1(1).Recordset.Update
        Data1(1).Recordset.MoveNext
    Loop Until Data1(1).Recordset.EOF = True
End If

Es ist wirklich ganz ganz einfach. Die Reale Sache ist, ich habe vergessen zu erwähnen, dass tha HDD der computer ständig rot/schreibt. Dies ist tatsächlich das problem. Mit eine so schwere Last, dort ist keine Weise, nicht auf die Leistung auswirken.

Ich dachte zuerst, dass das recordset von der Abfrage generierte, im Hinterkopf behalten, dass wir hane 1-2 Millionen Datensätze, die das problem verursacht. Ich denke, es befindet sich auf einem temporären Platz auf der Festplatte und im RAM. Und so executin .Bearbeiten und .Update könnte ein problem in der ersten positionieren Sie den cursor an der richtigen Stelle und dann schreiben.

Weiß es nicht sicher. Wahrscheinlich würde es ein Experte sein, um mir zu zeigen, einen Weg aus.

Btw. Ich habe auch versucht mit dem Austausch der
Schleife, Bis Sie Data1(1).Recordset.EOF = True
Anweisung mit fester Länge-Zyklus, denn ich habe auch gelesen, dass diese überprüfung für die Recordset.EOF verlangsamt Leistung.

Vielen Dank im Voraus!

  • teilen Sie Ihre code -, UPDATE-Anweisung etc. hilfreich
  • Mithilfe einer Transaktion eher als das schreiben der updates jedes mal wird wesentlich schneller sein, siehe mein Beispiel Antwort hier: stackoverflow.com/questions/12930603/...
  • Ich habe angefangen, ein Kopfgeld für Sie, da bin ich neugierig auf diese mir. Wenn Sie die Bearbeitung Ihrer post, die code enthalten, den Sie momentan verwenden, könnte es helfen, Menschen zu finden, die Ihren code auch für die Schwächen.
  • Es ist wirklich schwer zu sagen, wie sollten Sie die Geschwindigkeit verbessern, was Sie tun, wenn Sie nicht zeigen (oder zumindest sagen) Sie uns, was Sie tun in den ersten Platz. "Wie kann ich meinen code schneller? Ich werde nicht, Sie Ihnen zu zeigen, oder sogar sagen, was es genau macht. Können Sie mir helfen?"
  • Nur eine Frage; können Sie uns sagen, wenn die Tabelle über Indizes verfügt oder wichtige Felder, und, wenn ja, welche Felder sind das?
  • +1 für die Verwendung einer Transaktion, da @MattDonnan schlägt. Die Testergebnisse here sind für Einsätze, aber eine Transaktion beschleunigen kann Chargen von updates zu.
  • Anscheinend verwendest du ein Daten-Steuerelement mit DAO zu aktualisieren Sie Ihre Aufzeichnungen. Loswerden, dass Daten-Steuerelements und verwenden nur plain-Recordsets. Entfernen Sie auch die Order By wenn nicht benötigt. Wiederholen Sie dann den Vorgang.
  • BellyMark - Können Sie überprüfen, shareef Antwort und sehen, ob es beschleunigt den Prozess? wenn ja, bitte geben Sie ihm die Akzeptierte Antwort Haken, so kann ich die Auszeichnung der bounty. Wenn nicht, lassen Sie es uns bitte wissen. Danke!
  • Ich habe das Gefühl, das wir nicht hören von ihm, bis er wieder an die Arbeit in ein paar Stunden. Sobald wir mehr details darüber, wo er die erste Sort_Value, desto besser können wir ihm helfen.
  • Hallo, mal wieder!Sorry für die Unterbrechung, aber eine Sache hielt mich davon entfernt. Ich vergaß zwei wichtige Sache zu erwähnen:1. Die Indizierung wird nicht ganz für mich arbeiten, denn es gibt wirklich eine Menge von Daten, die dynamisch generiert, so dass, sobald ein Datensatz bearbeitet wird, ist es nur selten zurückkommen. 2. Mehr wichtig - ich entschuldige mich erneut vergessen zu erwähnen, ist, dass die Aufzeichnungen müssen Durchlaufen, da die Aufgabe ist zu berücksichtigen, die benachbarten Datensätze Werten.
  • Sie können Sie aktualisieren, basierend auf der angrenzenden Rekord-Werte über eine Abfrage zu. Je nach Daten kann es erforderlich, eine Unterabfrage obwohl. Ich denke, es wäre es Wert für Sie zu post-ein Beispiel für die Daten und das Ergebnis, die Sie suchen.

InformationsquelleAutor BellyMark | 2013-06-17
Schreibe einen Kommentar