2008-10-17 21 views
5

Ich erstelle eine MS Access-Anwendung, in der alle Formulare modal sind. Nach dem Ändern der Daten in einem Formular möchte ich jedoch das übergeordnete Formular dieses Formulars mit neueren Daten aktualisieren. Gibt es einen Weg, es zu tun? Weiter zu erarbeiten:So aktualisieren Sie ein Zugriffsformular

Betrachten Sie, gibt es zwei Formen, Form A und Form B. Beide sind Modalform. Aus Formular A initiiere ich Formular B, und jetzt hat Formular B die Aufmerksamkeit des Benutzers. Aber am Ende von Form B möchte ich die Form A auffrischen. Gibt es eine Möglichkeit, dies zu tun?

Antwort

6

Nein, es ist wie ich Form_Load der Form A ausgeführt werden soll, wenn es möglich ist,

- Varun Mahajan

Der übliche Weg, dies zu tun, wird die entsprechende setzen Code in einer Prozedur, die von beiden Formularen aufgerufen werden kann. Am besten ist es, den Code in einem Standardmodul setzen, aber man konnte es auf dem Formular habe ein:

Form B:

Sub RunFormALoad() 
    Forms!FormA.ToDoOnLoad 
End Sub 

Form A:

Public Sub Form_Load() 
    ToDoOnLoad 
End Sub  

Sub ToDoOnLoad() 
    txtText = "Hi" 
End Sub 
+0

Ich habe nicht früher darüber nachgedacht. Vielen Dank –

6

können Sie neu streichen und/oder requery:

Auf der Nähe Fall Form B:

Forms!FormA.Requery 

Ist das, was Sie meinen?

+0

Nein, ich möchte Form_Load von Form A ausführen, wenn es möglich ist –

1

"Requery" ist in der Tat, was Sie, was Sie ausführen möchten, aber Sie könnten das in Form A "On Got Focus" -Ereignis tun. Wenn Sie Code in Ihrem Form_Load haben, können Sie es möglicherweise zu Form_Got_Focus verschieben.

+1

Siehe Varun Mahajans Kommentar. Requery führt die Ladeereignisse nicht aus. – Fionnuala

+0

Aus diesem Grund habe ich vorgeschlagen, den Code dorthin zu verschieben (ähnlich wie in Ihrer zweiten Antwort). Wenn er die Daten aktualisieren möchte, die mit dem Formular verknüpft sind, ist requery der richtige Weg. – BIBD

+0

Wenn Hew das Load-Ereignis erneut durchführen möchte, verschiebe den Code in ein anderes Sub (wie Remou gezeigt hat) und ruft ihn dann in der Lade- und dann in der Refresh-Routine auf (entweder beim Schließen von B oder beim erneuten Eingeben von A mit a Got_Focus). Got Focus funktioniert auch, wenn A auch andere Fenster öffnet. – BIBD

0

Ich empfehle, dass Sie REQUERY das spezifische Kombinationsfeld verwenden, deren Daten Sie geändert haben, UND dass Sie es nach der Cmd.Close-Anweisung tun. Wenn Sie also Daten eingeben, werden diese Daten ebenfalls abgefragt.

DoCmd.Close 
Forms![Form_Name]![Combo_Box_Name].Requery 

Sie könnten auch wollen den kürzlich geänderten Wert Punkt

Dim id As Integer 
id = Me.[Index_Field] 
DoCmd.Close 
Forms![Form_Name]![Combo_Box_Name].Requery 
Forms![Form_Name]![Combo_Box_Name] = id 

dieses Beispiel setzt voraus, dass Sie ein Formular zur Eingabe von Daten in eine Sekundärtabelle geöffnet.

Nehmen wir an, Sie speichern School_Index und School_Name in einer Schultabelle und verweisen darauf in einer Student-Tabelle (die nur das School_Index-Feld enthält). während Sie einen Student bearbeiten, müssen Sie ihn mit einer Schule zuzuordnen, die nicht in Ihrer Schule Tabelle, etc etc

-1

das Formular, das Sie eingeben müssen auffrischen - me.refresh in der Schaltfläche Ereignisse auf Klicken Sie

Verwandte Themen