Hallo liebe Accessfreunde,
ich habe eine Formular in Access mit einem Unterformular erstellt. Das Unterformular ist als Endlosformular dargestellt. Jetzt möchte ich ein Bezeichungsfeld auf dem Hauptformular mit dem Inhalt eines Textfeldes aus dem entsprechenden Unterformular befüllen. Das entsprechende Textfeld ist in dem aktuell ausgewählten Datensatz zu finden. Mit der Eigenschaft "CurrentRecord" kann ich zwar die Nummer des aktuell ausgewählten Datensatz auf dem Unterformular bestimmen, nicht aber auf die Inhalte des Datensatzes zugreifen. Habt ihr da eine Idee, wie ich das bewerkstelligen kann, um dann den Inhalt des gewünschten Textfeldes auf dem Unterformular auslesen zu können? Schon im Voraus vielen Dank.
Hallo,
CurrentRecord ist hier wenig hilfreich.
Du musst den Primärschlüssel des angezeigten Datensatzes verwenden.
Wozu brauchst du das?
Du siehst den Inhalt doch schon im UFO.
Hallo MzKlMu,
wenn ich wüsste, wie ich auf den Primärschlüssel des angezeigten Datensatzes zugreifen kann, würde ich auch die Möglichkeit in Betracht ziehen.
Zitat von: MzKlMu am April 08, 2023, 10:09:15Wozu brauchst du das?
Du siehst den Inhalt doch schon im UFO.
Das brauche ich für ein weiteres Unterformular. In dem 1. Unterformular wähle ich einen bestimmten Datensatz aus. Dann wird der Inhalt des Textfeldes angezeigt, dass einen Rezeptnamen enthält. Im 2. Unterformular werden dann die Zutaten von dem Rezept dargestellt. In dem entsprechenden Bezeichnungsfeld soll halt der Inhalt des Textfeldes mit dem Rezeptnamen angezeigt werden um mir als Benutzer klarer zu verdeutlichen, in welchem Rezept ich mich gerade befinde.
Zitat von: KonradR am April 08, 2023, 09:59:12nicht aber auf die Inhalte des Datensatzes zugreifen.
Wenn du auf die Steuerelemente im Unterformular zugreifst, bekommst du immer (nur) die Werte aus dem aktuellen Datensatz im Unterformular.
Der "schwierige" Teil bei deiner Aufgabenstellung ist den angezeigten Text in dem Bezeichnungsfeld immer dann zu aktualisieren, wenn sich der aktuelle Datensatz im Unterformular ändert. Dafür gibt es verschiedene Ansätze. Der einfachste wäre, wenn du das Bezeichnungsfeld zu einer Textbox änderst und dich im Steuerelementinhalt der Textbox auf das Unterformular beziehst. Dann erledigt Access für dich die automatische Aktualisierung.
Alternativ kannst du im Form_Current-Ereignis (Beim Anzeigen) des Unterformulars den Text des Bezeichnungsfelds (Caption) mit VBA Code immer auf den aktuellen Wert ändern.
Einen weiteren Lösungsansatz habe ich in dem folgenden Text beschrieben:
Steuern eines Hauptformulars über Unterformular-Steuerelementreferenzen (https://codekabinett.com/rdumps.php?Lang=1&targetDoc=hauptformular-aktualisieren-unterformular-verweise)
Hallo,
Du musst doch den Namen des Primärschlüsselfeldes kennen.
Über dessen Namen erhältst Du den Inhalt des Feldes des aktiven Datensatzes.
Zeige mal ein Bild des Beziehungsfensters dann kann ich Dir das genauer erklären.
Warum zeigst Du das Rezept nicht in einem Hafo an.
Dann ein über die Schlüsselfelder verknüptes Ufo, das dann automatisch die Zutaten.
Ich denke, Du machst da gerade einen überflüssigen Schritt.
Hallo PhilS,
Zitat von: PhilS am April 08, 2023, 11:25:11Wenn du auf die Steuerelemente im Unterformular zugreifst, bekommst du immer (nur) die Werte aus dem aktuellen Datensatz im Unterformular.
das war sehr hilfreich. Ich habe auch deinen Artikel gelesen und je eine Textbox und ein Bezeichnungsfeld auf dem Hauptformular mit dem entsprechenden Textfeld auf dem Unterformular verknüpft. Hier das Beispiel für das Bezeichnungsfeld:
Forms![frm00BWT_Haupt].Form![lblRezeptDynamisch].Caption = _
Forms![frm00BWT_Haupt]![frmBWTMahlzeitRezepte_Unter].Form![cbomahlzRezepIDRef].Value
Und hier für das Textfeld:
Forms![frm00BWT_Haupt].Form![txtRezepNummer].Value = _
Forms![frm00BWT_Haupt]![frmBWTMahlzeitRezepte_Unter].Form![cbomahlzRezepIDRef].ValueBeides funktioniert, wenn ich, wie du es beschrieben hast, das Form_Current Ereignis (beim Anzeigen) des Unterformulares benutze. Allerdings kommt ein Laufzeitfehler, für das Anzeigen im Bezeichnungsfeld, wenn ich das Hauptformular starte oder wenn ich den Datensatzzeiger in einen noch leeren bzw. neuen Datensatz im Unterformular platziere. Der Inhalt der Fehlermeldung ist: "'Laufzeitfehler 13': Typen unverträglich'". Wie kann das sein?
Hallo,
lies Beitrag #4 nochmal.
Hallo MzKlMu,
danke für deine Antwort. Bezüglich deiner Anfrage zu dem Beziehungsfenster:
Zeige mal ein Bild des Beziehungsfensters dann kann ich Dir das genauer erklären.
hinterlasse ich dir hier ein Bildschirmfoto vom Beziehungsfenster (Leider passt nicht das gesamte Beziehungsfenster auf den Bildschirm):
Screenshot 2023-04-10 174947.png
Anbei noch ein Bildschirmfoto von meinem Formular mit Unterformular:
Screenshot 2023-04-10 175716.png
Das Rezept zeige ich nicht im Hauptformular an, weil es erst weit hinten in der Beziehungshirarchie der Tabellen kommt. Wenn ich die Zutaten des Rezeptes im zweiten Unterformular anzeigen lasse, dann weis ich ohne Bezheichnungs oder Textfeld nicht so 100% genau, für welches Rezept ich die Zutaten gerade eingebe.
Hallo MzKlMu,
Zitat von: MzKlMu am April 10, 2023, 17:59:01Hallo,lies Beitrag #4 nochmal.
Das habe ich gemacht. Meine Antwort darauf ist in Beitrag #7 zu finden.
Mittlerweile habe ich die Herausforderung gelöst und damit eine weitere Herausforderung bekommen.
Mein aktueller Lösungsansatz ist:
Set rcsP = CurrentDb.OpenRecordset("SELECT * FROM qryRezepteSortiert WHERE rezepID = " & _
Forms![frm00BWT_Haupt]![frm01BWTMahlzeitRezepte_Unter].Form![cbomahlzRezepIDRef].Value, dbOpenDynaset)
Do Until rcsP.EOF
Forms![frm00BWT_Haupt].Form![txtRezepNummer].Value = rcsP.Fields("rezepName").Value
rcsP.MoveNext
Loop
Es funktioniert auch wenn ich den Datensatz wechsle. Wenn ich aber das Hauptformular starte oder in einen Datensatz klicke, wo noch nichts in dem Textfeld drin steht, dann gibt es die Fehlermeldung:
3075.png
Das liegt meiner Einschätzung daran, dass in dem Moment, wo das Formular gestartet wird oder ich auf ein Textfeld klicke,in dem nicht nur nichts drin steht sonder auch "NULL" oder gar nicht da ist, weil das Formular noch nicht vollständig geladen ist, aus dem ich den Inhalt abrufe.
Habt ihr da eine Idee, wie ich diese Fehlermeldung abfangen kann? Schon im Voraus vielen Dank.
Hallo Konrad,
Zitatdas Form_Current Ereignis (beim Anzeigen) des Unterformulares benutze
Das ist zu früh. Ein UFo wird immer
vor dem HFo geladen, kann also nicht
auf Resourcen des HFo zugreifen.
Besser also du
holst dir die Werte im HFo (auch bei Form_Current).
Die Fehlermeldung bei neuem DS im UFo kannst mit .NewRecord abfangen.
gruss ekkehard
Hallo Beaker,
danke für deine Antwort:
Zitat von: Beaker s.a. am April 13, 2023, 15:42:58Das ist zu früh. Ein UFo wird immer vor dem HFo geladen, kann also nicht
auf Resourcen des HFo zugreifen.
Das hat mich dazu inspiriert den Inhalt des referenzierten Kombinationsfeldes auf NULL zu prüfen. Wenn es null ist, also beim Start und beim Erzeugen eines neuen Datensatzes, passiert einfach nichts.
Hier mein Code:
If IsNull(Forms![frm00BWT_Haupt]![fsubBWTMahlzeitRezepte_Unter].Form![cbomahlzRezepIDRef].Value) Then
Forms![frm00BWT_Haupt].Form![txtRezepNummer].Value = "Bitte ein Rezept auswählen."
Else