none
MS Access Bericht mit Unterbericht RRS feed

  • 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



    Donnerstag, 9. März 2023 11:04

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
    Mittwoch, 22. März 2023 14:11

Alle Antworten

  • Da Access die Ereignisse auslöst, gar nicht.
    Du kannst nur bei den Aufrufen prüfen, ob du das was du machen willst, schon erledigt hast.
    Fast jedes Access-Object hat eine Tag-Eigenschaft, in der du dir jede beliebige Information speichern kannst.
    Donnerstag, 9. März 2023 12:37
  • Ich gehe doch mal davon aus, dass es einen Grund gibt aus dem Access dieses Ereignis auslöst.
    Kann man das nicht irgendwie heraus bekommen?

    Donnerstag, 9. März 2023 13:21
  • 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.
    Donnerstag, 9. März 2023 13:40
  • 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.

    Mittwoch, 22. März 2023 13:52
  • 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
    Mittwoch, 22. März 2023 14:11
  • 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.
    Mittwoch, 22. März 2023 14:42
  • 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.

    Mittwoch, 22. März 2023 14:56
  • 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!


    Donnerstag, 23. März 2023 13:29
  • 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.

    Donnerstag, 23. März 2023 14:11