Hallo
Für eine statistische Auswertung muss ich Daten, die in Form von Textdateien (UTF8) bis 200 MB Größe eingehen, in eine Tabelle in Access einlesen und verarbeiten. Im letzten Jahr gab es dabei keinerlei Probleme, zB:
Datenbankgröße vor dem Einlesen: 5MB
Textdatei einzulesen: 170MB
Datenbankgröße nach dem Einlesen der Textdatei: 500MB
Tabelle mit Inhalt aus Textdatei in der Datenbank: 1,7 Mio Datensätze mit etwa 120 Zeichen und 250 Byte je Datensatz im Editor
Datenbankgröße nach dem Verarbeiten: 900MB
Datenbankgröße nach dem Komprimieren: 500MB
Das passiert in folgender Prozedur an der Marke HIER:
Dim d 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 ' s.Open "select * from 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] >= cJJJJ & s!stand Then 'ABDATA If d![vo-datum] >= s!stand Then 'WIDO d!ATC = s!ATC 'Text, 7 Zei d!DDD = s!DDD 'Zahl Single d!Biosim = s!Biosim 'Zahl, Integer d!BTM = s!BTM 'Zahl, Integer HIER: d.MoveNext 'je Datensatz mit 250 Byte entstehen zusätzlich 4 kB If d.EOF = True Then Exit Do Else s.MoveNext If s.EOF = True Then Exit Do End If End Select Loop
Wenn ich durch die Prozedur debugge, verändert sich die DB-Größe wie folgt:
Start der Prozedur 456 MB
Recordset d öffnen danach 456 MB (1,8 Mio. DS)
Recordset s öffnen danach 456 MB (150T DS)
Do … Loop 2,1 GB werden vor Beendigung der Schleife erreicht
Vorher Win 7, 64 Bit mit Office Professional 2010.
Auf dem neuen Rechner wurde dasselbe Office-Paket wie auf dem alten PC installiert.
Leider kann ich den alten Rechner nicht mehr auftreiben, der wurde entsorgt.
Ein Auslagern von Tabellen bringt nichts. Bei 1,8 Mio. Datensätzen und zusätzlich 4 kB je Update für einen Datensatz mit 250 Byte im Editor entstehen schlappe 7 GB.
Ich habe auch schon mit DAO probiert, ähnlich.
Ein Update über SQL und Joins geht auch nicht so ohne weiteres, dazu müsste erstmal eine Zwischentabelle mit 70.000 mal 12 Datensätzen erstellt und mit eingebunden werden, weil dann zu jeder PZN für jeden Monat die Stammdaten zur Verfügung gestellt werden müssten.
Ich habe den Code in der Hoffnung, dass die Datenbankgröße dadurch nicht beeinflusst wird, in Excel mit Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb, *.accdb)} sowohl mit Primary Key als auch ohne ausführen
lassen. Da kommt an der Marke HIER der Fehler:
Fehler -2147467259 (80004005)
Microsoft ODBC-Treiber für Access: COUNT-Feld ungültig
Die Ausführungen im Web zu diesem Fehler helfen mir auch nicht weiter.
Ich bin ratlos, was kann dieses Aufblähen verursachen?