Kein Datensatz- und Positionswechsel bei Requery

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 (siehe Bild 1).

pic001.tif

Bild 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:

SilentRequery Me, ArtikelID, Artikelname

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar