Member
Beiträge: 6
| Guten Morgen
Ich habe 2 Varianten getestet, um zu schauen, wie sich diese auswirken bei der Verarbeitung von etwa 1,5 Mio Datensätzen.
Die Datenbank hat in beiden Fällen zu Beginn die Größe von 483 MB
Variante 1: mit ADO werden die Zeilen von Tabelle Daten in Tabelle Daten2 überführt
Endgröße ist 975 MB
Dim d As New ADODB.Recordset, d2 As New ADODB.Recordset, s As New ADODB.Recordset
d.Open "select * from Daten order by pzn desc, [vo-datum] desc;", CurrentProject.Connection, adOpenForwardOnly, adLockPessimistic '
d2.Open "Daten2", CurrentProject.Connection, adOpenForwardOnly, adLockPessimistic '
s.Open "select * from [2_Stamm_PZN] order by pzn desc, [stand] desc;", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly '
d.MoveFirst: s.MoveFirst
Do
Select Case True
Case d!PZN < s!PZN
s.MoveNext
If s.EOF = True Then Exit Do
Case d!PZN > s!PZN
d.MoveNext
If d.EOF = True Then Exit Do
Case Else
If d![VO-Datum] >= s!stand Then 'WIDO
d2.AddNew
... es folgt alle nicht veränderten Felder aus Daten
d2!Feld = d!Feld
... es folgen die zu verändernden Felder
d2!ATC = s!ATC
d2!ddd = s!ddd
d.MoveNext
If d.EOF = True Then Exit Do
Else
s.MoveNext
If s.EOF = True Then Exit Do
End If
End Select
Loop
Variante 2: mit ADO werden lediglich die 2 Felder in Tabelle Daten geändert
Endgröße ist 2,1 MB mit Abbruch wegen kaputter Datenbank
Dim D As New ADODB.Recordset, S As New ADODB.Recordset
D.Open "select PZN, [VO-Datum], ATC, ddd from Daten order by pzn desc, [vo-datum] desc;", CurrentProject.Connection, adOpenForwardOnly, adLockPessimistic '
S.Open "select PZN, DDD, ATC, Stand from [2_Stamm_PZN] order by pzn desc, [stand] desc;", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly '
D.MoveFirst: S.MoveFirst
Do
Select Case True
Case D!PZN < S!PZN
S.MoveNext: If S.EOF = True Then Exit Do
Case D!PZN > S!PZN
D.MoveNext: If D.EOF = True Then Exit Do
Case Else
If D![VO-Datum] >= S!stand Then 'WIDO
D!ATC = S!ATC
D!ddd = S!ddd
D.MoveNext: If D.EOF = True Then Exit Do
Else
S.MoveNext: If S.EOF = True Then Exit Do
End If
End Select
Loop
Könnt Ihr mir das erklären? Wie kann man in Access große Tabellen updaten, ohne an diese Grenze zu stoßen?
Gruß Florian
|