Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Feldwert aus Unterformular in das Hauptformular übernehmen

Begonnen von Tommy2404, September 09, 2024, 12:30:17

⏪ vorheriges - nächstes ⏩

Tommy2404

Hallo zusammen,

ich habe folgendes Problem:

Ich möchte in ein Hauptformular einen Wert aus dem dazugehörigen Unterformular darstellen. Dazu habe ich ein ungebundenes Feld im Hauptformular installiert und folgenden Steuerelementinhalt eingetragen:

=[tblEreignis Unterformular].[Formular]![ereig_potenzial_voll]

In das ungebundene Feld, wird jetzt ein Wert eingetragen.

Da in dem Unterformular ja mehr als ein Datensatz steht, entscheidet sich Access immer den Wert aus dem ersten Datensatz zu nehmen. Das kann ich durch Anklicken des Datensatzmarkierers aber ändern. Access trägt immer den Wert vom aktivierten Datensatz ein.

Ich möchte aber immer den Wert aus dem Datensatz übernehmen, bei dem ein Ja/Nein-Feld im Datensatz aktiviert ist.

Also der neue Steuerelementinhalt für das ungebundene Feld:

=Wenn([tblEreignis Unterformular].Formular![ereig_aktiv]=true; [tblEreignis Unterformular].Formular![ereig_potenzial_voll];"Fehler")

Das führt nicht zum gewünschten Ergebnis. Die Wenn-Funktion wird abgearbeitet, wenn ein Datensatz im Datensatzmarkierer angeklickt wurde. Für die automatische Auswahl des richtigen Datensatz(Ja/Nein-Feld ist aktiv) funktioniert es nicht.

Ich hoffe ich habe die Problemstellung einigermaßen verständlich erklärt. Bei Fragen bitte gerne melden. Ich bin mir nicht sicher, ob der Weg über den "Ausdrucksgenerator" richtig ist.

Namen der Elemente

Name Unterformular: frmEreignis Unterformular

Feld im Unterformular dessen Wert im Hauptformular angezeigt werden soll: ereig_potenzial_voll

Ja/Nein-Feld im Unterformular: ereig_aktiv

Knobbi38

Hallo Tommy,

das per Ausdrucksgenerator nur immer auf den aktuellen DS zugegriffen wird, sollte eigentlich klar werden. Damit können nicht mehrere Werte an das HF übergeben werden.

Warum sollte man das überhaupt machen wollen? So ganz verstehe ich den tieferen Sinn darin noch nicht, denn die Werte sind doch im UF sichtbar und doppelt anzeigen gibt nun nicht wirklich einen Sinn.

Gruß Ulrich


Tommy2404

Hi Knobbi,
erstmal Danke für die Antwort.

Grundsätzlich stimmt das was du sagst. Der Wert ist sichtbar im UF. Es würde allerdings eine besseren Übersichtlichkeit in der Formularansicht entstehen. Muss aber nicht sein.

Der zweite Grund ist, dass ich den Wert aus dem einen Datensatz brauche, um eine weitere Berechnung im Hauptformular durchzuführen.
Deiner Antwort entnehme ich indirekt die Empfehlung nicht weiter mit dem Ausdruckgenerator zu arbeiten sondern VBA einzusetzen.

Gruß
Tommy

Knobbi38

ZitatDeiner Antwort entnehme ich indirekt die Empfehlung nicht weiter mit dem Ausdruckgenerator zu arbeiten sondern VBA einzusetzen.
Jein. Man muß wissen, daß Ausdrücke erst berechnet werden, wenn sonst nichts mehr ansteht, also nach der Abarbeitung des VBA Codes. D.h. dann im Umkehrschluß, daß es problematisch sein kann, Ausdrücke in weiteren Berechnungen für VBA zu verwenden; für die reine Anzeige sind sie hingegen ganz gut zu gebrauchen.

ZitatDer zweite Grund ist, dass ich den Wert aus dem einen Datensatz brauche, um eine weitere Berechnung im Hauptformular durchzuführen.
Hier kommt es auf den Workflow an. Wählst du im UF einen DS aus und soll damit dann etwas berechnet werden? Kann die Berechnung nicht im UF oder im HF selber durchgeführt werden?

Prinzipiell gibt es drei Möglichkeiten, wie Daten zwischen HF und UF ausgetauscht werden können:
  • Das HF liest die Werte aus dem Unterformular
  • Das UF löst ein Event aus, welches im HF verarbeitet wird
  • Direkter Zugriff auf das andere Formular
Für die ersten beiden Möglichkeiten können die Werte dann z.B. per Property im UF bereitgestellt werden. Die dritte Möglichkeit sollte man aus Gründen der Datenkapselung vermeiden.

Das ist jetzt ziemlich allgemein, aber für weitere Hilfe bräuchte man mehr Informationen.

Gruß Ulrich

Tommy2404

Hallo Ulrich,
ich habe mal versucht die Problematik grafisch darzustellen. Es handelt sich nicht um die eigentliche Zieldatenbank. Die Grafik soll nur das Problem besser darstellen. Wie wollen nicht renovieren.Sie dürfen in diesem Board keine Dateianhänge sehen.

Knobbi38

Hallo Tommy,

in dem Fall würde ich gar keinen Zugriff auf das UF machen, sondern direkt im HF den Wert mit DLookup lesen und dem Textfeld zuweisen. Wenn du damit weitere Berechnungen anstellen möchtest, alles in eine Sub packen, in der alle Werte berechnet und dann die Textboxen aktualisiert werden.
Beispiel (HF):
Private Sub Form_Current()
  Call UpdateErgPotenzial
End Sub

Private Sub UpdateErgPotenzial()
  Dim strWhereCondition As String
 
  Const SQL_CRITERIA As String = "proj_id_f = {0} and ereig_aktiv"
 
  If Not (IsNull(proj_id) Or Me.NewRecord) Then
    strWhereCondition = Replace(SQL_CRITERIA, "{0}", CStr(proj_id))
    txtErgPotenzial = DLookup("ereig_potenzial_voll", "tblEreignis", strWhereCondition)

  ' Todo: weitere Berechnungen wenn gewünscht.

  End If
End Sub

Im UF löst du dann eine Aktualisierung des HF z.b. im Form_AfterUpdate Ereignis aus:
Private Sub Form_AfterUpdate()
  On Error Resume Next
  Me.Parent.Requery
End Sub

Tommy2404

Hallo Ulrich,
ich habe von dem Code nur 10% verstanden aber nach der Anpassung des Textfeldes funktioniert es einwandfrei. Ich bin begeistert.
Nun kann ich endlich weitermachen, vielen Dank. Top Job

Gruß
Tommy