Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Warum wird das Unterformular neu abgefragt?

Begonnen von ulli, Mai 12, 2012, 19:59:01

⏪ vorheriges - nächstes ⏩

ulli

Hallo,

ich habe auf einem Hauptformular "Stammdaten" ein Unterformular "ufRisk", das Daten aus der Tabelle "RiskF" abfragt. Haupt- und Unterformular sind über ein ID verknüpft. Neben dem Unterformular steht - im Hauptformular - ein ungebundenes Listenfeld. Dieses zeigt über eine Abfrage an, ob und wenn ja Datensätze aus der Tabelle "RiskP" existieren, die mit dem im Unterformular angezeigten Datensatz zusammenhängen (über eine weitere ID-Nummer). Zwischen den Tabellen sind keine Beziehungen definiert.

Solange ich das mit einem Datensatz in "RiskF" und mehreren dazugehörigen Datensätzen aus "RiskP" ausprobiert habe, war alles gut. Als ich dann einen zweiten Datensatz in "RiskF" hinzugefügt habe, wurde auch der ordnungsgemäß angezeigt. Als ich dann aber im Unterformular "ufRisk" im Current-Ereignis die Liste im Hauptformular neu abfragen wollte, bekam ich das Phänomen, dass das Unterformular sofort wieder auf den ersten Datensatz springt. Ich finde keine Erklärung dafür.

Hier die Abfrage des Listenfeldes:

SELECT RiskP.ID, RiskP.RiskID, RiskP.PersID, RiskP.Art, [Nachname] & " " & [Vorname] AS N
FROM RiskP INNER JOIN Familie ON RiskP.PersID = Familie.PersonID
WHERE (((RiskP.RiskID)=[Formulare]![Stammdaten]![ufRisk]![ID]))
ORDER BY RiskP.Art;

Stapi

Hallo Ulli

Ich verstehe nicht ganz deine Aussage
ZitatAls ich dann einen zweiten Datensatz in "RiskF" hinzugefügt habe, wurde auch der ordnungsgemäß angezeigt. Als ich dann aber im Unterformular "ufRisk" im Current-Ereignis die Liste im Hauptformular neu abfragen wollte, bekam ich das Phänomen, dass das Unterformular sofort wieder auf den ersten Datensatz springt.

Hast du den Datensatz angefügt, und dann versucht das Hauptformular neu abzufragen? Dann könnte es sein das der Datensatz noch nicht gespeichert war, somit dein Listenfeld das auf eine Abfrage beruht nicht aktualisiert werden konnte.
Grüße aus dem schönen NRW
Stefan

ulli

Das Unterformular ist als "Read-Only" angelegt. Der zweite Datensatz wurde über gesondertes Formular angelegt, war also zu dem Zeitpunkt, als er im Unterformular angezeigt wurde, bereits gespeichert.

ulli

Ich habe versuchsweise die Neuabfrage des Listenfeldes über das "Beim-Hingehen"-Ereignis des Listenfeldes gesteuert (Me!lstRisk.requery). Auch hier wird das Unterformular neu abgefragt.

Beaker s.a.

Hallo Ulli,
Lass uns doch mal den Code der Ereignisbehandlung
sehen; die reine Datenherkunft der Liste ist da nicht
wirklich hilfreich. In der solltest Du aber vielleicht schon
mal [Formulare] durch [Forms] ersetzen.
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)

ulli

#5
Hallo Ekkehard,

"Formulare" ist durch "Forms" ersetzt, ändert aber nichts. An Ereignisbehandlung gibt es im Unterformular nichts (außer einem Button, der den angezeigten Datensatz in einem gesonderten Formular zum Editieren öffnet).

Das Listenfeld hat an Ereignisbehandlung auch nur Folgendes:

Private Sub lstRisk_DblClick(Cancel As Integer)
Dim Krit As String
Krit = lstRisk.Column(3)
DoCmd.OpenForm "RiskP", , , "ID = Forms!Stammdaten!lstRisk", acFormEdit, , Krit
End Sub

Private Sub lstRisk_Enter()
Me!lstRisk.Requery
End Sub


Es sei angemerkt, dass das Unterformular seine Datensätze problemlos anzeigt, solange ich nicht das Listenfeld neu abfrage.  Und auch das Listenfeld liefert die richtigen Ergebnisse; nur dass bei jeder Neuabfrage der Liste das Ufo auf den ersten Datensatz springt...

P.S.: natürlich wir das Listenfeld auch im Current-Ereignis des Hauptformulars neu abgefragt (Me!lstRisk.requery).

Beaker s.a.

Hallo Ulli,
ZitatDoCmd.OpenForm "RiskP", , , "ID = Forms!Stammdaten!lstRisk", acFormEdit, , Krit
Und das funktioniert?
IMO müsste das so aussehen
DoCmd.OpenForm "RiskP", , , "ID = " & Forms!Stammdaten!lstRisk, acFormEdit, , Krit
Kann aber nicht Ursache des Problems sein.
Passiert bei dem Button noch was ausser des .OpenForm?
Ist das der gleiche Code wie beim lstRisk_DblClick?
Und was passiert auf dem geöffneten Form?
Zitatnatürlich wir das Listenfeld auch im Current-Ereignis des Hauptformulars neu abgefragt (Me!lstRisk.requery).
Was passiert da sonst noch? Wird da auch das UFo neu abgefragt? Dann wär's klar.
Hast Du mal Haltepunkte gesetzt, um den Code im Einzelschrittmodus zu beobachten?
Mehr fällt mir im Moment (noch) nicht dazu ein.
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)

ulli

Hallo Ekkehart,

das UFo wird an keiner Stelle explizit neu abgefragt. Ich habe ein wenig herumexperimentiert und gefunden:
-das UFo wir auch dann neu abgefragt, wenn ich ein ganz anderes ungebundenes Listenfeld neu abfrage
-auch andere UFos werden offenbar neu abgefragt

Ich werde mich weiter auf die Suche nach dem Problem begeben, das offenbar an ganz anderer Stelle liegt und bisher nur noch nie aufgefallen ist.

DF6GL

Hallo,

vermutlich wird das Form-Current ausgelöst (und damit "automatisch" das UFO über die Verknüpfungsfelder aktualisiert), wenn ein Listenfeld eine neue Rowsource zugewiesen bekommt und die Daten darin angezeigt werden.


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Hallo Franz,
Form_Current ganz meine Vermutung.
Deshalb die ganzen Fragen was wo passiert, und
der Hinweis auf den Einzelschrittmodus.
Ich kenn' das nämlich auch, dass Current gerne
mal gefeuert wird, wo man's gar nicht erwartet,
was man dann beim Einzelschrittmodus schnell
herausfindet.
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)

ulli

Ich habe auf die Schnelle mal eine Messagebox in das Current-Ereignis eingebaut, die kam aber nicht. Ich muss gestehen, ich muss erst mal rausfinden, wie das mit dem Einzelschritt-Modus funktioniert.

Ich habe schon mal alternativ eine Unter-Unterformularlösung gemacht, geht auch. Gäbe es denn eine Möglichkeit, das Current-Ereignis bei Abfrage des Listenfeldes zu verhindern?