Access Import schneller machen

Hallo
Ich habe eine Tabelle und möchte mit DAO ca 500.000 Datensätze an eine (Oracle) Tabelle anfügen.

Code:

Set DB = CurrentDb()
Set rsInventory = DB.OpenRecordset(„SCC_INVENTORY“, , DB_APPENDONLY)

In der Schleife:

rsInventory.AddNew

rsInventory.Fields(„Feld1“) = “Irgendwas”
rsInventory.Fields(„Feld2“) = “Irgendwasanderes”

rsInventory.Update

schleifende

Frage 1 Wie kann ich das schneller machen (Optionen bei OpenRecordset ?)

Frage 2 Wie kann man das in eine Transaktion packen ?

Danke für Eure Hilfe

Hallo
Ich habe eine Tabelle und möchte mit DAO ca 500.000 Datensätze
an eine (Oracle) Tabelle anfügen.

Code:

Set DB = CurrentDb()
Set rsInventory = DB.OpenRecordset(„SCC_INVENTORY“, ,
DB_APPENDONLY)

In der Schleife:

rsInventory.AddNew

rsInventory.Fields(„Feld1“) = “Irgendwas”
rsInventory.Fields(„Feld2“) = “Irgendwasanderes”

rsInventory.Update

schleifende

Frage 1 Wie kann ich das schneller machen (Optionen bei
OpenRecordset ?)

mit o. st. Voraussetzung: gar nicht.

Frage 2 Wie kann man das in eine Transaktion packen ?

Transaktionsfähigkeit ist eine Eigenschaft des DB-Systems. Insofern muß Du auf Oracle-Seite nachfragen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo

Ich habe eine Tabelle und möchte mit DAO ca 500.000 Datensätze
an eine (Oracle) Tabelle anfügen.

und welche Access Version nutzt du dafür?

Frage 1 Wie kann ich das schneller machen (Optionen bei
OpenRecordset ?)

Ich würde z.B.

  1. eine Anfügeabfrage erstellen
  2. beide DBs auf dem selben Datenträger platzieren
  3. einen schnellen Datenträger verwenden (SATA II oder SAS)
  4. das Antivirusprogramm deinstallieren (deaktivieren reicht NICHT)
  5. den Rechner mit min. 4 GB ausstatten
  6. vor dem Transfer ein Defrag der Platte durchführen
  7. ein 64Bit Betriebssystem verwenden und 32 GB RAM (oder mehr) nutzen

Frage 2 Wie kann man das in eine Transaktion packen ?

Tipp: F1 -> Transaktion

Direkt aus der Access 2007 Hilfe:

Vorgehensweise: Verwenden von Transaktionen in einem DAO-Recordset

Eine Transaktion (Transaktion: Eine Reihe von Änderungen, die an den Daten und dem Schema einer Datenbank vorgenommen werden.) ist eine Gruppe von Operationen, die zusammengefasst und als eine einzige Arbeitseinheit behandelt werden.

Die Arbeit in einer Transaktion muss komplett als Ganzes abgeschlossen werden. Wenn ein Teil der Transaktion zu einem Fehler führt, schlägt die gesamte Transaktion fehl. Mit Transaktionen können Entwickler Datenintegrität durchsetzen.

Wenn mehrere Datenbankvorgänge in einer einzelnen Einheit zusammengefasst sind, die entweder als Ganzes erfolgreich durchgeführt werden oder zu einem Fehler führen, kann die Datenbank nie inkonsistent sein. Transaktionen werden in den meisten Datenbank-Verwaltungssystemen verwendet.

Das am häufigsten verwendete Beispiel einer Transaktionsverarbeitung ist die Verwendung eines Bankautomaten. Die Geldausgabe und das Belasten des Benutzerkontos werden als logische Arbeitseinheit angesehen und in einer Transaktion zusammengefasst: Das Geld wird nur ausgegeben, wenn das Konto belastet werden kann.

Durch das Verwenden einer Transaktion wird der gesamte Vorgang entweder erfolgreich oder gar nicht ausgeführt. Auf diese Weise bleibt der Status der Geldautomaten-Datenbank konsistent.

Wenn Sie sicherstellen möchten, dass jede Operation in einer Gruppe von Operationen erfolgreich ist, bevor für alle Operationen ein Commit ausgeführt wird, empfiehlt sich die Verwendung von Transaktionen.

Beachten Sie, dass alle Transaktionen untereinander unsichtbar sind. Eine Transaktion kann also nicht sehen, inwiefern die Datenbank durch eine andere Transaktion aktualisiert wurde, bis für diese Transaktion ein Commit ausgeführt wird.

Hinweis

Das Verhalten von Transaktionen bei Access-Datenbanken unterscheidet sich vom Verhalten bei ODBC-Datenquellen, wie Microsoft SQL Server. Wenn z. B. eine Datenbank mit einem Dateiserver verbunden ist und der Dateiserver angehalten wird, bevor für transaktionsbedingte Änderungen ein Commit ausgeführt werden konnte, kann sich die Datenbank plötzlich in einem inkonsistenten Status befinden. Wenn Sie komplette und dauerhafte Transaktionsunterstützung benötigen, sollten Sie die Verwendung einer Client/Server-Architektur in Betracht ziehen.

Das Microsoft Access-Datenbankmodul unterstützt Transaktionen über die DAO-Methoden BeginTrans, CommitTrans und Rollback des Workspace-Objekts.

Im folgenden Beispiel wird die Position aller Vertriebsmitarbeiter (Sales Representative) in der Tabelle Employees (Personal) geändert. Nachdem die BeginTrans-Methode eine Transaktion gestartet hat, die alle Änderungen an der Tabelle Employees isoliert, werden die Änderungen über die CommitTrans-Methode gespeichert. Sie können die Rollback-Methode verwenden, um mit der Update-Methode gespeicherte Änderungen rückgängig zu machen.

Sub ChangeTitle()

Dim wrkCurrent As DAO.Workspace
Dim dbsNorthwind As DAO.Database
Dim rstEmployee As DAO.Recordset

On Error GoTo ErrorHandler

Set wrkCurrent = DBEngine.Workspaces(0)
Set dbsNorthwind = CurrentDB
Set rstEmployee = dbsNorthwind.OpenRecordset(„Employees“)

wrkCurrent.BeginTrans
Do Until rstEmployee.EOF
If rstEmployee!Title = „Sales Representative“ Then
rstEmployee.Edit
rstEmloyee!Title = „Sales Associate“
rstEmployee.Update
End If
rstEmployee.MoveNext
Loop

If MsgBox(„Save all changes?“, vbQuestion + vbYesNo) = vbYes Then
wrkCurrent.CommitTrans
Else
wrkCurrent.Rollback
End If

rstEmployee.Close
dbsNorthwind.Close
wrkCurrent.Close

Set rstEmployee = nothing
Set dbsNorthwind = Nothing
Set wrkCurrent = Nothing

Exit Sub

ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub

Von der Verwendung der Transaktionen sind alle Datenbanken und Recordset-Objekte im angegebenen Workspace-Objekt betroffen. Transaktionen gelten global für den Arbeitsbereich, nicht nur für eine bestimmte Datenbank oder ein Recordset-Objekt.

Wenn Sie Operationen für mehrere Datenbanken oder innerhalb einer Arbeitsbereichstransaktion ausführen, gelten die Methoden Commit und Rollback für alle Objekte, die während der Transaktion innerhalb dieses Arbeitsbereichs geändert wurden.

Sie können auch die Methoden BeginTrans, CommitTrans und Rollback mit dem DBEngine-Objekt verwenden. In diesem Fall wird die Transaktion auf den Standardarbeitsbereich DBEngine.Workspaces(0) angewendet.

*---------------------Ende der Access 2007 Hilfe

hth

Grüße aus Rostock
Wolfgang
(Netwolf)

Hallo,

mit Access-Boardmitteln wirst du keinen wirklichen Boost bewerkstelligen koennen. Meiner Erfahrung nach kann man, beim Bearbeiten von solch vielen Datensaetzen, mittels Portierung der Routinen nach VB6 die Verarbeitungszeit halbieren.

Tschau
Peter