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.
- eine Anfügeabfrage erstellen
- beide DBs auf dem selben Datenträger platzieren
- einen schnellen Datenträger verwenden (SATA II oder SAS)
- das Antivirusprogramm deinstallieren (deaktivieren reicht NICHT)
- den Rechner mit min. 4 GB ausstatten
- vor dem Transfer ein Defrag der Platte durchführen
- 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)