Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

komprimieren und reparieren

Begonnen von Mykis, Februar 11, 2020, 11:27:54

⏪ vorheriges - nächstes ⏩

Mykis

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

DF6GL

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?

Mykis

Hallo Franz,

das war auch meine erste Idee, hat aber nicht funktioniert. Gleicher Effekt.

Frank


Mykis

Sorry, die BE ist 392 MB groß, nach dem Komprimieren 275 MB.

DF6GL

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.


Mykis

#6
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)
   );

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Hondo

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

Mykis

@Beaker s.a.

Danke, muss ich mal testen.

Mykis

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

DF6GL

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?


Hondo

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.

Mykis

@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

DF6GL

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.