HINWEIS
Kapitel 6: DAO-Programmierung
werden z. B. feststellen, dass ein neuer Datensatz vor dem Sichern nicht gelöscht werden kann und dass ein
Sichern nur dann möglich ist, wenn der Inhalt mindestens eines Textfeldes verändert worden ist. Wenn Sie
das Editieren bzw. Hinzufügen wieder rückgängig machen wollen, bewegen Sie sich einfach weiter, ohne zu
sichern.
Bemerkungen
Statt einer Tabelle wäre auch das Öffnen eines Dynasets möglich, z. B. mit:
Set tbl = db.OpenRecordset("SELECT * FROM BGA ORDER BY Rdatum")
Beachten Sie, dass hier die Sortierreihenfolge nach dem Einfügen eines neuen Datensatzes erst bei
erneutem Programmstart sichtbar wird.
Der mit der Edit- bzw. AddNew-Methode eingestellte Editier- bzw. Hinzufügen-Modus gilt nur für den
gerade aktuellen Datensatz. Beim Weiterbewegen durch die Datenbank geht dieser Modus verloren, der
Inhalt des Kopierpuffers wird vernichtet.
Den Datensatzzeiger bewegen
Slider-ActiveX-Komponente; Database-Objekt; CurrentDb-Funktion;
Das vorliegende Beispiel stellt Ihnen die verschiedenen Möglichkeiten vor, mit denen Sie den Satzzeiger in
einer Datensatzgruppe bewegen können. Dazu gehört neben den einfachen Navigationsschaltflächen
(»Erster«, »Letzter«, »Vorhergehender«, »Nächster«) auch das Implementieren von Lesezeichen (Book-
marks) und ein schnelles Positionieren mittels Schieberegler.
Da die Bewegungsmöglichkeiten nur dann eindrucksvoll demonstriert werden können wenn eine größere
Anzahl von Datensätzen zur Verfügung steht, wollen wir als Datensatzquelle die Tabelle »Städte und Telefonvorwahl« benutzen.
Oberfläche
Den Grundaufbau der Oberfläche entnehmen Sie folgender Abbildung. Am unteren Rand befindet sich ein
Microsoft Slider Control 6.0, welches Sie über das Symbol »ActiveX-Steuerelement einfügen« der Multifunk-
tionsleiste erreichen.
Abbildung 6.15 Entwurfsansicht des Formulars
342
HINWEIS
Beachten Sie, dass es sich bei beiden Textfeldern um »ungebundene« Controls handelt, denn wir wollen die
Datensätze erst zur Laufzeit darstellen.
Quelltext
Zunächst müssen wir einige globale Variablen definieren:
Private db As Database, dy As Recordset
Private lesezeichen ' speichert das Lesezeichen
Mit dem Laden des Formulars initialisieren wir die
Recordset
-Variable (Typ Dynaset), über die wir auf die
Datensätze zugreifen können.
Private Sub Form_Load()
Set db = CurrentDb()
Set dy = db.OpenRecordset("Städte und Telefonvorwahl", dbOpenDynaset)
Mit dem Bewegen auf den letzten Datensatz wird gleichzeitig die Gesamtzahl der Datensätze (Records) ermit-
telt, die sich über die
RecordCount
-Eigenschaft auslesen lässt:
dy.MoveLast
Slider1.Max = dy.RecordCount
Damit wäre auch schon der Maximalwert für den Schieberegler (Slider-Control) festgelegt. Das Rücksetzen
des Satzzeigers auf den Anfang des Recordsets erfolgt mit:
dy.MoveFirst
Call anzeigen
End Sub
Die Prozedur
Anzeigen
sorgt dafür, dass der gerade aktuelle Datensatz auch auf dem Bildschirm erscheint.
Normalerweise müsste erst auf NULL-Werte geprüft werden, wir verzichten aber darauf. Gleichzeitig wird
die Position des Schiebers im Steuerelement (Slider-Control) korrigiert:
Sub anzeigen()
Text0.Value = dy.Fields("ort")
Text1.Value = dy.Fields("vorwahl")
Scroll.Value = dy.AbsolutePosition ' Position Slider setzen
End Sub
Das Bewegen auf den ersten bzw. letzten Datensatz ist trivial. Wenn Sie aber damit rechnen müssen, dass die
Datenbank leer ist, sollten Sie eine Fehlerbehandlung vorsehen.
Private Sub Befehl0_Click()
dy.MoveFirst
Call anzeigen
End Sub
Private Sub Befehl3_Click()
dy.MoveLast
Call anzeigen
End Sub
Ein wenig aufwändiger gestaltet sich schon das Bewegen auf den vorhergehenden bzw. folgenden Datensatz:
343
Praxisbeispiele
HINWEIS
Kapitel 6: DAO-Programmierung
Private Sub Befehl1_Click()
dy.MovePrevious
If dy.BOF Then dy.MoveFirst
Call anzeigen
End Sub
Private Sub Befehl2_Click()
dy.MoveNext
If dy.EOF Then dy.MoveLast
Call anzeigen
End Sub
Die beiden folgenden Abbildungen verdeutlichen noch einmal den Ablauf.
BOF 1 2
3
4
EOF
BOF 1 2
3
4
EOF
Tabelle gerade geöffnet:
BOF 1 2
3
4
EOF
MovePrevious:
MoveFirst:
BOF = True !!!!
BOF = False
BOF = False
Abbildung 6.16 Vorhergehender Datensatz
BOF 1 2
3
4
EOF
BOF 1 2
3
4
EOF
BOF 1 2
3
4
EOF
MoveNext:
MoveLast:
EOF = True !!!!
EOF = False
EOF = False
Abbildung 6.17 Nächster Datensatz
In diesem Zusammenhang sei auf die Move-Methode hingewiesen, mit der Sie den Satzzeiger relativ oder
absolut um eine bestimmte Anzahl von Datensätzen bewegen können.
344
Eine effektive Möglichkeit, die Satzzeigerposition zu verschieben, bietet sich mit der
AbsolutePosition
-Eigen-
schaft. Jede Veränderung am
Slider
-Control hat eine Änderung der Satzzeigerposition zur Folge.
Private Sub Slider1_Scroll()
dy.AbsolutePosition = Slider1.Value
Text0.Value = dy.Fields("Ort")
Text1.Value = dy.Fields("Vorwahl")
End Sub
Die Arbeit mit den Lesezeichen ist relativ einfach, durch Auslesen der Eigenschaft
Bookmark
erhalten Sie
einen »Zeiger« auf den aktuellen Datensatz.
Private Sub Befehl4_Click() ' Set Bookmark
lesezeichen = dy.bookmark
Befehl12.Visible = True
End Sub
Die Schaltfläche »Goto Bookmark« wird erst eingeblendet, wenn ein Lesezeichen festgelegt worden ist. Dieses
können Sie später dazu verwenden, den aktuellen Datensatz zu wechseln:
Private Sub Befehl5_Click() ' Goto Bookmark
dy.bookmark = lesezeichen
anzeigen
End Sub
Test
Auf Grund der alphabetischen Sortierung des Recordsets ist es überhaupt kein Problem, sich mittels
Schieberegler schnell durch Tausende von Datensätzen zu bewegen. Der »Feinabgleich« ist jederzeit mit den
Navigationsschaltflächen möglich. Testen Sie auch das Setzen von Lesezeichen!
Abbildung 6.18 Laufzeitansicht
Bemerkungen
Es besteht die Möglichkeit, den Satzzeiger auf den Modus »prozentual« zu setzen, verwenden Sie dazu
die Eigenschaft PercentPosition.
Die in den Beispieldaten mitgelieferte Tabelle »Städte und Telefonvorwahl« wurde gekürzt, um das Da-
tenvolumen zu begrenzen.
345
Praxisbeispiele

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.