Neuigkeiten:

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

Mobiles Hauptmenü

Parallel-Formular aktualisieren

Begonnen von joepaul, Februar 23, 2011, 23:51:53

⏪ vorheriges - nächstes ⏩

joepaul

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!

bahasu

#1
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]
Servus

joepaul

Super, funktioniert! Vielen Dank
Joachim

bahasu

Hi Joachim,

freut mich.
Setz bitte in Deinem ersten Beitrag den Haken auf "erledigt".

Harald
Servus

joepaul

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

bahasu

#5
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
Servus

database

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

joepaul

#7
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

database

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!