Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: ulli am Mai 12, 2012, 19:59:01

Titel: Warum wird das Unterformular neu abgefragt?
Beitrag von: ulli am Mai 12, 2012, 19:59:01
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;
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: Stapi am Mai 12, 2012, 20:22:43
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.
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: ulli am Mai 12, 2012, 22:49:24
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.
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: ulli am Mai 13, 2012, 08:06:05
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.
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: Beaker s.a. am Mai 13, 2012, 14:08:03
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
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: ulli am Mai 13, 2012, 19:31:38
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).
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: Beaker s.a. am Mai 13, 2012, 21:06:32
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
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: ulli am Mai 14, 2012, 15:10:05
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.
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: DF6GL am Mai 14, 2012, 15:22:10
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.


Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: Beaker s.a. am Mai 14, 2012, 20:36:22
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
Titel: Re: Warum wird das Unterformular neu abgefragt?
Beitrag von: ulli am Mai 14, 2012, 20:47:00
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?