Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Doming am März 24, 2026, 11:58:24

Titel: rs.MoveLast springt nicht zum letzten DS?
Beitrag von: Doming am März 24, 2026, 11:58:24
Hallo,

ich bin gerade arg verwirrt

2026-03-24 11_47_51-Access.png         Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_Wartungsprotokoll " _
                                       & "WHERE Autor = '" & Environ("Username") & "'")
        If Not rs.EOF Then
            rs.MoveLast
            If DateDiff("s", rs!Zeit, Now) > 300 Then
               
               
            End If
        End If
Die Tabelle hat etwa 130.000 DS, der gesuchte Autor hat knapp 240 DS.
Der erste Datensatz in der Tabelle (gefiltert nach diesem Autor) hat die 164164. der letzte die ID 174534.

Frage ich im Haltemodus in der Zeile DateDiff im obigen Code die Zeit ab, gibt er mir das Datum vom Datensatz 164331 an. Gebe ich dann im Direktfenster rs.MoveFirst ein, springt er zum DS 174488, eine Eingabe von rs.MoveLast ergibt dann wieder ID 164331.

Was ist das für eine Logik?

Gruß
 Doming
Titel: Re: rs.MoveLast springt nicht zum letzten DS?
Beitrag von: Bitsqueezer am März 24, 2026, 12:16:44
Hallo,

die Logik ist, daß eine SELECT-Abfrage Datensätze in beliebiger Reihenfolge ausgibt, solange es kein ORDER BY gibt.

"Last" ist dann der letzte in der Sortierreihenfolge. Ohne ORDER BY kann es irgendein Datensatz sein, es KANN der letzte PK sein, aber das ist keine Garantie.

Es gilt bei SELECT: Performance first, wenn es gerade günstiger ist, eine andere Reihenfolge zurückzugeben, dann wird das eben diese sein.

Gruß

Christian
Titel: Re: rs.MoveLast springt nicht zum letzten DS?
Beitrag von: Doming am März 24, 2026, 12:49:01
hm, danke für die Aufklärung. Ich dachte bisher tatsächlich, dass Movelast bei einem Aufruf ohne Sortierung zum chronologisch letzten Datensatz führt, also autowertbasiert.
Ich glaube ich muss so einige meiner DB-Gerüste nochmal neu bewerten.