Hallo Access Freunde,
für eine zentrale Datenerfassung muss ich sehr viele Datensätze (bis 2 Millionen) zusammenfassen. Die Datenbank (Access 2010) ist in front und backend aufgeteilt. Die verknüpfte DB, welche die Haupttabelle enthält, wurde nach ca. 1 Million Datensätzen sehr groß (und langsam), sodass ich diese durch "Reparieren und Komprimieren" ein Drittel verkleinern konnte. Danach konnte ich aber keine weiteren Datensätze an diese Tabellen anfügen, die entsprechenden Abfragen bleiben ohne Fehlermeldung hängen. Ohne "Reparieren und Komprimieren" läuft das Programm ordnungsgemäß weiter. Ihr werdet schreiben, dann führe doch dieses Datenbanktool nicht aus. OK, mich interessiert nur, was da passiert und ob jemand ähnliche Erfahrungen gemacht hat.
Beste Grüße
Frank
Hallo,
vermutlich ist das BE ( die Tabelle) nicht mehr konsistent.
Erstelle eine neue leere DB-Datei und importiere die BE-Tabellen dort hinein...
Wie groß ist denn die BE-Datei genau?
Hallo Franz,
das war auch meine erste Idee, hat aber nicht funktioniert. Gleicher Effekt.
Frank
Bitte Frage beantworten!
Sorry, die BE ist 392 MB groß, nach dem Komprimieren 275 MB.
Hallo,
diese Größe ist noch nicht bedenklich...
Kannst Du neue DS manuell (in der Datenblattansicht der Tabelle) anfügen?
Wenn ja, zeige bitte den SQL-String einer nicht funktionierenden Anfügeabfrage.
Händig lassen sich DS anfügen.
Hier der SQL Code einer Anfügeanfrage:
INSERT INTO
artlisten ( nr_beob, art_nr, stadium_id, sammler, bestimmer, rev, verbleib, organ_substrat_id, substratzustand_id, substrat_text, wirt_id, wuchsstelle_id, sonderstandort_id, beleg_nr, bemerkung, Erfasser, Beleg, Foto_Zeichnung, alte_artnummer, Qualität_ID )
SELECT
ExpImp_Basis.SYS_nr_beob,
ExpImp_Basis.SYS_art_nr,
ExpImp_Basis.SYS_stadium_id,
ExpImp_Basis.SYS_sammler_id,
ExpImp_Basis.SYS_bestimmer_id,
ExpImp_Basis.SYS_rev_id,
ExpImp_Basis.SYS_verbleib_id,
ExpImp_Basis.SYS_organ_substrat_id,
ExpImp_Basis.SYS_substratzustand_id,
ExpImp_Basis.substrat_text,
ExpImp_Basis.SYS_wirt_id,
ExpImp_Basis.SYS_wuchsstelle_id,
ExpImp_Basis.SYS_sonderstandort_id,
ExpImp_Basis.beleg_nr,
ExpImp_Basis.art_bemerkung,
ExpImp_Basis.SYS_erfasser_id,
ExpImp_Basis.Beleg,
ExpImp_Basis.Foto_Zeichnung,
ExpImp_Basis.katasternr,
ExpImp_Basis.Qualität
FROM
ExpImp_Basis
LEFT JOIN
artlisten
ON (ExpImp_Basis.SYS_sammler_id = artlisten.sammler)
AND (ExpImp_Basis.SYS_wirt_id = artlisten.wirt_id)
AND (ExpImp_Basis.[SYS_nr_beob] = artlisten.[nr_beob])
AND (ExpImp_Basis.[SYS_art_nr] = artlisten.[art_nr])
WHERE ((ExpImp_Basis.SYS_nr_beob IS NOT NULL)
AND (ExpImp_Basis.SYS_art_nr IS NOT NULL)
AND (Artlisten.nr_artlisten IS NULL)
);
@Mykis
Bitte verwenden
https://www.freeformatter.com/sql-formatter.html (https://www.freeformatter.com/sql-formatter.html)
Hallo Mykis,
welche Art von Datenfelder verwendest du? Sind in Foto_Zeichnung Bilder gespeichert?
Hast du mal versucht die Abfrage Select ExpImp_Basis.... separat in einer Abfrage aufzurufen? Liefert die Abfrage Datensätze zurück?
Gruß Andreas
@Beaker s.a.
Danke, muss ich mal testen.
Hallo Andreas,
die einzelne Abfrage liefert in diesem Fall keine Daten. In weiteren Tests habe ich jetzt bemerkt, das kleinere Datensatzmengen (z.B. 10) weiterhin automatisch angefügt werden. Bei z. B. 40 000 reagiert das Programm mit der komprimierten BE nicht mehr.
BG
Frank
Hallo,
ich befürchte, dass "Left Join" mit "artlisten" und das Insert in die selbe Tabelle irgendwann an die Wand fährt..
Wozu soll diese Verknüpfung denn gut sein?
Hallo,
ZitatDie einzelne Abfrage liefert in diesem Fall keine Daten
Dann kann auch nichts eingefügt werden...
Ich würde an deiner Stelle überlegen auf einen SQL-Server zu wechseln, und die Abfragen direkt auf dem Server laufen zu lassen. Z.B. der SQL Server Express welcher kostenlos ist.
@Andreas
Die Felder in ExpImp sind nur "Text", "Zahl", "Datum/Uhrzeit" und "Memo".
Ein SQL Server könnte die Lösung sein. Momentan muss ich mit dem Vorhandenen zurechtkommen. Die Umwandlung in einem SQL Server, was Access 2010 anbietet, ist allerdings bis jetzt immer abgebrochen??
@Franz
Du wirst wahrscheinlich Recht haben. Die Verknüpfung soll Duplikate verhindern. Vielleicht kann ich da noch was umprogrammieren.
Vielen Dank für eure bisherigen Bemühungen
Frank
Hallo,
Duplikate zu vermeiden ist dadurch möglich, einen zusammengesetzten Index über die nötigen Felder in der Zieltabelle zu setzen...
Bei der jetzigen Größe der BE-Datei wäre es noch kein triftiger Grund, auf einen SQL-Server zu wechseln.
Vielen Dank, Franz,
ich werde es mal testen.
LG
Frank
Das Stichwort Index ist ja schon gefallen. Die Frage wäre ja auch, ob es da überhaupt Indizes gibt und wenn ja, wo genau.
Nachgeordnet:
Zitat...
WHERE ((ExpImp_Basis.SYS_nr_beob IS NOT NULL)
AND (ExpImp_Basis.SYS_art_nr IS NOT NULL) ...
Warum wird eine Indexnutzung unterbunden?