Posts tagged: Blättern

Selektive Datensätze – oder wie zeige ich Datensätze seitenweise an

By , 10. Mai 2011

Eine bekannte Problematik ist, wie man viele Datensätze so anzeigt, dass immer nur eine bestimmte Anzahl sichtbar wird, gleichzeitig aber Seitenartig geblättert werden kann.
Aus der PHP/MySQL Welt ist die Möglichkeit bekannt in einer Abfrage die Datensätze mittels dem Limit Operator die Anzahl und die Startposition der Datensätze einzustellen. Diese Möglichkeit gibt es in Access leider nicht – man kann sich aber behelfen.

Möchte man z.B. die sortierten Datensätze 31 bis 40 darstellen, lässt sich das dadurch bewerkstelligen, indem man die Top 40 Datensätze nimmt, und von diesen in umgekehrter Reihenfolge die Top 10 Datensätze nimmt. Jetzt hat man die Datensätze 40……bis 31 in umgekehrter Reihenfolge. Auf diese Menge wendet man eine äußere Abfrage an die absteigend aufsteigend sortiert und schon hat man die richtige Ergebnismenge in der korrekten Reihenfolge.

In meinem Beispiel verwende ich ein Unterformular in Datenblattansicht, 4 Buttons zur Navigation und 1 Bezeichnungsfeld als Datensatzanzeiger. Es werden immer 10 Einträge pro Seite angezeigt.

Zuerst werden in einem Modul Globale Variablen deklariert:

Global sumDS As Long
Global start As Long

Dann benötigt man eine Prozedur die die Datenherkunft des Unterformulars einstellt:

Private Sub setQuery(start As Long, Optional perpage As Long = 10)
    Me!ufo1.Form.RecordSource = "SELECT tblKfzKennzeichen.ID, tblKfzKennzeichen.Kennzeichen, tblKfzKennzeichen.Bezirk " & _
                                "FROM tblKfzKennzeichen " & _
                                "WHERE (((tblKfzKennzeichen.ID) In (Select Top " & perpage & " ID From (Select top " & start & " ID From tblKfzKennzeichen) Order By ID Desc))) " & _
                                "ORDER BY tblKfzKennzeichen.ID;"

    Me.DSAnzeiger.Caption = "Eintrag " & start - (perpage - 1) & " bis " & start
    Me!ufo1.Form.Requery
End Sub

Read more »

OfficeFolders theme by Themocracy