Hi,
also so wie ich das sehe kommt es auf die Anwendung an ob sich das klonen lohnt oder nicht.
Generell: Wenn du FindFirst aufrufst, so wie du es oben vorgemacht hast, können zwei Dinge passieren:
- Es gibt einen Treffer, dann steht das Recordset nach der Suche auf dem ersten Treffer
- Es gibt keinen Treffer, dann steht das Recordset nach der Suche vor (oder auf?) dem ersten Datensatz.
Fall (2) erkennst du indem du nach der Suche die .NoMatch-Eigenschaft (true|false) ausliest. Was die mit dem Clonen lediglich machen ist dafür zu sorgen, dass eine Maske ihren aktuellen Datensatz nicht verliert nur weil im "Hintergrund" eine Suche läuft. Dazu gibts mindestens mal die folgenden Lösungen:
Dim rst As Recordset
Set rst = R.RecordSetClone
rst.FindFirst "[LastName] = 'Smith'"
If rst.NoMatch Then
Msgbox "The person was not found"
Else
''' Use the bookmark property to set the form's current record to the one found.
R.Bookmark = rst.Bookmark
End If
Der Spatz dürfte erlegt sein - na ja, vielleicht etwas übertrieben. Man erstellt vom aktuellen Recordset einen Klon, sucht auf dem Klon, und sollte man tatsächlich was finden, dann nimmt man das Bookmark zur Hilfe: Aus dem Klon liest man per Bookmark ein Lesezeichen aus (=aktueller Datensatz) und setzt es als aktuellen Datensatz für das ursprüngliche Recordset.
Vorteil dieser Variante ist, dass selbst wenn die Maske direkt auf dem Recordset R arbeitet und damit auf jegliche Bewegungen innerhalb der Datensätze reagiert, sie hier nur dann eine Veränderung vornimmt um tatsächlich den Treffer anzuzeigen
Die Kurzform von (1), Bookmarken können wir selber!
Dim aktuellerSatz As String
aktuellerSatz = R.Bookmark
R.FindFirst "[LastName] = 'Smith'"
If R.NoMatch Then
Msgbox "The person was not found"
R.Bookmark = aktuellerSatz
End If
-> Beachte die umgekehrte Logik: Findet die Suche einen Treffer ist alles OK, R steht automatisch darauf (damit ggf. auch die Anzeigemaske). Bei KEINEM Treffer macht R allerdings was falsche, es wechselt nämlich weg vom aktuellen Satz, ganz an den Anfang (und nimmt evtl. die Anzeigemaske mit). Daher müssen wir für diesen Fall auf den vorherigen aktuellen Satz zurück.
MfG
Rouven
-------------------
ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|