Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Ereignis "Beim Anzeigen" wird zweimal durchlaufen

Begonnen von bahasu, Januar 01, 2018, 01:05:27

⏪ vorheriges - nächstes ⏩

bahasu

Hallo,

in meiner access2003-Datenbank (bestehend aus Hauptformular mit mehreren Unterformularen, die wiederum Unterformulare haben) habe ich festgestellt, dass in einigen Unterformularen das Ereignis "Beim Anzeigen" zweimal durchlaufen wird.

Beim Debuggen zeigt sich, dass im Hauptformular ("Beim Anzeigen") von der Anweisung Me.MeinUfo.Requery das Ufo aufgerufen wird und ich dort im Ereignis "Beim Anzeigen" lande {bis hierhin ist alles wie erwartet abgelaufen}. Am Ende der dort stehenden Anweisungen werden aber noch einmal die kompletten Anweisungen dieses Ereignisses durchlaufen, ohne dass irgendeine andere Sub aufgerufen wurde.

Aufgrund meines Debuggens schliesse ich aus, dass Datensatzänderungen für das zweimalige Anfeuern des "Beim Anzeigen"-Ereignisses verantwortlich sind (weder "bei Geändert" noch bei "Vor Aktualisierung" noch bei "Nach Aktualisierung" wurde etwas durchlaufen).

In http://www.ms-office-forum.net/forum/showthread.php?t=268051 wird erwähnt, dass diese Macke nur unter a2003 und nicht unter a2007 auftritt.

In http://www.office-loesung.de/ftopic402886_0_0_asc.php wird ein Verfahren beschrieben, wie diese Macke unter a2003 zu vermeiden ist.
In modifizierter Fassung bringt das folgende das gewünschte Ergebnis, dass das Ereignis nur einmal durchlaufen wird:

Private Sub Form_Current()
    Static Datensatz_id As Long
   
    If Datensatz_id = 0 Or Datensatz_id <> Nz(Me.id, 0) Then
        Datensatz_id = Nz(Me.id, 0)
       
... eigentliche Routinen für dieses Ereignis

    End If   
End Sub


Meine Frage für das neue Jahr:
Welche Anregungen, Hinweise, Tipps habt Ihr für den weiteren Einsatz von a2003,
   um die eigentliche Ursache für das zweimalige Durchlaufen zu beseitigen und
   um auf das Therapieren mit den obigen Zeilen zu verzichten?

Harald
Servus

Lachtaube

Wenn nicht die bedingte Formatierung für das Verhalten verantwortlich ist, dürfte es sich vermutlich hinter dem verborgenen Code verstecken. :)
Grüße von der (⌒▽⌒)

DF6GL

Hallo,

diese "Macke" stelle ich auch bei >= A2010 fest.

Es dürfte sich  hier wohl um ein systembedingtes (und m. E. notwendiges) Aktualisieren der Formulare handeln, wenn in irgendwelchen UFOs (abhängige) Daten manipuliert wurden.

Beaker s.a.

Hallo,
ZitatAm Ende der dort stehenden Anweisungen werden aber noch einmal die kompletten Anweisungen dieses Ereignisses durchlaufen, ohne dass irgendeine andere Sub aufgerufen wurde.
Wahrscheinlich  wird da noch mal ein Requery auf das HFo abgesetzt,
welches auf den 1. DS positioniert und dadurch das Current-Ereignis
auslöst.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

bahasu

#4
Hi Ekkehard,

ZitatHallo,
Wahrscheinlich  wird da noch mal ein Requery auf das HFo abgesetzt

Habe Deinen Hinweis zum Anlass genommen, versuchsweise im UFO ein requery zum Hauptformular zu machen. In diesem Fall war ich laut Debuggen im Hauptformular-Ereignis "Beim Anzeigen" gelandet, was bislang nicht zu beobachten war.

Abgesehen von diesem Versuch hatte ich bewusst in den UFO's kein requery zum Hauptformular eingebaut.

Gibt es ansonsten beim Debuggen eine Möglichkeit zu verfolgen, was das Programm zwischen dem Ende und dem erneuten Start des UFO-Ereignisses "Beim Anzeigen" macht? Zur Zeit sehe ich nur, dass nach Erreichen vom Ende direkt noch einmal der Start angesprungen wird.

Harald
Servus

Beaker s.a.

Hallo Harald,
Wenn du kein .Requery drin hattest, kann es daran auch nicht gelegen
haben. Dein Versuch zeigt aber die Richtigkeit meiner Aussage.
Wenn's dann aber kein .Requery gibt, gibt es vielleicht eine andere
Anweisung, die einen Datensatzwechsel im HFo erzeugt, - .Find
und .Bookmark würden mir spontan einfallen.
Der Debugger lässt IMO keine Zeile aus.
gruss ekkehard

P.S.:
Zitatdass Datensatzänderungen für das zweimalige Anfeuern des "Beim Anzeigen"-Ereignisses
Änderungen lösen das Current-Ereignis nicht aus, nur der Wechsel
zu einem anderen DS (auch zu einem neuen).
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

@Ekkehard

wenn jemand den (schlechten) Einfall hat, in Form Current einen Wert an ein gebundenes Steuerelement zuzuweisen oder wenn die bedingte Formatierung im Unterformular von einem berechneten Wert im Hauptformular abhängt oder zyklische Abhänmgigkeiten zwischen Haupt- und Unterformular bestehen, tritt so ein Phänomen vermutlich auf. :)

Mit einer Formular- oder statischen Variablen könnte man zumindest den zweiten Durchlauf stoppen, falls sich die Ursache (warum auch immer) nicht abstellen lässt.
Grüße von der (⌒▽⌒)

Beaker s.a.

Das kann nur Harald selber wissen was da passiert/wie das aufgebaut
ist, - ich stellte mit meinem bescheidenen Wissen nur Vermutungen an.
Die Lösung mit der statischen Variablen hat er ja.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

bahasu

Hi,

Zitat von: Lachtaube am Januar 02, 2018, 15:48:43
wenn jemand den (schlechten) Einfall hat, in Form Current einen Wert an ein gebundenes Steuerelement zuzuweisen oder wenn die bedingte Formatierung im Unterformular von einem berechneten Wert im Hauptformular abhängt oder zyklische Abhänmgigkeiten zwischen Haupt- und Unterformular bestehen, tritt so ein Phänomen vermutlich auf. :)

Diese Ursache schließe ich aus, da ich im Current-Ereignis keine Werte zuweise.
Bedingte Formatierung setze ich ein, diese aber nur auf das aktuelle Formular bezogen: also nicht auf ein drüber- oder drunterliegendes.

Vielleicht wird es ein Lösungsansatz sein, dass ich im UFO solange den VBA-Teil in allen möglichen Proceduren entferne, bis es zum erwarteten Verhalten kommt.

Danke für diese und die anderen Hinweise.
Harald
Servus

bahasu

Hi,

habe ein älteres Frontend geladen, dort alles gelöscht und dann aus dem aktuellen Frontend, in dem die "Macke" auftrat,  alles importiert.
Das Ergebnis: Zur Zeit werden die OnCurrent-Ereignisse in den UFO's - wie eigentlich erwartet - nur EINMAL durchlaufen.

Mal abwarten, welche Überraschung als nächstes kommt.

Harald
Servus