|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| | | | | |
Zusammenfassung
Verhindern Sie in Endlos- und Datenblattformularen das Wechseln des Datensatzes nach dem Aktualisieren.
Techniken
Formulare, VBA
Voraussetzungen
Access 2000 und höher
Beispieldateien
Datensatzposition.mdb
Shortlink
602
Kein Datensatz- und Positionswechsel bei Requery
André Minhorst, Duisburg
Formulare in der Endlos- und in der Datenblattansicht haben den Nachteil, dass sie nach einer Aktualisierung erstens nicht den gleichen Datensatz wie vor dem Requery anzeigen und schon gar nicht in der gleichen Position - außer natürlich, es handelt sich um den ersten Datensatz des Formulars. Das erschwert das Weiterbearbeiten von Daten, denn der Benutzer muss zuvor erst wieder zum gewünschten Datensatz navigieren.
Problem
Während der Bearbeitung eines Datensatzes in einem Formular, das in der Endlos- oder der Datenblattansicht angezeigt wird, kann es sein, dass per Code die Requery-Methode des Formulars aufgerufen wird. Dies führt dazu, dass der Datensatzzeiger wieder auf dem ersten Datensatz der Datenherkunft positioniert wird. Ein solches Requery ist beispielsweise nötig, wenn per VBA-Code die Daten dieses Datensatzes geändert wurden und die Ã"nderung im Formular angezeigt werden soll.
Lösung
Viele Benutzer geben sich damit zufrieden, wenn der vor dem Requery aktive Datensatz auch nach dem Requery noch aktiviert ist. Für diesen Fall reicht es aus, wenn Sie rund um das Requery die folgenden Anweisungen anlegen:
Dim lng As Long
lng = Me!ArtikelID
Me.Painting = False
Me.Requery
Me.Recordset.FindFirst "ArtikelID=" & lng
Me.Painting = True
Dabei speichert lng zunächst den Primärschlüsselwert des aktuellen Datensatzes. Das Setzen der Painting-Eigenschaft des Formulars auf den Wert False sorgt dafür, dass das Formular bis zum Zurücksetzen dieser Eigenschaft auf den Wert True nicht aktualisiert wird, was eventuelles Flackern verhindert. Nach der eigentlichen Requery-Methode springt das Formular dann wieder zum Datensatz mit der zuvor gemerkten ID, das Setzen von Painting auf True aktiviert die Formularaktualisierung wieder. Der Haken bei dieser Lösung ist, dass der zuvor ausgewählte Datensatz zwar noch aktiv und auch sichtbar ist, sich aber nicht mehr an der gleichen Stelle befindet (s. Abb. 1).
Abb. 1: Nach dem Requery unter Beibehaltung des aktiven Datensatzes wird dieser ganz oben angezeigt, sofern dieser nicht zu den Datensätzen gehört, die beim Öffnen des Formulars sichtbar sind.
Positionswechsel verhindern
Abhilfe schafft eine Erweiterung der oben aufgeführten Zeilen, die auch die Position prüfen und diese wiederherstellen. Damit Sie dies leicht in eigene Anwendungen einbauen können, haben wir eine Routine vorbereitet, die Sie in ein Standardmodul einfügen und vom betroffenen Formular aus aufrufen können. Anstelle der üblichen Requery-Anweisung geben Sie nun etwa die folgende Zeile ein:
|