Ursache für Aufblähen der Datenbank
Florian_S
Gesendet: 18.07.24 09:26
Betreff: Ursache für Aufblähen der Datenbank


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
Top of the page Bottom of the page