Berichtausgabe bremst Rechner aus

Frage:

Ich habe einen umfangreichen Bericht mit mehreren Unterberichten, die zum Teil auf eigenen Abfragen basieren. Dass das Öffnen des Berichtes etwas länger dauert, ist mir verständlich. Allerdings geht dabei die CPU-Auslastung gegen 100 % und in der Titelleiste von Access wird „(Keine Rückmeldung)“ angezeigt.

Woran kann das liegen und wie lässt sich das Problem beseitigen?

Antwort:

Vermutlich setzen Sie im Bericht oder in den Abfragen Felder ein, in denen Formeln wie z.B. „=[txtNetto] + [txtMwst]“ enthalten sind oder aus denen Sie globale Funktionen aufrufen. Das kann dazu führen, dass während des Öffnens des Berichtes das System fast vollständig ausgelastet wird. Ursache dafür ist Access, das während des Aufbaus des Berichtes, der Berechnung von Formeln und der Ausführung von Funktionen keine CPU-Zeit freigibt, damit das Ergebnis schnellstmöglich zur Verfügung gestellt werden kann.

Sie können diese Systembeeinträchtigungen wie folgt verringern:

  1. Öffnen Sie zunächst den Bericht, der Textfelder mit Formeln enthält, im Entwurfsmodus.
  2. In der Ereignisprozedur „Beim Drucken“ des Detailbereiches fügen Sie die folgende Anweisung ein:

    Private Sub Detail1_Print (Cancel As Integer, PrintCount As Integer)
    DoEvents
    End Sub

Auf diese Weise wird zunächst bei jedem Datensatz und somit auch nach jeder Berechnung einer Formel die Abgabe von CPU-Zeit erzwungen.

Enthält bereits die dem Bericht zugrunde liegende Abfrage Formeln oder Funktionsaufrufe, lässt sich die Abgabe von CPU-Zeit über eine kleine VBA-Routine erzwingen:

  1. Kopieren Sie zunächst die folgende Funktion in ein beliebiges Modul:

    Function CPUZeitFreigeben()
    DoEvents
    End Function
  2. In der Abfrage geben Sie dann in einer leeren Spalte die Formel „X: CPU Zeit- Freigeben()“ in die Zeile „Feld“ ein. Bei jedem ausgewerteten Datensatz wird nun diese Funktion aufgerufen und dadurch die Freigabe von CPU-Zeit erzwungen.