Neuigkeiten:

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

Mobiles Hauptmenü

Letzter Datensatz

Begonnen von Graydens, November 17, 2024, 14:39:25

⏪ vorheriges - nächstes ⏩

Graydens

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

Knobbi38

#1
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).
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.




Graydens

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

Knobbi38

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()

Graydens

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

Knobbi38

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.

Graydens

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?

Graydens

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.

Knobbi38

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.


Graydens

Private Sub Form_Current()
me.frmQK.form.GotoLastRecord()
me.frmVertraege.form.GotoLastRecord()

End Sub

sollte dann so aussehen?

Knobbi38

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.

 

Graydens

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

MzKlMu

#12
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.
Gruß Klaus

Knobbi38

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

Knobbi38

@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