Recordset.Edit oder Update-sql-vba-Anweisung Schnellste Weg, um zu aktualisieren?
Kurzem stieß ich auf vba-update-Anweisungen, und ich habe mit Recordset.Edit
und Recordset.Update
nicht nur Bearbeiten, meine vorhandenen Daten, sondern um Sie zu aktualisieren.
Ich will wissen, den Unterschied zwischen den beiden: recordset.update
und Update sql Vba
- Anweisung. Ich denke, Sie alle tun das gleiche, aber ich kann nicht herausfinden, die effizienter ist und warum.
Beispiel-code unten:
'this is with sql update statement
dim someVar as string, anotherVar as String, cn As New ADODB.Connection
someVar = "someVar"
anotherVar = "anotherVar"
sqlS = "Update tableOfRec set columna = " &_
someVar & ", colunmb = " & anotherVar &_
" where columnc = 20";
cn.Execute stSQL
Dies ist für recordset (aktualisieren und Bearbeiten):
dim thisVar as String, someOthVar as String, rs as recordset
thisVar = "thisVar"
someOthVar = "someOtherVar"
set rs = currentDb.openRecordset("select columna, columnb where columnc = 20")
do While not rs.EOF
rs.Edit
rs!columna = thisVar
rs!columnb = someOthvar
rs.update
rs.MoveNext
loop
- Wie viele Reihen aktiviert sind
WHERE columnc = 20
? Eine Zeile? Eine million Zeilen? - lassen Sie uns sagen, ein 1000 plus
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt
WHERE columnc = 20
wählt 1000+ Zeilen, wie Sie bereits erwähnt in einem Kommentar, AusführungUPDATE
Aussage sollte deutlich schneller als die Schleife durch ein recordset und Aktualisierung Ihrer Zeilen ein zu einer Zeit.Letztere Strategie ist ein RBAR (Zeile Durch Quälende Zeile) Ansatz. Die erste Strategie, die der Ausführung einer einzigen (gültigen)
UPDATE
ist eine "set-based" - Ansatz. Im Allgemeinen, set-basierte Trumpf RBAR mit Bezug auf die Leistung.Aber deine 2 Beispiele andere Fragen aufwerfen. Mein Erster Vorschlag wäre die Verwendung von DAO statt ADO zum ausführen Ihrer
UPDATE
:Welcher jener Strategien, die Sie wählen, stellen Sie sicher, dass columnc indiziert ist.
Den SQL-Methode ist in der Regel der Schnellste für bulk-updates, aber die syntax ist oft ungeschickt.
Den VBA-Methode, hat jedoch Besondere Vorteile:,, der code ist sauberer, und das recordset verwendet werden kann, bevor oder nach dem aktualisieren/Bearbeiten, ohne requering der Daten. Dies kann einen großen Unterschied machen, wenn Sie zu langatmig Berechnungen zwischen den updates. Auch das recordset ByRef übergeben werden können, um die unterstützenden Funktionen oder die weitere Verarbeitung.
Habe ich festgestellt, dass wenn ich aktualisieren jeden Datensatz in eine Tabelle um, z.B. das hinzufügen eine fortlaufende ID bei der Verwendung von AutoWert ist nicht machbar, indem eine laufende Summe, oder eine Berechnung, die inkrementelle basierend auf einen Wert im recordset, dass die DAO-Methode ist viel schneller.
Wenn Ihre Daten nicht in der Bestellung müssen Sie es verarbeitet, und Sie stattdessen angewiesen auf passende Werte an die Datenquelle und anschließend SQL ist viel effizienter.