Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Mykis am Dezember 05, 2023, 11:03:05

Titel: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: Mykis am Dezember 05, 2023, 11:03:05
Hallo Access-Freunde,

in meiner Kartierungsdatenbank für Pilze muss ich bei der Datenpflege immer mal Fundorte vereinigen, da es unterschiedliche Bezeichnungen für den gleichen Fundort gibt. Benutze ich dieses Vereinigungsformular, pauscht sich die .accdb in kürzester Zeit stark auf. Selbst die 2 GB Grenze habe ich schon erreicht! Nach Schließen und Komprimieren der Datenbank ist dann die Ausgangsgröße von 18 MB wieder erreicht. Ist dieses starke Aufpauschen wärend der Bearbeitung von Daten normal? Alle Tabellen sind nur als Verknüpfung, also Backend, eingebunden.

LG
Frank
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: PhilS am Dezember 05, 2023, 11:15:53
Dass eine .accdb während der Benutzung wächst ist grundsätzlich erstmal normal. Wie groß dieses Wachstum ist, hängt von den ausgeführten Aktionen ab und lässt sich schwer einschätzen.

Ein Wachstum von ca. 18MB auf die Größenordnung von 2GB ist extrem ungewöhnlich und höchstwahrscheinlich nicht normal.

Was genau tut denn dein Vereinigungsformular?

Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: Mykis am Dezember 05, 2023, 11:36:39

Vielen Dank für deine Antwort.

Mein Vereinigungsformular vereinigt die ausgewählten unterschiedlichen Fundorte zu einem einheitlichen Fundort. Die resultierende ID des Fundortes wird dann in den dazugehörigen Tabellen geändert. Die "falschen" Fundorte werden gleichzeitig gelöscht.

LG
Frank
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: MzKlMu am Dezember 05, 2023, 11:53:03
Hallo,
die Beschreibung des Vereinigungsformulars ist völlig unzureichend. Die Frage ist, was genau macht dieses Vereinigungsformular ?
Ein Formular kann Daten anzeigen, aber nichts vereinigen. Da muss doch Code und/oder Abfragen am Werk sein.
Und das solltest Du mal beschreiben.

Nach dem Löschen von Datensätzen sollte immer komprimiert/repariert werden, weil erst dann die Datensätze physisch gelöscht werden.

Speicherst Du Bilder in der DB ?
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: Mykis am Dezember 05, 2023, 12:16:06
Hallo Klaus,

Bilder sind nicht in der DB gespeichert.

Der Code der Vereinigung lautet:

Private Sub exec_merge_fo(fo_dele As Boolean)
  Dim Meldung As String
  On Error GoTo Err_exec_merge_fo
 
  Meldung = v_meldung1 & " '" & Me!Nr_Fundort.Column(1) & "' vereinigen"
  If fo_dele Then Meldung = Meldung & " und " & v_meldung3 & "vornehmen"
  Meldung = Meldung & "? "
  If fo_dele Then Meldung = Meldung & cr_Warnung_bei_Fundort_loeschen
  Meldung = Meldung & " " & v_meldung4
 
  DoCmd.SetWarnings False
 
  If Nachricht_mit_JaNein(Meldung) Then
   
      DoCmd.RunSQL "UPDATE (basis_listenauswahl " _
                & "INNER JOIN Fundortliste ON basis_listenauswahl.listenwert = Fundortliste.Fundort) " _
                & "INNER JOIN beobachtung ON Fundortliste.nr_fundort = beobachtung.nr_fundort " _
                & "SET beobachtung.nr_fundort = " & CStr(Me![Nr_Fundort]) _
                & " WHERE (((basis_listenauswahl.auswahl)=True));"

     
      If fo_dele Then
     
      DoCmd.OpenQuery "basis_listenauswahl_update"
      DoCmd.OpenQuery "Pflege_Fundortliste"
      DoCmd.SetWarnings True
     
      End If
     
      Meldung = v_meldung1 & "'" & Me!Nr_Fundort.Column(1) & "' wurden vereinigt "
      If fo_dele Then Meldung = Meldung & "und " & v_meldung3 & "vorgenommen"
      Meldung = Meldung & "."
     
      Nachricht_OK_Achtung (Meldung)
     
     
      DoCmd.SetWarnings True
      DoCmd.Close
      DoCmd.OpenForm "Dialog_Fundortvereinigung"
  End If

Exit_exec_merge_fo:
    Exit Sub

Err_exec_merge_fo:
    MsgBox Error$
    Resume Exit_exec_merge_fo
End Sub
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: MzKlMu am Dezember 05, 2023, 12:21:42
Hallo,
wozu öffnest Du die Abfragen "basis_listenauswahl_update" und "Pflege_Fundortliste" ?
Was machen die Abfragen, das öffnen alleine macht ja nichts.

Aktionsabfragen werden mit Execute ausgeführt und nicht mit RunSQL.
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: Mykis am Dezember 05, 2023, 13:04:42
Die Abfrage "basis_listenauswahl_update" aktualisiert das Formular "Basis_Listenauswahl" für die entsprechende Vereinigung. Die Abfrage "Pflege_Fundortliste" ist eine Löschabfrage, die die "falschen Fundorte" löscht.

LG
Frank
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: MzKlMu am Dezember 05, 2023, 13:40:54
Hallo,
nach dem Löschen von Datensätzen ist regelmäßig komprimieren/reparieren durchzuführen, weil wie gesagt erst dann die Datensätze wirklich gelöscht werden. also um das Komprieren kommst Du eh nicht herum.

Aktionsabfragen sind mit CurrentDb.Execute auszuführen.

Also so:
CurrentDb.Execute "UPDATE (basis_listenauswahl " _
                & "INNER JOIN Fundortliste ON basis_listenauswahl.listenwert = Fundortliste.Fundort) " _
                & "INNER JOIN beobachtung ON Fundortliste.nr_fundort = beobachtung.nr_fundort " _
                & "SET beobachtung.nr_fundort = " & CStr(Me![Nr_Fundort]) _
                & " WHERE (((basis_listenauswahl.auswahl)=True))", DbFailOnError
.
.
.

      CurrentDb.Execute "basis_listenauswahl_update", DbFailOnError
      CurrentDb.Execute "Pflege_Fundortliste", DbFailOnError
DbFailOnError sorgt für eine Fehlermeldung wenn die Abfragen einen Datenfehler erzeugen. Nicht zu verwechseln mit SetWarnings das nur Warnmeldungen ausgibt (Wollen Sie....). Die Zeilen mit SetWarnings sind alle überflüssig.


Komprimieren ist aber in jedem Fall erforderlich.
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: Mykis am Dezember 05, 2023, 14:59:29
Hallo Klaus,

deinen Code habe ich eingebaut. Vielen Dank! Ist es denn über einen vba-Befehl überhaupt möglich, nach jeder Vereinigung zu komprimieren?

LG
Frank
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: MzKlMu am Dezember 05, 2023, 15:38:57
Hallo,
eine Datenbank sollte nicht aus sich selbst per VBA komprimiert werden.
Wenn das häufig gemacht wird, so kann man in den Optionen einstellen, dass die DB beim Schließen immer komprimiert wird.
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: ebs17 am Dezember 05, 2023, 17:27:02
Aufblähung und damit Bedarf von Komprimieren entsteht nur durch Anfügen + Löschen.
Löschen muss man die Datenmenge, die man unnütz zusätzlich erzeugt hat (= Müll). 

Wenn Vereinigen bedeutet, man ergänzt die eine Tabelle nur um die Datensätze aus der anderen Tabelle, die es in Tabelle 1 nicht gibt, wird kein zu entsorgender Müll erzeugt, der Probleme erzeugt.   

Es könnte sich also lohnen, diesen Prozess genauer zu betrachten und Kosten zu reduzieren.
Grundlagen - SQL ist leicht (4) - Aktualisierung einer Tabelle (https://www.ms-office-forum.net/forum/showthread.php?t=304156)                                                                                                                               
Titel: Re: Accdb vergrößert sich enorm bei Vereinigungen von Daten.
Beitrag von: Beaker s.a. am Dezember 05, 2023, 18:05:31
ich würde da über eine n:m-Tabelle zwischen "Fundorte" und "Fundorte" (Selfjoin)
nachdenken.