Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: Mykis am Februar 11, 2020, 11:27:54

Titel: komprimieren und reparieren
Beitrag von: Mykis am Februar 11, 2020, 11:27:54
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
Titel: Re: komprimieren und reparieren
Beitrag von: DF6GL am Februar 11, 2020, 11:43:37
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?
Titel: Re: komprimieren und reparieren
Beitrag von: Mykis am Februar 11, 2020, 11:48:38
Hallo Franz,

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

Frank
Titel: Re: komprimieren und reparieren
Beitrag von: DF6GL am Februar 11, 2020, 11:51:41
Bitte Frage beantworten!
Titel: Re: komprimieren und reparieren
Beitrag von: Mykis am Februar 11, 2020, 11:56:36
Sorry, die BE ist 392 MB groß, nach dem Komprimieren 275 MB.
Titel: Re: komprimieren und reparieren
Beitrag von: DF6GL am Februar 11, 2020, 12:00:42
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.

Titel: Re: komprimieren und reparieren
Beitrag von: Mykis am Februar 11, 2020, 12:12:55
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)
   );
Titel: Re: komprimieren und reparieren
Beitrag von: Beaker s.a. am Februar 11, 2020, 12:32:44
@Mykis
Bitte verwenden
https://www.freeformatter.com/sql-formatter.html (https://www.freeformatter.com/sql-formatter.html)
Titel: Re: komprimieren und reparieren
Beitrag von: Hondo am Februar 11, 2020, 12:38:28
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
Titel: Re: komprimieren und reparieren
Beitrag von: Mykis am Februar 11, 2020, 13:02:53
@Beaker s.a.

Danke, muss ich mal testen.
Titel: Re: komprimieren und reparieren
Beitrag von: Mykis am Februar 11, 2020, 13:07:56
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
Titel: Re: komprimieren und reparieren
Beitrag von: DF6GL am Februar 11, 2020, 13:12:36
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?

Titel: Re: komprimieren und reparieren
Beitrag von: Hondo am Februar 11, 2020, 13:20:32
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.
Titel: Re: komprimieren und reparieren
Beitrag von: Mykis am Februar 11, 2020, 13:32:40
@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
Titel: Re: komprimieren und reparieren
Beitrag von: DF6GL am Februar 11, 2020, 13:37:03
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.
Titel: Re: komprimieren und reparieren
Beitrag von: Mykis am Februar 11, 2020, 13:44:05
Vielen Dank, Franz,

ich werde es mal testen.

LG
Frank
Titel: Re: komprimieren und reparieren
Beitrag von: ebs17 am Februar 12, 2020, 09:59:46
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?