Ich habe unten Stück Code erstellt, um einige Daten in einer Access-Tabelle zu ändern:MS Access Datenbank wächst Ausgabe
Dim Ways As DAO.Recordset
Dim Keys As DAO.Recordset
Dim Recordcount As Double
Dim Records As Double
Dim ID_Old As String
Dim ID_New As String
Dim STArray() As String
Dim SaveTime As String
Set Ways = CurrentDb.OpenRecordset("Ways_Sorted")
Recordcount = 1
Records = 3724755
Ways.MoveFirst
Dim word As Variant
While Not Ways.EOF
DoCmd.SetWarnings (False)
DoCmd.OpenQuery "KeyFind:DEL"
DoCmd.SetWarnings (True)
Set Keys = CurrentDb.OpenRecordset("KeyFind")
STArray = Split(Ways!Veld4, ";")
For Each word In STArray
If Len(word) > 0 Then
Keys.AddNew
Keys!IDOld = CDbl(word)
Keys!IDNew = DLookup("[New ID]", "ID Keys", "[Old ID]=" & CDbl(word))
Keys.Update
End If
Next
Keys.MoveFirst
While Not Keys.EOF
ID_Old = " " + Trim(Str$(Keys!IDOld))
ID_New = " " + Trim(Str$(Keys!IDNew))
Ways.Edit
Ways!Veld4 = Replace(Ways!Veld4, ID_Old, ID_New)
Keys.MoveNext
Wend
Keys.Close
Me.Tekst1 = Recordcount
Me.Tekst3 = Records - Recordcount
Me.Tekst5 = FileLen(Application.CurrentProject.Path & "\Map_Convert_2.mdb")
If FileLen(Application.CurrentProject.Path & "\Map_Convert_2.mdb") > 1977142784 Then
' Exit Sub
End If
DoEvents
Ways!Done = True
Ways.Update
Ways.MoveNext
Recordcount = Recordcount + 1
'CommandBars("Menu Bar").Controls("Tools").Controls("Database utilities").Controls("Compact and repair database...").accDoDefaultAction
'Stop
Wend
DoCmd.SetWarnings (False)
DoCmd.OpenQuery "Ways_Amend ID"
DoCmd.SetWarnings (True)
MsgBox "New Map created"
Eigentlich, was der Code tut, um die Daten im Feld „Veld4“ in der Tabelle ersetzen "Ways_Sorted". Dieses Feld enthält eine Zeichenfolge mit IDs, die mit STArray = Split(Ways!Veld4, ";")
in ein Array aufgeteilt ist. Dieses Array wird in einer Tabelle namens "KeysFound" gespeichert. Eine andere Tabelle in meiner Datenbank enthält die alte ID und die neue ID. Wie gesagt, der Rest des Codes wird die alte ID in "Veld4" durch die neue ID ersetzen. Es durchläuft 3,7 Millionen Datensätze auf diese Weise.
Mein Problem ist, dass nach 250 Schleifen oder so meine Datenbank mit 1mB gewachsen ist, was bedeutet, dass meine Datenbank über dem 2gB Weg ist, bevor der Code beendet ist.
Ich kann nicht erklären, warum das Wachstum geschieht und wie kann ich diese stoppen oder bei leas reduzieren das Wachstum
Thx Andre. Das hat wirklich den Trick gemacht. Ich untersuche das Dictionary-Objekt, um zu sehen, ob das auch helfen würde. – HB1963
Wenn die Antwort Ihr Problem gelöst hat, können Sie [accept] (http://stackoverflow.com/help/someone-answers) es, dies markiert auch die Frage als gelöst. @ HB1963 – Andre
Sie sollten in SQL Server für Ihre Arbeit suchen. Die kostenlose Version ist 10 GB und die kostenpflichtige Version hat unbegrenzten Speicherplatz. Außerdem ist es Größenordnungen schneller als MS Access !! – ryguy7272