Hallo,
ich habe (Access 97) zwei Formulare mit identischen Feldern und auf derselben Abfrage basierend. Formular A dient nur zur Ansicht der Datensätze; in Formular B können Daten eingegeben werden. Beide Formulare sind geöffnet. Ich möchte nun gerne erreichen, dass, wenn ich in Formular B einen neuen Datensatz anlege und dann das Formular schließe, dieser neue Datensatz auch von Formular A angezeigt wird. Dies wird er aber derzeit nur, wenn ich A schließe und neu öffne. Gibt es eine Methode, ohne A schließen zu müssen? ,,Anzeige aktualisieren" bzw. ,,Refresh" bringen nichts.
Danke für einen Tipp!
Moin,
anbei ein Beispiel.
"Formular1" zeigt die Daten als Tabelle an.
"Formular2" dient zur Dateneingabe in der Formularansicht.
Dort ist beim Ereignis "Nach Aktualisierung" die folgende Zeile eingebaut:
Forms!Formular1.Requery
Vielleicht hilft das
Harald
PS
Kann sein, dass Du in der angehängten 97-Version einen Verweis neu setzen mußt
[Anhang gelöscht durch Administrator]
Super, funktioniert! Vielen Dank
Joachim
Hi Joachim,
freut mich.
Setz bitte in Deinem ersten Beitrag den Haken auf "erledigt".
Harald
P.S.: habe noch eine Zusatzfrage: kann man in der Prozedur noch die Bedingung setzen, dass sie nur dann ausgeführt wird, wenn Formular1 geöffnet ist, und wie müsste sie lauten? Problem ist, dass die Prozedur eine Fehlermeldung verursacht, wenn das Formular, auf das sie verweist, geschlossen ist.
grüsse Joachim
Moin
auf die Schnelle zum Vermeiden des Fehlers:
Variante 1: siehe mein Beispiel, bei dem im Makro Autoexec beide Formulare geöffnet werden.
Variante 2: Mach ein neues Formular, in dem beide Formulare (tabellarische Anzeige + Eingabe) als Unterformulare aufgeführt sind.
Variante 3: Füge im 2.ten Formular (das für die Dateneingabe) beim Ereignis "Beim Öffnen" die folgende Procedure hinzu:
Private Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm "Formular1", acFormDS
End Sub
Statt "Formular1" bitte den Namen von Deinem Formular mit der tabellarischen Anzeige (d.h. das ohne die Bearbeitungsmöglichkeit) eintragen.
Variante 4: (Quick and dirty)
Private Sub Form_AfterUpdate()
On Error Resume Next
Forms!Formular1.Requery
End Sub
Das steht im 2. Formular beim Ereignis "nach Aktualisierung"
Harald
Hallo,
du kannst den Status eines Formulars auch mit VBA erfragen und entsprechend reagieren.
Zur Antwort #1 wäre dein Code folgend zu ändern:
If SysCmd(acSysCmdGetObjectState, acForm, "Formular1") > 0 Then
Forms!Formular1.Requery
Else
'mach was anderes
End If
Statt 'mach was anderes' steht dann halt die Aktion, die auszuführen ist wenn Formular1 nicht geöffnet ist.
Ist keine Aktion gewünscht wenn das Formular 1 NICHT geöffnet ist dann:
If SysCmd(acSysCmdGetObjectState, acForm, "Formular1") = 1 Then
Forms!Formular1.Requery
End If
HTH
Vielen Dank, Peter, das funktioniert!!
Danke auch an Harald für die Antwort. Habe deine Varianten aber nicht ausprobiert, da a) die beiden Formulare sich nur in der Eingabemöglichkeit unterscheiden und ansonsten in Layout und Inhalt identisch sind (sein müssen) und b) es aus verschiedenen Gründen auch vorkommen darf bzw. muss, dass Formular 1 geschlossen ist, wenn 2 aktualisiert wird. Die Möglichkeit "tabellarische Anzeige" bzw. Unterformulare wären also für meinen Zweck nicht relevant.
Grüsse Joachim
Hallo,
:D :D ;D
ich heiße nicht HTH - das ist ein Akronym für 'Hope That Helps' ;)
Freut mich aber dennoch, dass ich dir helfen konnte!