Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

rs.MoveLast springt nicht zum letzten DS?

Begonnen von Doming, Heute um 11:58:24

⏪ vorheriges - nächstes ⏩

Doming

Hallo,

ich bin gerade arg verwirrt

Sie dürfen in diesem Board keine Dateianhänge sehen.         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

Bitsqueezer

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

Doming

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