Quantcast
Channel: Microsoft Access Forum
Viewing all articles
Browse latest Browse all 880

Ursache für Aufblähen der Datenbank gesucht

$
0
0

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

In diesem Jahr bleibe ich hängen, weil die Datenbank das Limit erreicht.
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 
Recordset d enthält Bewegungsdaten. Diese sollen zu einem Datum (vo-datum) mit zu dem Zeitpunkt gültigen Stammdaten (gültig ab stand) aus s ergänzt werden.

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


Datenbank, Code, Tabellen und Datenaufkommen sind im Grunde genommen gleich. Einzige Variable scheint mir mein neuer Rechner zu sein, Win 10, 64 Bit.
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? 




Viewing all articles
Browse latest Browse all 880


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>