Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: KonradR am Mai 17, 2024, 18:16:08

Titel: Nach dem "AfterUpdate()" Ereigniss zum (vormals) letzten Datensatz springen
Beitrag von: KonradR am Mai 17, 2024, 18:16:08
Hallo liebe Accessfreunde,

ich habe ein Unterformular mit einem Kombinationsfeld erstellt. Wenn ich die Liste des Kombinationsfeldes ausklappe und eine Auswahl treffe, wird das "AfterUpdate" Ereignis wirksam und ein weiteres Unterformular wird aktualsiert. Gleichzeitig springt dann der Datensatzzeiger in den ersten Datensatzes in dem ich gerade das Kombinationsfeld bedient habe. Jetzt möchte ich ereichen, dass der Datensatzzeiger nach der Aktualisierung nicht in den ersten, sonder in den nächsten Datensatz dieses Formulars springt. Daher habe ich mir folgendes Skript ausgedacht:
Private Sub ZutatSammelEinheIDRef_AfterUpdate()
'aktuellen Datensatz im Unterformular ermitteln
'Variable für Recordset deklarieren
    Dim rcs As DAO.Recordset
   
'Variable für Unterformular deklarieren
    Dim fsub As SubForm
   
'Variable für aktuelle Position des Datensatzzeigers deklarieren
    Dim rcsPos As Integer
   
'Der Variable für das Unterformular einen Wert bzw. ein Unterformular zuweisen.
    Set fsub = Forms![frm00BWT_Haupt]![frm03BWTMahlzeitRezepteZutatenErfassen_Unter].Form!

'Variable für das Recordset (mit dem angezeigtem Inhalt des UFOS) befüllen
    Set rcs = fsub.Form.RecordsetClone
   
    rcsPos = rcs.AbsolutePosition
   
    Forms![frm00BWT_Haupt]![sfrm01BWTMahlzeitRezepteNwTagSumme_Unter].Form!.Requery
    rcs = rcsPos
    rcs.MoveNext
rcs.Close
End Sub

Jedoch habe ich dann zwei Herausforderungen:

Beim ersten Punkt verstehe ich nicht, wiso das Unterformular nicht gefunden wird. Ich habe es doch aus dem Feld "Herkunftsobjekt" Eigenschaftenblatt des betreffenden Unterformulars kopiert.
Mit der zweiten Meldung kann ich leider gar nichts anfangen. Habt ihr da eine Idee?
Titel: Re: Nach dem "AfterUpdate()" Ereigniss zum (vormals) letzten Datensatz springen
Beitrag von: KonradR am Mai 18, 2024, 11:20:41
Ich habe jetzt den Code etwas angepasst. Allerdings müsste ich, wenn ich nach der Nummerierung im RecordsetClone filtere, diese auch direkt ansprechen. Leider habe ich nichts dazu im Netz gefunden. Habt Ihr dazu eine Idee? Hier mein Code, mit dem noch nicht funktionierenden Filter nach der Nummerierung im Recordsetclone:
Private Sub cboZutatSammelEinheIDRef_AfterUpdate()
'aktuellen Datensatz im Unterformular ermitteln
'Variable für den Recordset deklarieren
    Dim rcs As DAO.Recordset

'Variable des aktuellen Datensatzes deklarieren
    Dim rcsPosAkt As Long

'Variable für gewünschte Position des Datensatzzeigers deklarieren
    Dim rcsPosGew As Long

'Variable für den Recordset (mit dem angezeigtem Inhalt des UFOS) befüllen
    Set rcs = Me.RecordsetClone

'Variable für die akuelle Position im Recordset befüllen
    rcsPosAkt = Me.CurrentRecord

'Variable für die gewünschte Position im Recordset befüllen
    rcsPosGew = rcsPosAkt + 1

'    MsgBox "aktuell: " & rcsPosAkt & vbCrLf & "gewünscht: " & rcsPosGew '& ", SammelID: " & rcs.Filter = "ZutatSammlID =" & rcsPosAkt
'Recordset zu gewünschten Datensatz filtern
    rcs.Filter = rcsPosGew

    rcs.Close
    Forms![frm00BWT_Haupt]![sfrm01BWTMahlzeitRezepteNwTagSumme_Unter].Form!.Requery

'Datensatzzeiger auf den Datensatz setzen, der auf den der Recordsetclone gefiltert wurde.
    Me.Form.Bookmark = rcs.Bookmark
End Sub
Titel: Re: Nach dem "AfterUpdate()" Ereigniss zum (vormals) letzten Datensatz springen
Beitrag von: Beaker s.a. am Mai 18, 2024, 16:12:39
Vielleicht hilft dies (https://www.donkarl.com?FAQ4.5).
Titel: Re: Nach dem "AfterUpdate()" Ereigniss zum (vormals) letzten Datensatz springen
Beitrag von: PhilS am Mai 18, 2024, 17:25:56
Zitat von: KonradR am Mai 18, 2024, 11:20:41Allerdings müsste ich, wenn ich nach der Nummerierung im RecordsetClone filtere, diese auch direkt ansprechen. Leider habe ich nichts dazu im Netz gefunden.
Filtern kann man nach Daten in den Datensätzen des jeweiligen Recordset. Die aktuelle Position des Datensatzzeigers innerhalb des Recordset gehört aber nicht zu diesen Daten, sondern ist eine Eigenschaft des Recordsets.

Ich verstehe bisher nicht richtig, was du überhaupt vorhast und dein Code erscheint auch eher fragwürdig.

Vielleicht tut die folgende Zeile schon was du willst:
Me.Recordset.AbsolutePosition =  Me.Recordset.AbsolutePosition +1

Titel: Re: Nach dem "AfterUpdate()" Ereigniss zum (vormals) letzten Datensatz springen
Beitrag von: KonradR am Mai 18, 2024, 17:49:19
Zitat von: Beaker s.a. am Mai 18, 2024, 16:12:39Vielleicht hilft dies.
Das war sehr hilfreich. Vielen Dank. Das hat mein Problem gelöst.
Titel: Re: Nach dem "AfterUpdate()" Ereigniss zum (vormals) letzten Datensatz springen
Beitrag von: KonradR am Mai 18, 2024, 17:57:27
Zitat von: PhilS am Mai 18, 2024, 17:25:56Ich verstehe bisher nicht richtig, was du überhaupt vorhast und dein Code erscheint auch eher fragwürdig.

Ja, das war viel zu umständlich und kompliziert. Ich bin erstaunt, wie einfach sich mein Vorhaben auf eine Codezeile reduzieren lässt. Ich habe noch eine Schaltfläche, die nach dem Kombinationsfeld in dem Unterformular angeordnet ist. Das habe ich dann mit:
Me.cmdGweEinheitenSpezifisch.SetFocus gelöst.