VB5-VB6
Von: Ulrich Cech
Oftmals ist es für die Erfassung und Weiterverarbeitung von Daten erforderlich, den Wert eines AutoIncrease- Feldes direkt nach dem hinzufügen eines neuen Datensatzes zu ermitteln.
Das Problem dabei ist, dass nach einem Requery die Bookmark-Eigenschaft des ADO- Recordsets zurückgesetzt wird. Mit AbsolutePosition kommt man bei sortierten Recordsets ebenfalls nicht weiter, da das Recordset nach einem Requery neu sortiert wird und sich die Positionen verschieben. Gesucht wird also eine Möglichkeit, ein sortiertes Recordset zu erhalten und trotzdem auf neu hinzugefügte Datensätze direkt zugreifen zu können (am besten auch noch gleich in der korrekt sortierten Position des Recordsets). Vor allem aber sollte der Datensatzzeiger auf dem gerade hinzugefügten Datensatz (nach einem Requery) stehenbleiben.
Lösung:
Erstellt wird ein ganz normales Recordset ohne "ORDER BY" Klausel in der SQL- Anweisung. In dem Formular, welches auf diesem Recordset basiert, wird in der Form_Load- Anweisung die Sort- Eigenschaft des Recordsets verwendet (z.B. RS.Sort = "Name ASC, Vorname ASC"). Dadurch wird das Recordset geladen und in sortierter Reihenfolge angezeigt. Bevor nun ein neuer Datensatz hinzugefügt wird (mit RS.AddNew), muss die Sort- Eigenschaft wieder zurückgesetzt werden (RS.Sort = ""). Anschließend kann gleich ein RS.AddNew erfolgen. Beim Speichern (am besten über einen Command-Button) könnte man dann folgenden Code einsetzen:
' varBookmark ist eine im Deklarationsabschnitt des ' Formulars deklarierte Variant-Variable! With RS .Requery .MoveLast varBookmark = .Bookmark .Sort = "Name ASC, Vorname ASC" .Bookmark = varBookmark End With
Der Trick dabei ist, dass der neue Datensatz auf jeden Fall der letzte Datensatz ist (es sei denn, das Recordset wurde sortiert etc.), daher musste auch vorher die Sort- Eigenschaft ausgeschaltet werden bzw. das Recordset darf nicht mit irgendwelchen "ORDER BY" Klauseln aufgerufen werden. Wenn man nun auf den letzten Datensatz geht, kann man wie gewohnt auf alle Felder zugreifen (auch auf das AutoIncrease- Feld, das nun einen korrekten Wert zurückgibt). Auf diesen letzten Datensatz setzt man nun ein Bookmark, stellt die Sort- Eigenschaft wieder ein und positioniert den Datensatzzeiger mithilfe des gespeicherten Bookmarks auf den neuen Datensatz (der sich nun auch bereits in der richtigen Sortierreihenfolge befindet).