Last but not first (Access 97, 2000)
Veröffentlicht am 30.12.2003
Erster oder der letzter Datensatz?
Access stellt keine direkte Funktion zur Verfügung, um innerhalb eines Formulars festzustellen, ob momentan der erste oder der letzte Datensatz angezeigt wird.
Mit Hilfe einer geklonten Datensatzgruppe lässt sich dies jedoch leicht feststellen.
Die VBA-Funktion CheckRecord erwartet beim Aufruf eine Referenz auf ein bestimmtes Formular. Das Ergebnis ist einer der folgenden Werte:
Wert | Bedeutung |
0 | Es wird weder der erste noch der letzte Datensatz angezeigt |
-1 | Es wird der erste Datensatz angezeigt |
1 | Es wird der letzte Datensatz angezeigt |
-2 | Es wird ein neuer Datensatz angezeigt |
Die Funktion hat den folgenden Aufbau:
Function CheckRecord(FormObj As Form)
Dim R As Recordset
Dim Anzahl As Long
If FormObj.NewRecord Then
CheckRecord = -2
Exit Function
End If
Set R = FormObj.RecordsetClone
R.MoveLast
Anzahl = R.RecordCount
R.Bookmark = FormObj.Bookmark
Select Case R.AbsolutePosition
Case 0
CheckRecord = -1
Case Anzahl - 1
CheckRecord = 1
Case Else
CheckRecord = 0
End Select
End Function
Zunächst wird mittels der NewRecord-Eigenschaft überprüft, ob ein neuer Datensatz aktiv ist. Wenn dies nicht der Fall ist, wird mit Hilfe der RecordsetClone-Eigenschaft eine Datensatzgruppe erzeugt, die exakt die gleichen Datensätze enthält, die auch dem Formular zugrunde liegen.
Nach Ermittlung der Anzahl der Datensätze wird durch Austausch von Lesezeichen (Bookmark-Eigenschaft) innerhalb der Datensatzgruppe der gleiche Datensatz wie im Formular aktiviert. Die Überprüfung, welcher Datensatz aktiv ist, erfolgt schließlich mit Hilfe der AbsolutePosition-Eigenschaft, die die Nummer des aktuellen Datensatzes enthält.
Wenn beispielsweise der erste Datensatz aktiv ist, besitzt die Eigenschaft den Wert 0; beim letzten Datensatz den Wert Anzahl -1.