Neuigkeiten:

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

Mobiles Hauptmenü

Problem mit Requery im Formular und Unterfomularen

Begonnen von tragger, August 17, 2010, 19:58:38

⏪ vorheriges - nächstes ⏩

tragger

Hallo Leute,

ich muss etwas ausholen...
Ich habe ein Formular mit einem Ufo1 und darin ein weiteres Ufo2.

Um einen bestehenden Datensatz für Ufo2 zu bearbeiten, öffne ich das Bearbeitungsformular per Button über folgenden Code:

Private Sub cmdVersicherung_bearbeiten_Click()
   If VersicherungsNr <> "" Then
       DoCmd.OpenForm "frmVersicherung_Bearbeitung_UFO", , , "VersicherungsNr=" & Me!VersicherungsNr, , acDialog
   Else
       MsgBox "Es wurde keine Versicherung gewählt.", vbInformation
   End If
End Sub


Das funktioniert.
Wenn ich das Formular nun über folgenden Code per Button schließe, kommt das Problem:
Private Sub cmdVersicherung_uebernehmen_Click()
   If IsNull(Me!TarifID) Or IsNull(Me!VersicherungssummeEuro) Or IsNull(Me!gültig_ab) Or IsNull(Me!Versicherungsdauer) Then
       MsgBox ("Es sind nicht alle Pflichtfelder gefüllt")
   Else
       DoCmd.RunCommand acCmdSaveRecord
       Me!Rechnerischer_Beginn = Rechnungsbeginn(Me.gültig_ab)
       DoCmd.Close
       Forms!frmMitglieder!frmPferde_UFO!frmVersicherungsinfo_UFO.Requery 'diese Zeile bewirkt auch keine Reaktion
       Forms!frmMitglieder!frmPferde_UFO!frmVersicherungsinfo_UFO.SetFocus 'diese Zeile bewirkt keine Reaktion
   End If
End Sub


Ich möchte, dass das UFO "Versicherungsinfo_UFO" aktualisiert wird, da sich darin 2 berechnete Textfelder befinden, die auch aktualisiert werden sollen, wie soll das aber gehen?
Diese Textfelder werden über folgenden Sub gefüllt:
Private Sub Form_Current()
   If Me.Versicherungsdauer <> "" Then
       Me.Versicherungsablauf = AblaufVersicherung(Me.gültig_ab, Me.Versicherungsdauer)
       Me.Versicherungsprämie = Format(Praemienermittlung(Me.VersicherungssummeEuro, Me!Prämiensatz, Me.Versicherungsdauer), "####.00") & " €"
   Else
       Me.Versicherungsablauf = ""
       Me.Versicherungsprämie = ""
       Exit Sub
   End If
End Sub

Die Funkrionen funktionieren dank euerer Hilfe optimal.

1. Muss ich ggf ein anderes Ereignis als form_current nehmen?
2. Wie kann dieses Ufo2 sonst aktualisiert werden?
3. Wie kann ich den Focus wieder auf das Ufo2 setzen? Da sich ein weiterer Button nur mit 2 Klicks ausführen lösst, wobei der erste für den Focus sorgt und der zweite die Aktion ausführt

Hoffe, dass das nicht zu unübersichtlich ist.... ;)

Hondo

Hallo,
das Unterformular aus dem Hauptformular heraus zu aktualisieren (requery) geht so:

Forms!DeinHauptform!DeinUnterform.Requery

Beachte aber dass mit DeinUnterform der Name des Unterformularsteuerelementes im Hauptformular gemeint ist.
Berechnete Felder werden nur dann aktualisiert wenn die Formel als Datenherkunft steht.
Wenn nicht dann müssen diese separat aktualisiert werden:

Forms!DeinHauptform!DeinUnterform.Forms!BerechnetesSteuerelement.Requery

Gruß Andreas

tragger

Leider ändert sich nichts. Liegt es daran, dass ich es immer im Abspann des Buttons geschrieben ist?

Leider bringt auch die geziehlte Aktualisierung des Steuerelements nichts...

Wie bekomme ich sonst ggf. den Focus richtig auf das Ufo gesetzt?

Wenn ich während des Schließens des Bearbeitungsformulars , also nach DoCmd.Close den Focus setze, passiert nichts.

Oder kann man nach close nichts mehr machen?

Was passiert nach dem Schließen der Bearbeitungsmaske mit dem im Hintergrund geöffneten Formular, erhällt es den Focus? Oder was passiert damit, damit man Requery daran koppeln kann.....


tragger

#3
Welches Ereignis könnte das Problem lösen??

Keine Antwort?? Bin ich garnicht gewöhnt ??? ???

EDIT:

Detailsformular als Dialog und PopUp geöffnet!

database

Hallo,

ZitatKeine Antwort?? Bin ich garnicht gewöhnt
tja, sorry, es ist halt nicht IMMER jemand gleich verfügbar ...  ;)

Ich glaube dein Problem liegt in der richtigen Form, wie du das/die Steuerelemente im SubForm2 bzw. die SubForm2 selbst ansprichst.
Dabei kommt es auch darauf an von wo aus du das machst, also von der Hauptform aus oder von SubForm1 aus, ...

schau dir bitte mal die Seiten hinter den Links ganz genau an!
www.donkarl.com?FAQ4.2
http://www.mvps.org/access/forms/frm0031.htm

Zum anderen Problem:
ZitatWenn ich während des Schließens des Bearbeitungsformulars , also nach DoCmd.Close den Focus setze, passiert nichts
Wenn du den Befehl zum Schließen abgesetzt hast geht nix mehr! Du kannst auf einer Form die du meinetwegen per Button-Befehl schließt nichts mehr eintragen / ändern / etc. , das musst du davor machen.


HTH

Peter

tragger

Es lag an dieser Zeile:
ZitatForms!frmMitglieder!frmPferde_UFO!frmVersicherungsinfo_UFO.SetFocus 'diese Zeile bewirkt keine Reaktion

Nun habe ich SIe in das Close Ereignis gepackt und mit eckigen Klammern versehen. In etwa so:

Forms![frmMitglieder]![frmPferde_UFO]![frmVersicherungsinfo_UFO].Requery

Trotzdem Danke!!

database

Hallo,
das Einklammern ist in deinem Fall nicht unbedingt Notwendig, da du keine Leerzeichen und anderes Hinderliches in den Steuerelementnamen verwendest.

Der Grund war der Zeitpunkt des Absetzens dieses Befehls, wie ich bereits in meiner Antwort geschrieben hatte.
Das Schließen eines Formulars über den Close-Befehl und das Close-Ereignis sind 2 unterschiedliche Dinge, wobei jedoch der Befehl DoCmd.Close das Close-Ereignis eines Formulars auslöst.

Somit ist der Unterschied zur vorigen Version klar - Nach dem Absetzen des Close-Befehls kann nichts mehr am Formular oder dessen Daten geändert werden, durch das ausgelöste Close-Ereignis jedoch schon.

LG
Peter