Hallo
Ich habe ein Hautformular in dem ein Unterformular(U1) angelegt ist. In diesem Unterformular sind wieder 2 Unterformulare(UU1 und UU2) angelegt. Jetzt hätte ich gerne beim öffnen des Hauptformulares, dass die letzen beiden Unterformulare (UU1 und UU2) immer auf den letzten Datensatz springen.
Leider bekomme ich das nicht hin.
Zum Testen habe ich versucht U1 (obwohl ich das gar nicht brauche) mit
Private Sub Form_Open(Cancel As Integer)
' Verweise auf das Unterformular-Steuerelement
Dim Unterformular As Form
' Setze das Unterformular-Objekt auf das eingebettete Unterformular
Set Unterformular = Me!NameDesUnterformulars.Form
' Überprüfe, ob Datensätze im Unterformular vorhanden sind
If Not Unterformular.Recordset.EOF Then
' Bewege den Datensatzzeiger zum letzten Datensatz
Unterformular.Recordset.MoveLast
End If
End Sub
dazu zu bewgen auf den letzten Datensatz zu springen, aber leider funktioniert auch das nicht und die Navigationsleiste bleibt bei 1 von 2 stehen.
Wie könnte ich das umsetzen?
lg und Danke
Hallo,
erstens ist das Form_Open() Event dafür ungeeignet, weil dort grundsätzlich noch keine Daten geladen sind, das passiert erst unmittelbar vor dem Form_Load Event.
Dann wäre die Referenzierung des ersten Unterformulars mit "Me!NameDesUnterformulars.Form" auch nicht richtig (siehe http://access.mvps.org/access/forms/frm0031.htm (http://access.mvps.org/access/forms/frm0031.htm)).
Der Name des Unterformulars selber wird dafür nie gebraucht und ist vollkommen unerheblich.
Wie sind die Unterformulare denn gegenseitig verlinkt?
HF -> UF
UF -> UF1
UF -> UF2
Wenn du grundsätzlich immer "letzten" DS angezeigt bekommen möchtest, könntest du auch die Sortierreihenfolge in UF1/UF2 umkehren - aber ich nehme mal an, daß dürfte nicht deine gewünschte Lösung sein?
Der "sauberste" Weg wäre natürlich klassisch per OOP und Implementierung des Observer-Pattern mit Events, aber je nach dem, wie deine UF gegenseitig verlinkt sind, könnte es auch andere Lösungen geben. Deshalb sind diese Informationen interessant.
Hallo
Sind genau so verlinkt wie du geschrieben hast.
HF -> UF
UF -> UF1
UF -> UF2
HF: Bildet Kundedaten ab
UF: Bildet das gekaufte Produkt/Gerät vom Kunden an -> Kunde kann mehrere Geräte haben
UF1: Bildet Verträge zu dem Gerät ab. -> Über die Zeit wird es mehrere Verträge geben, zb alle 3 Jahre einen neuen.
UF2: Bildet die Wartungstermine für das Gerät ab. -> Über die Zeit wird es mehrere Einträge geben, zb 2x im Jahr.
Wenn ich einen Kunden öffne will ich natürlich das Gerät 1-5 abrufen können. Bei den Verträgen und den Wartungen interessiert mich natürlich vorerst nur der letzte Eintrag.
OOP usw sagt mir leider nicht wirklich was :-)
lg
Ok, dann gehe ich mal davon aus, daß die UFs per LinkFields verbunden sind. Im einfachsten Fall erstellst du in jedem UF1/UF2 Formular eine Public, Methode z.B. GotoLastRecord(), welche dann im Formular auf den letzten DS positioniert. Diese Methode wird dann aus dem UF Form_Current Event für die beiden Unterformulare aufgerufen:
me.subformcontrol.form.GotoLastRecord()
Die Verknüpfungen und Fütterung der Tabellen funktionieren super, wenn du das mit LinkField meinst.
Kannst du mir bitte noch erklären wie und wo ich diesen Befehl einbinden muss?
me.subformcontrol.form.GotoLastRecord(). Muss ich das bei einen der "Ereignissen" eintragen?
lg
Zitat von: Graydens am November 17, 2024, 19:24:57... wie und wo ich diesen Befehl einbinden muss?
Das "wo" hatte ich eigentlich genau beschrieben:
Zitat von: knobbi38 am November 17, 2024, 16:56:22Diese Methode wird dann aus dem UF Form_Current Event für die beiden Unterformulare aufgerufen.
habs gefunden danke.....dann müsste ich am ende nur die Beschriftung bzw das Symbol der Pfeile bei den Schaltflächen invertieren damit man vor und zurück blättern kann?
Nachtrag: Es hatte funktioniert, wenn ich jetzt aber mir den Code anschaue, ist der mittlere Teil rot.
Private Sub Form_Current()
me.subformcontrol.form.GotoLastRecord()
End Sub
Jetzt funktioniert es nicht mehr.
Hallo,
die Bezeichner mußt du natürlich an deine Gegebenheiten anpassen.
Du hast daran gedacht, dem SubForm Steuerelement einen anderen Namen zu geben, als dem geladenen Sub-Formular?
Für Formulare wird üblicherweise ein Präfix wie sfm, frm usw. verwendet, das SubForm-Steuerelement bekommt oft das Präfix sub.
Private Sub Form_Current()
me.frmQK.form.GotoLastRecord()
me.frmVertraege.form.GotoLastRecord()
End Sub
sollte dann so aussehen?
Hallo,
im Prinzip ja, aber 'frmVertraege' hätte ich jetzt nicht als Bezeichner für das SubForm-Steuerelement gewählt, sondern eher für das Unterformular selber.
was ist wirklich der Bezeichnername? Ich klicke im Formular auf das sich befindliche Unterformular so das der Rahmen orange eingefärbt wird, danach dinde ich den Name unter Andere -> Bezeichnungsname, in meinem Fall steht hier noch Bezeichnungsfeld6 und Bezeichnungsfeld7. Hatte ich ehrlich gesagt noch nicht drauf geachtet.
Aber das wäre der Name den wir suchen also am Ende dann, wenn ich es so lassen würde
Private Sub Form_Current()
me.Bezeichnungsfeld6.GotoLastRecord()
me.Bezeichnungsfeld7.form.GotoLastRecord()
End Sub
lg
Hallo,
Achtung:
Solltest Du das umbauen wie im anderen Thema
https://www.access-o-mania.de/forum/index.php?topic=27679.msg165110;topicseen#msg165110
vorgeschlagen, passt der hier gezeigte bzw. zur Anwendung kommende Code nicht mehr, weil die Referenzierung nicht mehr stimmt.
Ich denke, wenn das umgebaut ist, wird das was Du hier machen willst ohnehin nicht mehr benötigt.
Hallo?
ich kann dir nicht abnehmen, daß du dich mit den Grundlagen beschäftigst. Im Formularentwurf können die Eigenschaften eingeblendet werden:
https://www.access-tutorial.de/formulare/eigenschaften.htm (https://www.access-tutorial.de/formulare/eigenschaften.htm)
In der Kombobox kannst du anhand der Namen das Element auswählen und darüber steht dann der Auswahltyp, was du gerade ausgewählt hast - leider nur dir dt. Bezeichnung und nicht der Objekttyp. Die dt. Bezeichnung für ein SubForm-Steuerelement heißt "Unterformular/Bericht". Diesem Objekt vergibst du dann einen "sprechenden" eindeutigen Namen mit einem Präfix, z.B. "subVertraege" oder so. Über diesen Namen wird im gesamten Access dann exakt dieses Steuerelement angesprochen, ist also sehr wichtig.
Das sind alles Grundlagen, die man sich aneignen und für die man Zeit investieren muss, um das Handwerkszeug einigermaßen beherrschen zu können. Das geht am besten mit Hilfe eines Fachbuches, welches dann didaktisch aufbereitet in die verschiedenen Aspekte von Access einführt. Anders wird das nichts.
@MzKlMu Hallo Klaus,
da läuft noch einiges schief, weil offensichtlich keine ordentliche Projektplanung gemacht worden ist und so kommt es, daß viele Dinge doppelt gemacht werden.
Erstmal sollte man sich mit den Grundlagen beschäftigen, dann kann man sich auch Gedanken über mögliche Lösungsansätze machen. Vorher weiß man noch gar nicht, welche Möglichkeiten es überhaupt gibt.
VG
Ulrich