Neuigkeiten:

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

Mobiles Hauptmenü

Formular aktualisiert nicht

Begonnen von Thüringer, August 28, 2026, 09:52:25

⏪ vorheriges - nächstes ⏩

Beaker s.a.

Zitatgibt es im Internet zu hauf
@Ulrich
Leider aber auch Widersprüchliches.

@Thüringer
Nimm lieber den ., dann hast du auch Intellisense.
Nach meinen Erfahrungen ist das ! nur in Abfragen mit Form-Bezug
(wenn man sie denn verwendet) zwingend.
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)

Knobbi38


Thüringer

Weil der neue Eintrag über ein Popup hinzu gefügt werden soll und nicht unten im Endlosformular. Dadurch soll man sich das scrollen ersparen.

Knobbi38

Dann gehört der Code zum Positionieren auf den zuletzt angelegten Record in das Subformular und der Primarykey wird per Property oder Funktion aus dem Dialog-Formular ausgelesen, bevor dieses endgültig geschlossen wird. Der PK wird dann an die Prozedur im UF weitergeben, wo dann alles abläuft, um auf den neuen DS zu positionieren.

Knobbi38

Beaker s.a.

Hallo,
ZitatWeil der neue Eintrag über ein Popup hinzu gefügt werden soll
Dann kannst du das Vorhaben direkt vom UFo aus steuern. Voraussetzung:
HFo und UFo sind über die ID im HFo verknüpft, PKs sind AutoWerte.

Platziere einen Button im UFo (Kopfbereich), - Name: cmdNeuerDS
Das Popup hat die gleiche DS-Herkunft wie das UFo.

(Luftcode, ungetestet)
Private Sub cmdNeuerDS_Click()
    Dim lHFoID As Long
    Dim lUFoLastID As Long

    With Me   
        lHFoID = .Parent.NameDesIDFeldes

        DoCmd.OpenForm _
            FormName:="NameDesPopups", _
            DataMode:=acFormAdd, _
            WindowMode:=acDialog, _
            OpenArgs:=lHFoID

        'nach dem Schliessen des Popups
        'UFo aktualisieren
        .Requery

        'navigieren zum neuen DS
        DoCmd.GoToRecord acDataForm, .Name, acLast
'hier bin ich mir nicht sicher ob das zuverlässig ist *)

    End With
End Sub
acFormAdd = Form wird mit neuem, leerem DS geöffnet
acDialog = Codeausführung wird an das Popup übergeben,
und erst nach Schliessen hier fortgeführt
OpenArgs: Da das Popup ja keine Verknüpfung zum UFo hat
muss der FK im Popup per Code gesetzt werden:

Private Sub Form_Open(Cancel As Integer)
   
    Me.NameDesFKFeldes = Me.OpenArgs       'ID im HFo

End Sub

*) Du könntest das UFo nach der ID absteigend sortieren, dann
hättest du den letzten (neuen) DS immer in der ersten Zeile,
und das Springen dorthin entfällt.

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)

Knobbi38

#20
Zitat von: Beaker s.a. am September 03, 2026, 12:23:21DoCmd.GoToRecord acDataForm, .Name, acLast
'hier bin ich mir nicht sicher ob das zuverlässig ist *)
Nein, das funktioniert so nicht, weil hier "nur" zum letzten DS eines Recordset, einer Abfrage oder Tabelle positioniert wird, was nicht zwangsläufig der aktuellste sein muss.

Um das Ganze zuverlässig zu gestalten, muss der zuletzt hinzugefügte PK aus dem Dialog-Formular an die aufrufenden Instanz zurückgegeben werden, wofür es mehrere Möglichkeiten gibt. Dieser Wert wird dann zum Positionieren herangezogen, aber wie gesagt, ganz so einfach wie in deinem Beispiel geht es dann doch nicht.

Im Anhang ein älteres kleines Beispiel, wo vielleicht etwas ungewöhnlich, eine Tempvar zur Übergabe der ID verwendet wird. Normalerweise würde man eine Property im Dialog-Formular dafür verwenden.

Knobbi38


Beaker s.a.

Hallo Ulrich,
ZitatNein, das funktioniert so nicht,
Daher auch mein einschränkender Kommentar.
ZitatNormalerweise würde man eine Property im Dialog-Formular dafür verwenden.
Das ist aber an der Stelle doch schon geschlossen. Wie wäre es mit
.Requery

'navigieren zum neuen DS
lUFoLastID = DMax("IDImUfo", "DsHerkunftDesUFo")
.Recordset.FindFirst "FKFeld = " & lUFoLastID

Wenn ich es aber in einem der anderen Posts des OP richtig gelesen habe,
hat er sein Projekt wohl inzwischen aufgegeben, und wir müssen uns damit
nicht mehr beschäftigen.

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)

Knobbi38

Zitat von: Beaker s.a. am September 04, 2026, 12:58:47Das ist aber an der Stelle doch schon geschlossen.
Die Aufrufende Instanz öffnet und schließt das Dialog-Formular. Das Dialog-Formular schließt sich nicht selbst, sondern es blendet sich nur selbst aus ("hidden"), wodurch es den Fokus veriert. Dadurch wird der aufrufende Code weiter fortgesetzt und kann auf das versteckte Dialogformular zugreifen.

Es ist übrigens "Best Practice", wenn sich geöffnete Objekte, in diesem Fall das Formular, nicht selbst schließen.

Mit DMax den neuesten DS zu ermitteln kann funktionieren, muss aber nicht, denn bei konkurrierenden Zugriffen in einer DB kann schon zwischenzeitlich eine anderer DS hinzugefügt worden sein. Außerdem ist der PK nicht immer ein Autowert und könnte auch alphanumerisch sein. Ob DMAX dann die geeignete Funktion ist, muss abgeklärt werden. Da die Dialogform aber auf jeden Fall selber weiß, welchen PK der zuletzt hinzugefügte DS hat, braucht man keinen weiteren Zugriff auf die Tabelle machen.

Mal abgesehen davon, könnte das Hinzufügen ja auch abgebrochen werden und dann? 

Gruß
Ulrich

Bitsqueezer

Hallo,

ich würde in diesem Fall die ID hier überhaupt nicht zurückgeben. Sie ist eh die neueste ID, also einfach im aufrufenden Formular Requery und auf den letzten Datensatz springen. Immerhin könnte man in einem "Add"-Formular ja auch mehr als einen Datensatz eingeben.

Gruß

Christian