Benutzer mit den meisten Antworten
MS Access Bericht mit Unterbericht

Frage
-
Hallo,
ich habe einen Access Bericht mit einem ungebundenen Unterbericht im Berichtsfuß.
Für den Unterbericht lade ich Daten über eine gespeicherte Prozedur, wenn des Ereignis "Beim Öffnen" zutrifft.
Nun habe ich festgestellt, dass dieses Ereignis für den Unterbericht mehr als 10 mal auftritt, wenn der Hauptbericht geöffnet wird.
Das Ereignis "Beim Schließen" tritt übrigens genau so oft auf.
Hat jemand eine Idee woran das liegt und wie ich das Problem beheben kann?Gruß
cheapy
- Bearbeitet Cheaptrick_la Donnerstag, 9. März 2023 12:54
Antworten
-
Gar nichts.
Das Event-System sendet eben allen Beteiligten Änderungen am Objekt mit.
Dies lässt sich nicht abschalten, da man ja durchaus darauf reagieren können muss.
Auch Access selber muss über die Änderungen informiert werden, da diese sonst nicht wirken.Ein Unterbericht hängt eben vom Hauptbereicht ab, sonst wäre es ja ein eigener Bericht.
Was ist aber dein Problem, wenn die Events mehrfach aufreten?
Du kannst das Verhalten nur so weit ändern, dass du nur Eigenschafte setzt, die nicht den gewünschten Wert haben.
I.d.R. sind Mehrfachaufrufe für Events nicht schädlich, es sei denn, sie gehen in die 1000de und bremsen die Performance.Aber vielleicht hilft dir dies ja weiter:
https://tiredblogger.wordpress.com/2011/04/05/dynamically-adding-sub-reports-to-an-activereport/
Oder, dein Subreport existiert ja als eigenens Objekt, somit könntest du es zur Laufzeit dynamsch mit allen Eigenschaften erstellen, New Subreport(), und das Objekt dann als Subreport an den geöffneten Report anhängen.
- Als Antwort markiert Cheaptrick_la Donnerstag, 23. März 2023 13:26
Alle Antworten
-
-
In VBA kannst du dir den Callstack ja ansehen.
Ggf. machst du irgendwo eine Änderung, die dann das Ereignis auslöst.
Dies passiert auch schon mal häufiger, wenn man dieselbe Eigenschaft mit demselben Wert befüllt, dass ein Ereignis daher wiederholt wird. Nicht jedes Element prüft auf eine tatsächliche Änderung um unnötige Events zu vermeiden. -
Ich habe mir den Callstack mal angesehen, der war leider auch nicht besonders aufschlussreich.
Die Ursache für das mehrmalige Öffnen des Unterberichts scheint die Formatierung einiger Felder zu sein.
Ich realisiere mit dem Unterbericht eine Monatsanzeige. Samstage und Sonntage bekommen dort eine andere Hintergrundfarbe. Wenn ich diese Formatierung weg lasse, dann wird der Unterbericht nur einmal geöffnet.Ich habe versucht den Unterbericht aus dem Hauptbericht heraus zu formatieren, was aber nicht klappt, da der Unterbericht angeblich nicht geöffnet ist, egal ob ich es bei dem Ereignissen "Beim laden", "Beim öffnen", "Beim Anzeigen" oder "Bei Aktivierung" versuche.
Letzteres Ereignis schein eh nur aufzutreten, wenn ich in den Hauptbericht klicke.Hat jemand eine Idee was ich tun kann, damit der Unterbericht nicht erneut geöffnet wird, wenn ich eines der Felder formatiere?
Oder gibt es eine Möglichkeit den Unterbericht zu formatieren bevor er über den Hauptbericht angezeigt wird?
Der Hauptbericht wird ja durch einen Button in einem Formular geöffnet.
-
Gar nichts.
Das Event-System sendet eben allen Beteiligten Änderungen am Objekt mit.
Dies lässt sich nicht abschalten, da man ja durchaus darauf reagieren können muss.
Auch Access selber muss über die Änderungen informiert werden, da diese sonst nicht wirken.Ein Unterbericht hängt eben vom Hauptbereicht ab, sonst wäre es ja ein eigener Bericht.
Was ist aber dein Problem, wenn die Events mehrfach aufreten?
Du kannst das Verhalten nur so weit ändern, dass du nur Eigenschafte setzt, die nicht den gewünschten Wert haben.
I.d.R. sind Mehrfachaufrufe für Events nicht schädlich, es sei denn, sie gehen in die 1000de und bremsen die Performance.Aber vielleicht hilft dir dies ja weiter:
https://tiredblogger.wordpress.com/2011/04/05/dynamically-adding-sub-reports-to-an-activereport/
Oder, dein Subreport existiert ja als eigenens Objekt, somit könntest du es zur Laufzeit dynamsch mit allen Eigenschaften erstellen, New Subreport(), und das Objekt dann als Subreport an den geöffneten Report anhängen.
- Als Antwort markiert Cheaptrick_la Donnerstag, 23. März 2023 13:26
-
Das Problem ist das bei jedem Öffnen die Daten des Unterberichts neu aus einer SQL-Server_DB abgerufen werden, was dazu führt, dass das Öffnen des Berichts dann doch ziemlich lange dauert.
Im Hauptbericht, der ebenfalls eine Monatsdarstellung liefert, wird die selbe Formatierung für Samstage und Sonntage durchgeführt, bei diesem tritt das Ereignis jedoch nicht mehrfach auf. -
Um das mit dem anzuhängenden Unterbericht zu machen, müsste ich ja quasi für jeden Monat und zusätzlich abhängig, auf welchen Tag der Monatserste fällt einen Unterbericht erstellen oder habe ich den Beitrag falsch interpretiert?
Was ich mache ist ja eine bedingte Formatierung einzelner Anzeigespalten abhängig vom Wochentag.
Dazu kommt ja noch die bisher nicht erwähnte Formatierung der Feiertage, die auf einen Werktag fallen.
Daher würde ich ja gerne einen vorhandenen Bericht zuerst formatieren und dann im Bereichtsfuß an den Hauptbericht anhängen.
-
Der Tipp mit dem einzufügenden Report hat weiter geholfen.
Ich habe nun im Berichtsfuß einen leeren Bericht eingefügt, den ich Beim Laden des Hauptberichts durch den eigentlichen Bericht ersetze in dem ich das SourceObjekt anpasse. Nun wird der Bericht im Fuß nur noch zweimal geöffnet, immerhin ...
Danke für den Tipp!
- Bearbeitet Cheaptrick_la Donnerstag, 23. März 2023 13:35
-
Aber auch da könntest du ja prüfen, ob das Laden der Daten ein 2. Mal erforderlich ist.
Ggf. kannst du ja am Subbericht die Tag-Eigenschaft mit den Daten besetzen die beim nächsten Aufruf erhalten bleibt.
Solange der Bericht geöffnet bleibt, wird das Report-Objekt auch nicht neu erstellt und die Tag-Eigenschaft sollte unverändert bleibem.Schön, dass dir einer meiner Tips geholfen hat.